Commit 533210f2 authored by Li RongQing's avatar Li RongQing Committed by Trond Myklebust
Browse files

nfs/localio: use read_seqbegin() rather than read_seqbegin_or_lock()



The usage of read_seqbegin_or_lock() in nfs_copy_boot_verifier()
is wrong. "seq" is always even and thus "or_lock" has no effect.

nfs_copy_boot_verifier() just copies 8 bytes and is supposed to be
very rare operation, so we do not need the adaptive locking in this case.

Signed-off-by: default avatarLi RongQing <lirongqing@baidu.com>
Link: https://lore.kernel.org/r/20250731081038.3478-1-lirongqing@baidu.com


Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 99765233
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -500,14 +500,13 @@ nfs_copy_boot_verifier(struct nfs_write_verifier *verifier, struct inode *inode)
{
	struct nfs_client *clp = NFS_SERVER(inode)->nfs_client;
	u32 *verf = (u32 *)verifier->data;
	int seq = 0;
	unsigned int seq;

	do {
		read_seqbegin_or_lock(&clp->cl_boot_lock, &seq);
		seq = read_seqbegin(&clp->cl_boot_lock);
		verf[0] = (u32)clp->cl_nfssvc_boot.tv_sec;
		verf[1] = (u32)clp->cl_nfssvc_boot.tv_nsec;
	} while (need_seqretry(&clp->cl_boot_lock, seq));
	done_seqretry(&clp->cl_boot_lock, seq);
	} while (read_seqretry(&clp->cl_boot_lock, seq));
}

static void