]> www.infradead.org Git - users/dwmw2/linux.git/commit
nfs_common: fix localio to cope with racing nfs_local_probe()
authorMike Snitzer <snitzer@kernel.org>
Wed, 23 Oct 2024 20:34:42 +0000 (16:34 -0400)
committerAnna Schumaker <anna.schumaker@oracle.com>
Mon, 4 Nov 2024 15:24:19 +0000 (10:24 -0500)
commitbc2940869508b7b956a757a26d3b1ebf9546790e
treeae7c602b94a639683c5259e0853992986bc59305
parent40f45ab3814f2aff1ddada629c910aad982fc8e1
nfs_common: fix localio to cope with racing nfs_local_probe()

Fix the possibility of racing nfs_local_probe() resulting in:
  list_add double add: new=ffff8b99707f9f58, prev=ffff8b99707f9f58, next=ffffffffc0f30000.
  ------------[ cut here ]------------
  kernel BUG at lib/list_debug.c:35!

Add nfs_uuid_init() to properly initialize all nfs_uuid_t members
(particularly its list_head).

Switch to returning bool from nfs_uuid_begin(), returns false if
nfs_uuid_t is already in-use (its list_head is on a list). Update
nfs_local_probe() to return early if the nfs_client's cl_uuid
(nfs_uuid_t) is in-use.

Also, switch nfs_uuid_begin() from using list_add_tail_rcu() to
list_add_tail() -- rculist was used in an earlier version of the
localio code that had a lockless nfs_uuid_lookup interface.

Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfs/client.c
fs/nfs/localio.c
fs/nfs_common/nfslocalio.c
include/linux/nfslocalio.h