summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérôme Pouiller <jezz@sysmic.org>2017-10-09 16:28:53 +0200
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>2017-10-09 20:01:19 +0200
commite78339dd2882c8a95ad41d8d47629b16efb0f227 (patch)
tree20d03983b38c5ee053e4ce5dfa9d49598db429f8
parenta2ff8c0375e9cad8221a8ec246329b0b74e50b51 (diff)
downloadmemtool-e78339dd2882c8a95ad41d8d47629b16efb0f227.tar.gz
memtool-e78339dd2882c8a95ad41d8d47629b16efb0f227.tar.xz
call fallocate only if necessary
On some files below /sys mmap(2) works but posix_fallocate(3) does not. (e.g. some but not all of /sys/bus/pci/devices/*/resource* behave like this.) So only call posix_fallocate() if the file to write to is too small. Signed-off-by: Jérôme Pouiller <jezz@sysmic.org> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-rw-r--r--memtool.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/memtool.c b/memtool.c
index 28d886e..b790c8e 100644
--- a/memtool.c
+++ b/memtool.c
@@ -233,7 +233,7 @@ static void *memmap(const char *file, off_t addr, size_t *size, int readonly)
/* truncating */
*size = s.st_size - addr;
- } else {
+ } else if (s.st_size < addr + *size) {
int ret = posix_fallocate(memfd, addr, *size);
if (ret) {
errno = ret;