Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd1beb3d authored by Trond Myklebust's avatar Trond Myklebust Committed by Anna Schumaker
Browse files

NFS/pnfs: handle bad delegation stateids in nfs4_layoutget_handle_exception



We must call nfs4_handle_exception() on BAD_STATEID errors. The only
exception is if the stateid argument turns out to be a layout stateid
that is declared invalid.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Reviewed-by: default avatarJeff Layton <jlayton@poochiereds.net>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent e5241e43
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -7924,8 +7924,8 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
			break;
		}
		lo = NFS_I(inode)->layout;
		if (lo && nfs4_stateid_match(&lgp->args.stateid,
					&lo->plh_stateid)) {
		if (lo && !test_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags) &&
		    nfs4_stateid_match_other(&lgp->args.stateid, &lo->plh_stateid)) {
			LIST_HEAD(head);

			/*
@@ -7936,10 +7936,10 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
			pnfs_mark_matching_lsegs_invalid(lo, &head, NULL, 0);
			spin_unlock(&inode->i_lock);
			pnfs_free_lseg_list(&head);
		} else
			spin_unlock(&inode->i_lock);
			status = -EAGAIN;
			goto out;
		} else
			spin_unlock(&inode->i_lock);
	}

	status = nfs4_handle_exception(server, status, exception);