summaryrefslogtreecommitdiffstats
path: root/sys-utils/fallocate.c
diff options
context:
space:
mode:
authorSami Kerola2014-07-16 22:54:57 +0200
committerKarel Zak2014-07-17 14:01:00 +0200
commit0407c1bef9f5bc39da0fcf2e21bc5bd8b48b5349 (patch)
treebea5d6d977f5d3885699185b998d83e6c4de0c43 /sys-utils/fallocate.c
parentlib/colors: remove memory leak (diff)
downloadkernel-qcow2-util-linux-0407c1bef9f5bc39da0fcf2e21bc5bd8b48b5349.tar.gz
kernel-qcow2-util-linux-0407c1bef9f5bc39da0fcf2e21bc5bd8b48b5349.tar.xz
kernel-qcow2-util-linux-0407c1bef9f5bc39da0fcf2e21bc5bd8b48b5349.zip
fallocate: avoid unnecessary computation
Where POSIX_FADV_SEQUENTIAL and HAVE_POSIX_FADVISE are not available it is waste of resources to have variables that are meaningful only for posix_fadvise(). Also initialize the variables immediately to correct values, and since cachesz is never changed mark it read only. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'sys-utils/fallocate.c')
-rw-r--r--sys-utils/fallocate.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/sys-utils/fallocate.c b/sys-utils/fallocate.c
index 93fd3b48e..c619f64cc 100644
--- a/sys-utils/fallocate.c
+++ b/sys-utils/fallocate.c
@@ -174,17 +174,12 @@ static void dig_holes(int fd, off_t off, off_t len)
{
off_t end = len ? off + len : 0;
off_t hole_start = 0, hole_sz = 0;
- off_t cache_start = 0;
uintmax_t ct = 0;
- size_t bufsz, cachesz;
+ size_t bufsz;
char *buf;
struct stat st;
-
- if (fstat(fd, &st) != 0)
- err(EXIT_FAILURE, _("stat failed %s"), filename);
-
- bufsz = st.st_blksize;
-
+#if defined(POSIX_FADV_SEQUENTIAL) && defined(HAVE_POSIX_FADVISE)
+ off_t cache_start = off;
/*
* We don't want to call POSIX_FADV_DONTNEED to discard cached
* data in PAGE_SIZE steps. IMHO it's overkill (too many syscalls).
@@ -193,15 +188,19 @@ static void dig_holes(int fd, off_t off, off_t len)
* a good compromise.
* -- kzak Feb-2014
*/
- cachesz = getpagesize() * 256;
+ const size_t cachesz = getpagesize() * 256;
+#endif
+
+ if (fstat(fd, &st) != 0)
+ err(EXIT_FAILURE, _("stat failed %s"), filename);
+
+ bufsz = st.st_blksize;
if (lseek(fd, off, SEEK_SET) < 0)
err(EXIT_FAILURE, _("seek on %s failed"), filename);
/* buffer + extra space for is_nul() sentinel */
buf = xmalloc(bufsz + sizeof(uintptr_t));
- cache_start = off;
-
#if defined(POSIX_FADV_SEQUENTIAL) && defined(HAVE_POSIX_FADVISE)
posix_fadvise(fd, off, 0, POSIX_FADV_SEQUENTIAL);
#endif