Return finer grain errors in libzfs unmount_one
Added errno mappings to unmount_one() in libzfs. Changed do_unmount() implementation to return errno errors directly like is done for do_mount() and others. Reviewed-by: Mark Maybee <mark.maybee@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Don Brady <don.brady@delphix.com> Closes #11681
This commit is contained in:
parent
4fdbd43450
commit
f5ada6538d
|
@ -22,7 +22,7 @@
|
|||
/*
|
||||
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2020 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2014, 2021 by Delphix. All rights reserved.
|
||||
* Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>
|
||||
* Copyright 2017 RackTop Systems.
|
||||
* Copyright (c) 2018 Datto Inc.
|
||||
|
@ -553,7 +553,28 @@ unmount_one(libzfs_handle_t *hdl, const char *mountpoint, int flags)
|
|||
|
||||
error = do_unmount(mountpoint, flags);
|
||||
if (error != 0) {
|
||||
return (zfs_error_fmt(hdl, EZFS_UMOUNTFAILED,
|
||||
int libzfs_err;
|
||||
|
||||
switch (error) {
|
||||
case EBUSY:
|
||||
libzfs_err = EZFS_BUSY;
|
||||
break;
|
||||
case EIO:
|
||||
libzfs_err = EZFS_IO;
|
||||
break;
|
||||
case ENOENT:
|
||||
libzfs_err = EZFS_NOENT;
|
||||
break;
|
||||
case ENOMEM:
|
||||
libzfs_err = EZFS_NOMEM;
|
||||
break;
|
||||
case EPERM:
|
||||
libzfs_err = EZFS_PERM;
|
||||
break;
|
||||
default:
|
||||
libzfs_err = EZFS_UMOUNTFAILED;
|
||||
}
|
||||
return (zfs_error_fmt(hdl, libzfs_err,
|
||||
dgettext(TEXT_DOMAIN, "cannot unmount '%s'"),
|
||||
mountpoint));
|
||||
}
|
||||
|
|
|
@ -128,8 +128,9 @@ do_mount(zfs_handle_t *zhp, const char *mntpt, char *opts, int flags)
|
|||
int
|
||||
do_unmount(const char *mntpt, int flags)
|
||||
{
|
||||
|
||||
return (unmount(mntpt, flags));
|
||||
if (unmount(mntpt, flags) < 0)
|
||||
return (errno);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
/*
|
||||
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2020 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2014, 2021 by Delphix. All rights reserved.
|
||||
* Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>
|
||||
* Copyright 2017 RackTop Systems.
|
||||
* Copyright (c) 2018 Datto Inc.
|
||||
|
@ -377,7 +377,9 @@ int
|
|||
do_unmount(const char *mntpt, int flags)
|
||||
{
|
||||
if (!libzfs_envvar_is_set("ZFS_MOUNT_HELPER")) {
|
||||
return (umount2(mntpt, flags));
|
||||
int rv = umount2(mntpt, flags);
|
||||
|
||||
return (rv < 0 ? errno : 0);
|
||||
}
|
||||
|
||||
char force_opt[] = "-f";
|
||||
|
|
Loading…
Reference in New Issue