Author: kib
Date: Thu Nov 26 18:13:33 2020
New Revision: 368076
URL: https://svnweb.freebsd.org/changeset/base/368076

Log:
  vn_read_from_obj(): fix handling of doomed vnodes.
  
  There is no reason why vp->v_object cannot be NULL. If it is, it's
  fine, handle it by delegating to VOP_READ().
  
  Tested by:    pho
  Reviewed by:  markj, mjg
  Sponsored by: The FreeBSD Foundation
  Differential revision:        https://reviews.freebsd.org/D27327

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c   Thu Nov 26 18:08:42 2020        (r368075)
+++ head/sys/kern/vfs_vnops.c   Thu Nov 26 18:13:33 2020        (r368076)
@@ -870,10 +870,10 @@ vn_read_from_obj(struct vnode *vp, struct uio *uio)
        ssize_t resid;
        int error, i, j;
 
-       obj = vp->v_object;
        MPASS(uio->uio_resid <= ptoa(io_hold_cnt + 2));
-       MPASS(obj != NULL);
-       MPASS(obj->type == OBJT_VNODE);
+       obj = atomic_load_ptr(&vp->v_object);
+       if (obj == NULL)
+               return (EJUSTRETURN);
 
        /*
         * Depends on type stability of vm_objects.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to