diff options
author | rmacklem <rmacklem@FreeBSD.org> | 2010-04-22 23:51:01 +0000 |
---|---|---|
committer | rmacklem <rmacklem@FreeBSD.org> | 2010-04-22 23:51:01 +0000 |
commit | 2b8346aabd349cd3ecc65ef9df6d44d6bf48a2aa (patch) | |
tree | 0c8d854f9075c4cbdb0c569f23e53fa52c2178f0 /sys/fs/nfsclient/nfs_clnfsiod.c | |
parent | 42eb898c75b992137e13abf8bfc18b021635f943 (diff) | |
download | FreeBSD-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.c | 6 |
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); /* |