pNFS/filelayout: treat GETDEVICEINFO errors as layout failure
authorOlga Kornievskaia <olga.kornievskaia@gmail.com>
Fri, 20 Jan 2023 18:40:20 +0000 (13:40 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 15 Feb 2023 16:07:54 +0000 (11:07 -0500)
When GETDEVICEINFO call fails, return the layout and fall back to MDS.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/filelayout/filelayout.c
fs/nfs/pnfs.c

index 4974cd1..ce8f893 100644 (file)
@@ -862,6 +862,8 @@ fl_pnfs_update_layout(struct inode *ino,
 
        status = filelayout_check_deviceid(lo, fl, gfp_flags);
        if (status) {
+               pnfs_error_mark_layout_for_return(ino, lseg);
+               pnfs_set_lo_fail(lseg);
                pnfs_put_lseg(lseg);
                lseg = NULL;
        }
index a5db515..306cba0 100644 (file)
@@ -511,7 +511,7 @@ pnfs_layout_io_set_failed(struct pnfs_layout_hdr *lo, u32 iomode)
 
        spin_lock(&inode->i_lock);
        pnfs_layout_set_fail_bit(lo, pnfs_iomode_to_fail_bit(iomode));
-       pnfs_mark_matching_lsegs_invalid(lo, &head, &range, 0);
+       pnfs_mark_matching_lsegs_return(lo, &head, &range, 0);
        spin_unlock(&inode->i_lock);
        pnfs_free_lseg_list(&head);
        dprintk("%s Setting layout IOMODE_%s fail bit\n", __func__,