Use ext2fs_close2 API if available to avoid unnecessary fsync.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 23 Sep 2011 10:25:27 +0000 (11:25 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 24 Sep 2011 17:19:46 +0000 (18:19 +0100)
This saves over 5 seconds during the slow path construction of the
appliance.

The ext2fs_close2 API is present in the e2fsprogs 'next' branch and
will be in a later e2fsprogs release (thanks Ted Ts'o).

configure.ac
helper/ext2.c

index a75a581..23c876b 100644 (file)
@@ -105,6 +105,7 @@ old_LIBS="$LIBS"
 AC_CHECK_LIB([ext2fs],[ext2fs_file_open2],[],[
   AC_MSG_FAILURE([libext2fs library not found (part of e2fsprogs)])
 ])
+AC_CHECK_FUNCS([ext2fs_close2])
 LIBS="$old_LIBS"
 
 AC_CHECK_HEADER([ext2fs/ext2fs.h],[],[
index 2395871..56ad5e5 100644 (file)
@@ -107,8 +107,16 @@ ext2_start (const char *hostcpu, const char *appliance,
 static void
 ext2_end (void)
 {
+  if (verbose)
+    print_timestamped_message ("closing ext2 filesystem");
+
   /* Write out changes and close. */
-  errcode_t err = ext2fs_close (fs);
+  errcode_t err;
+#ifdef HAVE_EXT2FS_CLOSE2
+  err = ext2fs_close2 (fs, EXT2_FLAG_FLUSH_NO_SYNC);
+#else
+  err = ext2fs_close (fs);
+#endif
   if (err != 0)
     error (EXIT_FAILURE, 0, "ext2fs_close: %s", error_message (err));
 }