diff options
author | Andy Adamson <andros@netapp.com> | 2011-02-28 20:34:22 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-03-11 15:38:43 -0500 |
commit | 568e8c494ded95a28c5dd8b79b4d3ffb95b6d845 (patch) | |
tree | 00e71f79575635c0ddfcd1210e263088cc121da2 /fs/nfs/nfs4filelayout.c | |
parent | ea8eecdd11ee6becd09c095c8efa88aa7df95961 (diff) |
NFSv4.1: turn off pNFS on ds connection failure
If a data server is unavailable, go through MDS.
Mark the deviceid containing the data server as a negative cache entry.
Do not try to connect to any data server on a deviceid marked as a negative
cache entry. Mark any layout that tries to use the marked deviceid as failed.
Inodes with a layout marked as fails will not use the layout for I/O, and will
not perform any more layoutgets.
Inodes without a layout will still do layoutget, but the layout will get
marked immediately.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4filelayout.c')
-rw-r--r-- | fs/nfs/nfs4filelayout.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c index a922e75af42e..0040a5ee6208 100644 --- a/fs/nfs/nfs4filelayout.c +++ b/fs/nfs/nfs4filelayout.c | |||
@@ -214,7 +214,9 @@ filelayout_read_pagelist(struct nfs_read_data *data) | |||
214 | idx = nfs4_fl_calc_ds_index(lseg, j); | 214 | idx = nfs4_fl_calc_ds_index(lseg, j); |
215 | ds = nfs4_fl_prepare_ds(lseg, idx); | 215 | ds = nfs4_fl_prepare_ds(lseg, idx); |
216 | if (!ds) { | 216 | if (!ds) { |
217 | printk(KERN_ERR "%s: prepare_ds failed, use MDS\n", __func__); | 217 | /* Either layout fh index faulty, or ds connect failed */ |
218 | set_bit(lo_fail_bit(IOMODE_RW), &lseg->pls_layout->plh_flags); | ||
219 | set_bit(lo_fail_bit(IOMODE_READ), &lseg->pls_layout->plh_flags); | ||
218 | return PNFS_NOT_ATTEMPTED; | 220 | return PNFS_NOT_ATTEMPTED; |
219 | } | 221 | } |
220 | dprintk("%s USE DS:ip %x %hu\n", __func__, | 222 | dprintk("%s USE DS:ip %x %hu\n", __func__, |