mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-06 12:58:22 +03:00
journal: move mmap() ENOMEM loop to function
Introduces mmap_try_harder()
This commit is contained in:
parent
90d222c190
commit
db87967e5b
@ -469,6 +469,33 @@ static int find_mmap(
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int mmap_try_harder(MMapCache *m, void *addr, int fd, int prot, int flags, uint64_t offset, size_t size, void **res) {
|
||||
void *ptr;
|
||||
|
||||
assert(m);
|
||||
assert(fd >= 0);
|
||||
assert(res);
|
||||
|
||||
for (;;) {
|
||||
int r;
|
||||
|
||||
ptr = mmap(addr, size, prot, flags, fd, offset);
|
||||
if (ptr != MAP_FAILED)
|
||||
break;
|
||||
if (errno != ENOMEM)
|
||||
return -errno;
|
||||
|
||||
r = make_room(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
*res = ptr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int add_mmap(
|
||||
MMapCache *m,
|
||||
int fd,
|
||||
@ -522,19 +549,9 @@ static int add_mmap(
|
||||
wsize = PAGE_ALIGN(st->st_size - woffset);
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
d = mmap(NULL, wsize, prot, MAP_SHARED, fd, woffset);
|
||||
if (d != MAP_FAILED)
|
||||
break;
|
||||
if (errno != ENOMEM)
|
||||
return -errno;
|
||||
|
||||
r = make_room(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
r = mmap_try_harder(m, NULL, fd, prot, MAP_SHARED, woffset, wsize, &d);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
c = context_add(m, context);
|
||||
if (!c)
|
||||
|
Loading…
x
Reference in New Issue
Block a user