Author: rmacklem
Date: Wed Jul 22 14:37:53 2009
New Revision: 195821
URL: http://svn.freebsd.org/changeset/base/195821

Log:
  Add changes to the experimental nfs client to use the PBDRY flag for
  msleep(9) when a vnode lock or similar may be held. The changes are
  just a clone of the changes applied to the regular nfs client by
  r195703.
  
  Approved by:  re (kensmith), kib (mentor)

Modified:
  head/sys/fs/nfs/nfsport.h
  head/sys/fs/nfsclient/nfs_clbio.c
  head/sys/fs/nfsclient/nfs_clvnops.c

Modified: head/sys/fs/nfs/nfsport.h
==============================================================================
--- head/sys/fs/nfs/nfsport.h   Wed Jul 22 14:32:38 2009        (r195820)
+++ head/sys/fs/nfs/nfsport.h   Wed Jul 22 14:37:53 2009        (r195821)
@@ -911,6 +911,13 @@ struct nfsreq {
 #define        NFSVNO_DELEGOK(v)       (1)
 #endif
 
+/*
+ * Define this as the flags argument for msleep() when catching signals
+ * while holding a resource that other threads would block for, such as
+ * a vnode lock.
+ */
+#define        NFS_PCATCH      (PCATCH | PBDRY)
+
 #endif /* _KERNEL */
 
 #endif /* _NFSPORT_NFS_H */

Modified: head/sys/fs/nfsclient/nfs_clbio.c
==============================================================================
--- head/sys/fs/nfsclient/nfs_clbio.c   Wed Jul 22 14:32:38 2009        
(r195820)
+++ head/sys/fs/nfsclient/nfs_clbio.c   Wed Jul 22 14:37:53 2009        
(r195821)
@@ -1357,7 +1357,7 @@ nfs_getcacheblk(struct vnode *vp, daddr_
                sigset_t oldset;
 
                ncl_set_sigmask(td, &oldset);
-               bp = getblk(vp, bn, size, PCATCH, 0, 0);
+               bp = getblk(vp, bn, size, NFS_PCATCH, 0, 0);
                ncl_restore_sigmask(td, &oldset);
                while (bp == NULL) {
                        if (newnfs_sigintr(nmp, td))
@@ -1396,7 +1396,7 @@ ncl_vinvalbuf(struct vnode *vp, int flag
        if ((nmp->nm_mountp->mnt_kern_flag & MNTK_UNMOUNTF))
                intrflg = 1;
        if (intrflg) {
-               slpflag = PCATCH;
+               slpflag = NFS_PCATCH;
                slptimeo = 2 * hz;
        } else {
                slpflag = 0;
@@ -1484,7 +1484,7 @@ ncl_asyncio(struct nfsmount *nmp, struct
        }
 again:
        if (nmp->nm_flag & NFSMNT_INT)
-               slpflag = PCATCH;
+               slpflag = NFS_PCATCH;
        gotiod = FALSE;
 
        /*
@@ -1553,7 +1553,7 @@ again:
                                        mtx_unlock(&ncl_iod_mutex);             
                        
                                        return (error2);
                                }
-                               if (slpflag == PCATCH) {
+                               if (slpflag == NFS_PCATCH) {
                                        slpflag = 0;
                                        slptimeo = 2 * hz;
                                }

Modified: head/sys/fs/nfsclient/nfs_clvnops.c
==============================================================================
--- head/sys/fs/nfsclient/nfs_clvnops.c Wed Jul 22 14:32:38 2009        
(r195820)
+++ head/sys/fs/nfsclient/nfs_clvnops.c Wed Jul 22 14:37:53 2009        
(r195821)
@@ -2448,7 +2448,7 @@ ncl_flush(struct vnode *vp, int waitfor,
        int bvecsize = 0, bveccount;
 
        if (nmp->nm_flag & NFSMNT_INT)
-               slpflag = PCATCH;
+               slpflag = NFS_PCATCH;
        if (!commit)
                passone = 0;
        bo = &vp->v_bufobj;
@@ -2646,7 +2646,7 @@ loop:
                                error = EINTR;
                                goto done;
                        }
-                       if (slpflag == PCATCH) {
+                       if (slpflag & PCATCH) {
                                slpflag = 0;
                                slptimeo = 2 * hz;
                        }
@@ -2684,7 +2684,7 @@ loop:
                            error = newnfs_sigintr(nmp, td);
                            if (error)
                                goto done;
-                           if (slpflag == PCATCH) {
+                           if (slpflag & PCATCH) {
                                slpflag = 0;
                                slptimeo = 2 * hz;
                            }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to