{
        u32 seqid = be32_to_cpu(stateid->seqid);
 
-       return !pnfs_seqid_is_newer(seqid, lo->plh_barrier);
+       return !pnfs_seqid_is_newer(seqid, lo->plh_barrier) && lo->plh_barrier;
 }
 
 /* lget is set to 1 if called from inside send_layoutget call chain */
                wake_up_var(&lo->plh_outstanding);
 }
 
+static bool pnfs_is_first_layoutget(struct pnfs_layout_hdr *lo)
+{
+       return test_bit(NFS_LAYOUT_FIRST_LAYOUTGET, &lo->plh_flags);
+}
+
 static void pnfs_clear_first_layoutget(struct pnfs_layout_hdr *lo)
 {
        unsigned long *bitlock = &lo->plh_flags;
                goto out_forget;
        }
 
-       if (!pnfs_layout_is_valid(lo)) {
-               /* We have a completely new layout */
-               pnfs_set_layout_stateid(lo, &res->stateid, lgp->cred, true);
-       } else if (nfs4_stateid_match_other(&lo->plh_stateid, &res->stateid)) {
+       if (nfs4_stateid_match_other(&lo->plh_stateid, &res->stateid)) {
                /* existing state ID, make sure the sequence number matches. */
                if (pnfs_layout_stateid_blocked(lo, &res->stateid)) {
+                       if (!pnfs_layout_is_valid(lo) &&
+                           pnfs_is_first_layoutget(lo))
+                               lo->plh_barrier = 0;
                        dprintk("%s forget reply due to sequence\n", __func__);
                        goto out_forget;
                }
                pnfs_set_layout_stateid(lo, &res->stateid, lgp->cred, false);
-       } else {
+       } else if (pnfs_layout_is_valid(lo)) {
                /*
                 * We got an entirely new state ID.  Mark all segments for the
                 * inode invalid, and retry the layoutget
                pnfs_mark_matching_lsegs_return(lo, &lo->plh_return_segs,
                                                &range, 0);
                goto out_forget;
+       } else {
+               /* We have a completely new layout */
+               if (!pnfs_is_first_layoutget(lo))
+                       goto out_forget;
+               pnfs_set_layout_stateid(lo, &res->stateid, lgp->cred, true);
        }
 
        pnfs_get_lseg(lseg);