On Thu, Mar 28, 2019 at 06:54:58PM +0000, fdmanana@xxxxxxxxxx wrote: > From: Filipe Manana <fdmanana@xxxxxxxx> > > Currently the afsync function can only be performed against regular files. > Allow it to operate on directories too, to increase test coverage and allow > for chances of finding bugs in the filesystem implementation of fsync > against directories. > > Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx> > --- > ltp/fsstress.c | 24 ++++++++++++++++-------- > 1 file changed, 16 insertions(+), 8 deletions(-) > > diff --git a/ltp/fsstress.c b/ltp/fsstress.c > index ffe78ef7..0fb9e399 100644 > --- a/ltp/fsstress.c > +++ b/ltp/fsstress.c > @@ -1767,15 +1767,21 @@ afsync_f(int opno, long r) > struct iocb iocb; > struct iocb *iocbs[] = { &iocb }; > struct io_event event; > + DIR *dir = NULL; > > init_pathname(&f); > - if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { > + if (!get_fname(FT_REGFILE | FT_DIRm, r, &f, NULL, NULL, &v)) { > if (v) > printf("%d/%d: afsync - no filename\n", procid, opno); > free_pathname(&f); > return; > } > fd = open_path(&f, O_WRONLY | O_DIRECT); > + if (fd < 0 && errno == EISDIR) { > + dir = opendir_path(&f); > + if (dir) > + fd = dirfd(dir); > + } You've added this pattern to about 5 functions now. Please factor the whole getname/open thing into a helper that can be used everywhere.... > e = fd < 0 ? errno : 0; > check_cwd(); > if (fd < 0) { > @@ -1783,6 +1789,8 @@ afsync_f(int opno, long r) > printf("%d/%d: afsync - open %s failed %d\n", > procid, opno, f.path, e); > free_pathname(&f); > + if (dir) > + closedir(dir); > return; > } > > @@ -1791,24 +1799,24 @@ afsync_f(int opno, long r) > if (v) > printf("%d/%d: afsync - io_submit %s %d\n", > procid, opno, f.path, e); > - free_pathname(&f); > - close(fd); > - return; > + goto out; > } > if ((e = io_getevents(io_ctx, 1, 1, &event, NULL)) != 1) { > if (v) > printf("%d/%d: afsync - io_getevents failed %d\n", > procid, opno, e); > - free_pathname(&f); > - close(fd); > - return; > + goto out; > } > > e = event.res2; > if (v) > printf("%d/%d: afsync %s %d\n", procid, opno, f.path, e); > +out: > free_pathname(&f); > - close(fd); > + if (dir) > + closedir(dir); > + else > + close(fd); Same here for close. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx