diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-09-20 21:19:43 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-09-28 16:03:11 -0400 |
commit | 115ce575cb10918514d053ef15f597a4e6ff60e9 (patch) | |
tree | 8eef5b764740c41aaa41a628f24d0bced750b6e3 /fs/nfs/pnfs.c | |
parent | 3e6212149304eaf9289d5bc56e003068660f3476 (diff) |
NFSv4.1: pnfs_layout_io_set_failed must clear invalid lsegs
If pnfs_layout_io_test_failed() authorises a retry of the failed layoutgets,
we should clear the existing layout segments so that we start afresh. Do
this in pnfs_layout_io_set_failed().
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/pnfs.c')
-rw-r--r-- | fs/nfs/pnfs.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 6834fa1be571..9ee3bd705b94 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c | |||
@@ -265,10 +265,18 @@ static void | |||
265 | pnfs_layout_io_set_failed(struct pnfs_layout_hdr *lo, u32 iomode) | 265 | pnfs_layout_io_set_failed(struct pnfs_layout_hdr *lo, u32 iomode) |
266 | { | 266 | { |
267 | struct inode *inode = lo->plh_inode; | 267 | struct inode *inode = lo->plh_inode; |
268 | struct pnfs_layout_range range = { | ||
269 | .iomode = iomode, | ||
270 | .offset = 0, | ||
271 | .length = NFS4_MAX_UINT64, | ||
272 | }; | ||
273 | LIST_HEAD(head); | ||
268 | 274 | ||
269 | spin_lock(&inode->i_lock); | 275 | spin_lock(&inode->i_lock); |
270 | pnfs_layout_set_fail_bit(lo, pnfs_iomode_to_fail_bit(iomode)); | 276 | pnfs_layout_set_fail_bit(lo, pnfs_iomode_to_fail_bit(iomode)); |
277 | pnfs_mark_matching_lsegs_invalid(lo, &head, &range); | ||
271 | spin_unlock(&inode->i_lock); | 278 | spin_unlock(&inode->i_lock); |
279 | pnfs_free_lseg_list(&head); | ||
272 | dprintk("%s Setting layout IOMODE_%s fail bit\n", __func__, | 280 | dprintk("%s Setting layout IOMODE_%s fail bit\n", __func__, |
273 | iomode == IOMODE_RW ? "RW" : "READ"); | 281 | iomode == IOMODE_RW ? "RW" : "READ"); |
274 | } | 282 | } |