Make sure to fsync(2) the main block device when scrubbing signatures
authorDavid Zeuthen <davidz@redhat.com>
Tue, 26 Jan 2010 13:47:50 +0000 (08:47 -0500)
committerDavid Zeuthen <davidz@redhat.com>
Tue, 26 Jan 2010 13:47:50 +0000 (08:47 -0500)
src/helpers/Makefile.am
src/helpers/job-create-partition.c
src/helpers/job-shared.h

index 30d5fa7..fb2207c 100644 (file)
@@ -50,8 +50,8 @@ udisks_helper_delete_partition_CPPFLAGS = $(AM_CPPFLAGS)
 udisks_helper_delete_partition_LDADD = $(GLIB_LIBS) libpartutil.la
 
 udisks_helper_create_partition_SOURCES = job-shared.h job-create-partition.c
-udisks_helper_create_partition_CPPFLAGS = $(AM_CPPFLAGS)
-udisks_helper_create_partition_LDADD = $(GLIB_LIBS) libpartutil.la
+udisks_helper_create_partition_CPPFLAGS = $(AM_CPPFLAGS) $(GUDEV_CFLAGS)
+udisks_helper_create_partition_LDADD = $(GLIB_LIBS) $(GUDEV_LIBS)  libpartutil.la
 
 udisks_helper_modify_partition_SOURCES = job-shared.h job-modify-partition.c
 udisks_helper_modify_partition_CPPFLAGS = $(AM_CPPFLAGS)
index f34fbfe..9f8b202 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/blkpg.h>
 
 #include <glib.h>
+#include <gudev/gudev.h>
 
 #include "job-shared.h"
 #include "partutil.h"
index bd66c32..cf78474 100644 (file)
@@ -134,7 +134,7 @@ scrub_signatures (const char *device,
   fd = open (device, O_WRONLY);
   if (fd < 0)
     {
-      g_printerr ("cannot open device: %m\n");
+      g_printerr ("cannot open %s: %m\n", device);
       goto out;
     }
 
@@ -142,7 +142,7 @@ scrub_signatures (const char *device,
     {
       if (ioctl (fd, BLKGETSIZE64, &size) != 0)
         {
-          g_printerr ("cannot determine size of device: %m\n");
+          g_printerr ("cannot determine size of %s: %m\n", device);
           goto out;
         }
     }
@@ -160,7 +160,7 @@ scrub_signatures (const char *device,
 
   if (lseek64 (fd, offset, SEEK_SET) == (off64_t) - 1)
     {
-      g_printerr ("cannot seek to %" G_GINT64_FORMAT ": %m", offset);
+      g_printerr ("cannot seek to %" G_GINT64_FORMAT " on %s: %m", offset, device);
       goto out;
     }
 
@@ -169,7 +169,7 @@ scrub_signatures (const char *device,
 
   if (lseek64 (fd, offset + size - wipe_size, SEEK_SET) == (off64_t) - 1)
     {
-      g_printerr ("cannot seek to %" G_GINT64_FORMAT ": %m", offset + size - wipe_size);
+      g_printerr ("cannot seek to %" G_GINT64_FORMAT " on %s: %m", offset + size - wipe_size, device);
       goto out;
     }
 
@@ -180,7 +180,14 @@ scrub_signatures (const char *device,
 
  out:
   if (fd >= 0)
-    close (fd);
+    {
+      if (fsync (fd) != 0)
+        {
+          g_printerr ("Error calling fsync(2) on %s: %m\n", device);
+          ret = FALSE;
+        }
+      close (fd);
+    }
   return ret;
 }