On Feb 28, 2014, at 9:11 AM, Lukas Czerner <lczerner@xxxxxxxxxx> wrote: > This commit adds fallocate FALLOC_FL_ZERO_RANGE support for fsx. It looks like this patch breaks the option handling for these fallocate features. > int fallocate_calls = 1; /* -F flag disables */ > int punch_hole_calls = 1; /* -H flag disables */ > +int zero_range_calls = 1; /* -z flag disables */ So these fallocate tests are on by default... > +int > +test_fallocate(int mode) > { > #ifdef HAVE_LINUX_FALLOC_H > + int ret = 0; > if (!lite && fallocate_calls) { > + if (fallocate(fd, mode, 0, 1) && errno == EOPNOTSUPP) { > if(!quiet) > warn("main: filesystem does not support fallocate, disabling\n"); > } else { > + ret = 1; > ftruncate(fd, 0); > } > } > #endif > } And this returns 1 or 0 depending if they are supported or not... > + while ((ch = getopt(argc, argv, "b:c:dfl:m:no:p:qr:s:t:w:xyAD:FHzLN:OP:RS:WZ")) > != EOF) > switch (ch) { > case 'H': > punch_hole_calls = 0; > break; > + case 'z': > + zero_range_calls = 0; > + break; And the option parsing sets the values to zero if they are disabled, so far, so good... > + fallocate_calls = test_fallocate(0); > + punch_hole_calls = test_fallocate(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE); > + zero_range_calls = test_fallocate(FALLOC_FL_ZERO_RANGE); But here, the values set by option parsing are clobbered and the tests are only enabled or disabled depending on whether the kernel supports that feature or not. I think you need something like: if (fallocate_calls) fallocate_calls = test_fallocate(0); if (punch_hole_calls) punch_hole_calls = test_fallocate(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE); if (zero_range_calls) zero_range_calls = test_fallocate(FALLOC_FL_ZERO_RANGE); Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail