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)
This commit is contained in:
Rick Macklem 2009-07-22 14:37:53 +00:00
parent 206a336872
commit c79e697621
3 changed files with 14 additions and 7 deletions

View File

@ -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 */

View File

@ -1357,7 +1357,7 @@ nfs_getcacheblk(struct vnode *vp, daddr_t bn, int size, struct thread *td)
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 flags, struct thread *td, int intrflg)
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 buf *bp, struct ucred *cred, struct thr
}
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;
}

View File

@ -2448,7 +2448,7 @@ ncl_flush(struct vnode *vp, int waitfor, struct ucred *cred, struct thread *td,
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;
}