diff options
Diffstat (limited to 'fs')
-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 6834fa1be57..9ee3bd705b9 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 | } |