Date: Fri, 29 Nov 2019 13:55:56 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355210 - head/sys/fs/nfsclient Message-ID: <201911291355.xATDtuVp082666@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Fri Nov 29 13:55:56 2019 New Revision: 355210 URL: https://svnweb.freebsd.org/changeset/base/355210 Log: In nfs_lock(), recheck vp->v_data after lock before accessing it. We might race with reclaim, and then this is no longer a nfs vnode, in which case we do not need to handle deferred vnode_pager_setsize() either. Reported by: rk@ronald.org PR: 242184 Sponsored by: The FreeBSD Foundation MFC after: 3 days Modified: head/sys/fs/nfsclient/nfs_clvnops.c Modified: head/sys/fs/nfsclient/nfs_clvnops.c ============================================================================== --- head/sys/fs/nfsclient/nfs_clvnops.c Fri Nov 29 11:34:11 2019 (r355209) +++ head/sys/fs/nfsclient/nfs_clvnops.c Fri Nov 29 13:55:56 2019 (r355210) @@ -312,6 +312,8 @@ nfs_lock(struct vop_lock1_args *ap) if (error != 0 || vp->v_op != &newnfs_vnodeops) return (error); np = VTONFS(vp); + if (np == NULL) + return (0); NFSLOCKNODE(np); if ((np->n_flag & NVNSETSZSKIP) == 0 || (lktype != LK_SHARED && lktype != LK_EXCLUSIVE && lktype != LK_UPGRADE && @@ -345,6 +347,9 @@ nfs_lock(struct vop_lock1_args *ap) error = VOP_LOCK1_APV(&default_vnodeops, ap); if (error != 0 || vp->v_op != &newnfs_vnodeops) return (error); + if (vp->v_data == NULL) + goto downgrade; + MPASS(vp->v_data == np); NFSLOCKNODE(np); if ((np->n_flag & NVNSETSZSKIP) == 0) { NFSUNLOCKNODE(np);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911291355.xATDtuVp082666>