]> err.no Git - util-linux/commitdiff
umount: don't print duplicate error messages
authorKarel Zak <kzak@redhat.com>
Mon, 28 Jan 2008 12:13:25 +0000 (13:13 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 28 Jan 2008 12:13:25 +0000 (13:13 +0100)
umount(8) is trying to umount a device two times to prevent some
obscure scenarios. It's maybe a nice feature, but it also produces
duplicate error messages.

  # umount /home
  umount: /home: device is busy
  umount: /home: device is busy

Signed-off-by: Karel Zak <kzak@redhat.com>
mount/umount.c

index 5b9398793fc740ebed85049fc06fc36c9efdfc46..65c8622b57de857c2125489429c52351e69618ce 100644 (file)
@@ -77,6 +77,10 @@ int delloop = 0;
 /* True if ruid != euid.  */
 int suid = 0;
 
+/* Last error message */
+int complained_err = 0;
+char *complained_dev = NULL;
+
 /*
  * check_special_umountprog()
  *     If there is a special umount program for this type, exec it.
@@ -142,6 +146,15 @@ check_special_umountprog(const char *spec, const char *node,
 
 /* complain about a failed umount */
 static void complain(int err, const char *dev) {
+
+  if (complained_err == err && complained_dev && dev &&
+                 strcmp(dev, complained_dev) == 0)
+    return;
+
+  complained_err = err;
+  free(complained_dev);
+  complained_dev = xstrdup(dev);
+
   switch (err) {
     case ENXIO:
       error (_("umount: %s: invalid block device"), dev); break;