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

Commit 69820d22 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

pNFS: Don't mark layout segments invalid on layoutreturn in pnfs_roc



The layoutreturn call will take care of invalidating the layout segments
once the call is successful.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 94e5c571
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -1205,22 +1205,28 @@ bool pnfs_roc(struct inode *ino)
			goto out_noroc;
	}

	/* always send layoutreturn if being marked so */
	if (test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags))
		layoutreturn = pnfs_prepare_layoutreturn(lo,
				&stateid, NULL);

	list_for_each_entry_safe(lseg, tmp, &lo->plh_segs, pls_list)
	list_for_each_entry_safe(lseg, tmp, &lo->plh_segs, pls_list) {
		/* If we are sending layoutreturn, invalidate all valid lsegs */
		if (layoutreturn || test_bit(NFS_LSEG_ROC, &lseg->pls_flags)) {
		if (test_bit(NFS_LSEG_ROC, &lseg->pls_flags)) {
			mark_lseg_invalid(lseg, &tmp_list);
			found = true;
		}
	}

	/* always send layoutreturn if being marked so */
	if (test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags)) {
		layoutreturn = pnfs_prepare_layoutreturn(lo,
				&stateid, NULL);
		if (layoutreturn)
			goto out_noroc;
	}

	/* ROC in two conditions:
	 * 1. there are ROC lsegs
	 * 2. we don't send layoutreturn
	 */
	if (found && !layoutreturn) {
	if (found) {
		/* lo ref dropped in pnfs_roc_release() */
		pnfs_get_layout_hdr(lo);
		roc = true;