summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsclient/nfs_clnfsiod.c
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2010-04-22 23:51:01 +0000
committerrmacklem <rmacklem@FreeBSD.org>2010-04-22 23:51:01 +0000
commit2b8346aabd349cd3ecc65ef9df6d44d6bf48a2aa (patch)
tree0c8d854f9075c4cbdb0c569f23e53fa52c2178f0 /sys/fs/nfsclient/nfs_clnfsiod.c
parent42eb898c75b992137e13abf8bfc18b021635f943 (diff)
downloadFreeBSD-src-2b8346aabd349cd3ecc65ef9df6d44d6bf48a2aa.zip
FreeBSD-src-2b8346aabd349cd3ecc65ef9df6d44d6bf48a2aa.tar.gz
When the experimental NFS client is handling an NFSv4 server reboot
with delegations enabled, the recovery could fail if the renew thread is trying to return a delegation, since it will not do the recovery. This patch fixes the above by having nfscl_recalldeleg() fail with the I/O operations returning EIO, so that they will be attempted later. Most of the patch consists of adding an argument to various functions to indicate the delegation recall case where this needs to be done. MFC after: 1 week
Diffstat (limited to 'sys/fs/nfsclient/nfs_clnfsiod.c')
-rw-r--r--sys/fs/nfsclient/nfs_clnfsiod.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/fs/nfsclient/nfs_clnfsiod.c b/sys/fs/nfsclient/nfs_clnfsiod.c
index 6649fc0..62ea4f8 100644
--- a/sys/fs/nfsclient/nfs_clnfsiod.c
+++ b/sys/fs/nfsclient/nfs_clnfsiod.c
@@ -278,9 +278,11 @@ nfssvc_iod(void *instance)
(void)ncl_doio_directwrite(bp);
} else {
if (bp->b_iocmd == BIO_READ)
- (void) ncl_doio(bp->b_vp, bp, bp->b_rcred, NULL);
+ (void) ncl_doio(bp->b_vp, bp, bp->b_rcred,
+ NULL, 0);
else
- (void) ncl_doio(bp->b_vp, bp, bp->b_wcred, NULL);
+ (void) ncl_doio(bp->b_vp, bp, bp->b_wcred,
+ NULL, 0);
}
mtx_lock(&ncl_iod_mutex);
/*
OpenPOWER on IntegriCloud