Improve 'zpool import' EBUSY error message
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 31 May 2012 19:42:51 +0000 (12:42 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 1 Jun 2012 15:55:24 +0000 (08:55 -0700)
When a device is already open O_EXCL by another process the
`zpool import` will correctly fail.  However, the default failure
message isn't very helpful.  It may in fact be harmful if you
take its advise and destroy your pool.

    cannot import 'tank': pool is busy
            Destroy and re-create the pool from
            a backup source.

Improve the error message in the EBUSY case to simply print a
message indicating that the devices are current in use.  The user
will need to manually identify which process has the device open
exclusively and why.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
lib/libzfs/libzfs_pool.c

index 0a2dca0..7b78f25 100644 (file)
@@ -1585,6 +1585,12 @@ zpool_import_props(libzfs_handle_t *hdl, nvlist_t *config, const char *newname,
                        (void) zpool_standard_error(hdl, error, desc);
                        break;
 
+               case EBUSY:
+                       zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+                           "one or more devices are already in use\n"));
+                       (void) zfs_error(hdl, EZFS_BADDEV, desc);
+                       break;
+
                default:
                        (void) zpool_standard_error(hdl, error, desc);
                        zpool_explain_recover(hdl,