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));
 }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to