On Wed, Feb 19, 2020 at 05:42:13PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > Add a new function that will ensure that everything we scribbled on has > landed on stable media, and report the results. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- > db/init.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > > diff --git a/db/init.c b/db/init.c > index 0ac37368..e92de232 100644 > --- a/db/init.c > +++ b/db/init.c > @@ -184,6 +184,7 @@ main( > char *input; > char **v; > int start_iocur_sp; > + int d, l, r; > > init(argc, argv); > start_iocur_sp = iocur_sp; > @@ -216,6 +217,19 @@ main( > */ > while (iocur_sp > start_iocur_sp) > pop_cur(); > + > + libxfs_flush_devices(mp, &d, &l, &r); > + if (d) > + fprintf(stderr, _("%s: cannot flush data device (%d).\n"), > + progname, d); > + if (l) > + fprintf(stderr, _("%s: cannot flush log device (%d).\n"), > + progname, l); > + if (r) > + fprintf(stderr, _("%s: cannot flush realtime device (%d).\n"), > + progname, r); > + > + Seems like we could reduce some boilerplate by passing progname into libxfs_flush_devices() and letting it dump out of the error messages, unless there's some future code that cares about individual device error state. That said, it also seems the semantics of libxfs_flush_devices() are a bit different from convention. Just below we invoke libxfs_device_close() for each device (rather than for all three), and device_close() also happens to call fsync() and platform_flush_device() itself... Brian > libxfs_umount(mp); > if (x.ddev) > libxfs_device_close(x.ddev); >