diff options
author | timh <none@none> | 2008-01-24 15:00:53 -0800 |
---|---|---|
committer | timh <none@none> | 2008-01-24 15:00:53 -0800 |
commit | 11022c7cf39f3b863e749f3866f6ddcb445c2d05 (patch) | |
tree | 03ec9dcdf1ca0082c8c5608b06a6504a01f411e8 /usr/src | |
parent | e7801d59e8ceda0cde8ebdfdddd7582ee2ea96ef (diff) | |
download | illumos-joyent-11022c7cf39f3b863e749f3866f6ddcb445c2d05.tar.gz |
6587767 'zpool create' get different behavior while mountpoint not empty but has file or dir
6587837 /etc/fs/zfs/mount -m prevents filesystem from being unmounted
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/zfs/zfs_main.c | 16 | ||||
-rw-r--r-- | usr/src/cmd/zpool/zpool_main.c | 29 |
2 files changed, 31 insertions, 14 deletions
diff --git a/usr/src/cmd/zfs/zfs_main.c b/usr/src/cmd/zfs/zfs_main.c index d5840f5521..2608920cee 100644 --- a/usr/src/cmd/zfs/zfs_main.c +++ b/usr/src/cmd/zfs/zfs_main.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -3385,9 +3385,17 @@ unshare_unmount_path(int op, char *path, int flags, boolean_t is_manual) break; } if (ret != 0) { - (void) fprintf(stderr, gettext("cannot %s '%s': not " - "currently mounted\n"), cmdname, path); - return (1); + if (op == OP_SHARE) { + (void) fprintf(stderr, gettext("cannot %s '%s': not " + "currently mounted\n"), cmdname, path); + return (1); + } + (void) fprintf(stderr, gettext("warning: %s not in mnttab\n"), + path); + if ((ret = umount2(path, flags)) != 0) + (void) fprintf(stderr, gettext("%s: %s\n"), path, + strerror(errno)); + return (ret != 0); } if (strcmp(entry.mnt_fstype, MNTTYPE_ZFS) != 0) { diff --git a/usr/src/cmd/zpool/zpool_main.c b/usr/src/cmd/zpool/zpool_main.c index 1140c46903..b3b021f7ec 100644 --- a/usr/src/cmd/zpool/zpool_main.c +++ b/usr/src/cmd/zpool/zpool_main.c @@ -671,7 +671,7 @@ zpool_do_create(int argc, char **argv) (strcmp(mountpoint, ZFS_MOUNTPOINT_LEGACY) != 0 && strcmp(mountpoint, ZFS_MOUNTPOINT_NONE) != 0)) { char buf[MAXPATHLEN]; - struct stat64 statbuf; + DIR *dirp; if (mountpoint && mountpoint[0] != '/') { (void) fprintf(stderr, gettext("invalid mountpoint " @@ -696,18 +696,27 @@ zpool_do_create(int argc, char **argv) mountpoint); } - if (stat64(buf, &statbuf) == 0 && - statbuf.st_nlink != 2) { - if (mountpoint == NULL) - (void) fprintf(stderr, gettext("default " - "mountpoint '%s' exists and is not " - "empty\n"), buf); - else - (void) fprintf(stderr, gettext("mountpoint " - "'%s' exists and is not empty\n"), buf); + if ((dirp = opendir(buf)) == NULL && errno != ENOENT) { + (void) fprintf(stderr, gettext("mountpoint '%s' : " + "%s\n"), buf, strerror(errno)); (void) fprintf(stderr, gettext("use '-m' " "option to provide a different default\n")); goto errout; + } else if (dirp) { + int count = 0; + + while (count < 3 && readdir(dirp) != NULL) + count++; + (void) closedir(dirp); + + if (count > 2) { + (void) fprintf(stderr, gettext("mountpoint " + "'%s' exists and is not empty\n"), buf); + (void) fprintf(stderr, gettext("use '-m' " + "option to provide a " + "different default\n")); + goto errout; + } } } |