On Fri, Jan 03, 2020 at 03:54:51PM +0800, Xiao Yang wrote: > Current fsx cannot drop keep_size flag if it is specified by --replay-ops but not > supported by fallocate(). For example, running generic/469 got the following > error on NFSv4.2: > ---------------------------------------------------- > main: filesystem does not support fallocate mode FALLOC_FL_KEEP_SIZE, disabling! > ... > fallocate: 0x0 to 0x1000 > do_preallocate: fallocate: Operation not supported > LOG DUMP (1 total operations): > 1( 1 mod 256): FALLOC 0x0 thru 0x1000 (0x1000 bytes) PAST_EOF > ... > ---------------------------------------------------- > > Avoid calling fallocate(FALLOC_FL_KEEP_SIZE) in this case by ignoring keep_size flag. > > BTW: NFSv4.2 doesn't support single keep_size flag,as below: > ---------------------------------------------------- > if ((mode != 0) && (mode != (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE))) > return -EOPNOTSUPP; > ---------------------------------------------------- > > Signed-off-by: Xiao Yang <yangx.jy@xxxxxxxxxxxxxx> > --- > ltp/fsx.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/ltp/fsx.c b/ltp/fsx.c > index 06d08e4e..4da9d7d8 100644 > --- a/ltp/fsx.c > +++ b/ltp/fsx.c > @@ -1948,7 +1948,18 @@ test(void) > size = log_entry.args[1]; > offset2 = log_entry.args[2]; > closeopen = !!(log_entry.flags & FL_CLOSE_OPEN); > + > + /* > + * Ignore unsupported keep_size flag even if it's specified > + * by --replay-ops > + */ > keep_size = !!(log_entry.flags & FL_KEEP_SIZE); > + if (!keep_size_calls && keep_size) { > + if (!quiet) > + prt("Ignoring unsupported keep_size flag\n"); > + keep_size = 0; > + } > + I proposed a similar fix back in 2017[1], but Amir didn't like it because my patch (and your patch) ignored keep_size silently (newly generated ops list was different than the one fed to --replay-ops). I proposed a new version in last Oct[2], which will record such ops as skipped in the generated ops list, and Brian suggested to add a switch to control the behavior if we want to fail fsx on unsupported ops. But I didn't have time to work on it since then.. Would you like to help implement the switch Brian suggested based on my second patch? Then I can apply my v2 patch & your switch patch. Thanks! Eryu [1] https://spinics.net/lists/fstests/msg07953.html [2] https://lore.kernel.org/fstests/20191023130934.GD59518@bfoster/ > goto have_op; > } > return 0; > -- > 2.21.0 > >