summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsclient/nfsnode.h
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2011-08-02 11:28:42 +0000
committerrmacklem <rmacklem@FreeBSD.org>2011-08-02 11:28:42 +0000
commitafa0f6e53c883c2b17ed113f86d0c4bc14584a62 (patch)
tree3dfc99a733203a34c082a3b8d3b6ad3bd587824b /sys/fs/nfsclient/nfsnode.h
parent9a3c5b3af4f421934c726d220efd030e2c18fa45 (diff)
downloadFreeBSD-src-afa0f6e53c883c2b17ed113f86d0c4bc14584a62.zip
FreeBSD-src-afa0f6e53c883c2b17ed113f86d0c4bc14584a62.tar.gz
Fix a LOR in the NFS client which could cause a deadlock.
This was reported to the mailing list freebsd-net@freebsd.org on July 21, 2011 under the subject "LOR with nfsclient sillyrename". The LOR occurred when nfs_inactive() called vrele(sp->s_dvp) while holding the vnode lock on the file in s_dvp. This patch modifies the client so that it performs the vrele(sp->s_dvp) as a separate task to avoid the LOR. This fix was discussed with jhb@ and kib@, who both proposed variations of it. Tested by: pho, jlott at averesystems.com Submitted by: jhb (earlier version) Reviewed by: kib Approved by: re (kib) MFC after: 2 weeks
Diffstat (limited to 'sys/fs/nfsclient/nfsnode.h')
-rw-r--r--sys/fs/nfsclient/nfsnode.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/fs/nfsclient/nfsnode.h b/sys/fs/nfsclient/nfsnode.h
index 1d1c89c..c29805d 100644
--- a/sys/fs/nfsclient/nfsnode.h
+++ b/sys/fs/nfsclient/nfsnode.h
@@ -35,11 +35,14 @@
#ifndef _NFSCLIENT_NFSNODE_H_
#define _NFSCLIENT_NFSNODE_H_
+#include <sys/_task.h>
+
/*
* Silly rename structure that hangs off the nfsnode until the name
* can be removed by nfs_inactive()
*/
struct sillyrename {
+ struct task s_task;
struct ucred *s_cred;
struct vnode *s_dvp;
long s_namlen;
OpenPOWER on IntegriCloud