NFSv4/flexfiles: Fix layout merge mirror check.
authorJonathan Curley <jcurley@purestorage.com>
Mon, 8 Sep 2025 17:35:16 +0000 (17:35 +0000)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 8 Sep 2025 18:37:55 +0000 (14:37 -0400)
Typo in ff_lseg_match_mirrors makes the diff ineffective. This results
in merge happening all the time. Merge happening all the time is
problematic because it marks lsegs invalid. Marking lsegs invalid
causes all outstanding IO to get restarted with EAGAIN and connections
to get closed.

Closing connections constantly triggers race conditions in the RDMA
implementation...

Fixes: 660d1eb22301c ("pNFS/flexfile: Don't merge layout segments if the mirrors don't match")
Signed-off-by: Jonathan Curley <jcurley@purestorage.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/flexfilelayout/flexfilelayout.c

index f8ab7b4e09e7e2940afc00ad8469ea357a5d1064..9edb5f9b0c4e4796686f9c2699971434c1e5bd6d 100644 (file)
@@ -293,7 +293,7 @@ ff_lseg_match_mirrors(struct pnfs_layout_segment *l1,
                struct pnfs_layout_segment *l2)
 {
        const struct nfs4_ff_layout_segment *fl1 = FF_LAYOUT_LSEG(l1);
-       const struct nfs4_ff_layout_segment *fl2 = FF_LAYOUT_LSEG(l1);
+       const struct nfs4_ff_layout_segment *fl2 = FF_LAYOUT_LSEG(l2);
        u32 i;
 
        if (fl1->mirror_array_cnt != fl2->mirror_array_cnt)