diff options
author | Tim Chase <[email protected]> | 2013-11-06 23:55:18 -0600 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-11-08 10:45:14 -0800 |
commit | fd4f76160cb34539f875781fe7f2dea4b937ace5 (patch) | |
tree | 8fa4db23f72a58b049f53973f839a28793e2828e /lib/libzfs/libzfs_mount.c | |
parent | b1d13a60d12a7df0f2e1bed6405529790213a6cb (diff) |
Handle concurrent snapshot automounts failing due to EBUSY.
In the current snapshot automount implementation, it is possible for
multiple mounts to attempted concurrently. Only one of the mounts will
succeed and the other will fail. The failed mounts will cause an EREMOTE
to be propagated back to the application.
This commit works around the problem by adding a new exit status,
MOUNT_BUSY to the mount.zfs program which is used when the underlying
mount(2) call returns EBUSY. The zfs code detects this condition and
treats it as if the mount had succeeded.
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #1819
Diffstat (limited to 'lib/libzfs/libzfs_mount.c')
-rw-r--r-- | lib/libzfs/libzfs_mount.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/libzfs/libzfs_mount.c b/lib/libzfs/libzfs_mount.c index bded1f001..68e4ef4de 100644 --- a/lib/libzfs/libzfs_mount.c +++ b/lib/libzfs/libzfs_mount.c @@ -292,6 +292,8 @@ do_mount(const char *src, const char *mntpt, char *opts) return EINTR; if (rc & MOUNT_SOFTWARE) return EPIPE; + if (rc & MOUNT_BUSY) + return EBUSY; if (rc & MOUNT_SYSERR) return EAGAIN; if (rc & MOUNT_USAGE) |