svn commit: r282130 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Andriy Gapon
avg at FreeBSD.org
Tue Apr 28 09:11:48 UTC 2015
Author: avg
Date: Tue Apr 28 09:11:47 2015
New Revision: 282130
URL: https://svnweb.freebsd.org/changeset/base/282130
Log:
zfs_onexit_fd_hold: return EBADF even if devfs_get_cdevpriv gave ENOENT
/dev/zfs always has per-open data, so when it is missing the file
descriptor is for some other file. Returning ENOENT in this case
is confusing as a variety of other conditions (like a missing dataset)
may result in the same error. It's better to consistently return
EBADF for any problems with the file descriptor.
Note that zfs_onexit_fd_hold() is used with 'automatic cleanup fd'
- when that fd is closed, typically because a process is terminated,
some cleanup action is taken by ZFS driver. E.g. a temporary
snapshot hold is released.
Perhaps, it would even be worthwhile changing devfs_get_cdevpriv()
to return EBADF if there is no associated data.
Differential Revision: https://reviews.freebsd.org/D2370
Reviewed by: delphij, smh
MFC after: 12 days
Modified:
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_onexit.c
Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_onexit.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_onexit.c Tue Apr 28 08:27:44 2015 (r282129)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_onexit.c Tue Apr 28 09:11:47 2015 (r282130)
@@ -137,7 +137,7 @@ zfs_onexit_fd_hold(int fd, minor_t *mino
*minorp = (minor_t)(uintptr_t)data;
curthread->td_fpop = tmpfp;
if (error != 0)
- return (error);
+ return (SET_ERROR(EBADF));
return (zfs_onexit_minor_to_state(*minorp, &zo));
}
More information about the svn-src-all
mailing list