diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2024-05-29 19:25:15 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2024-05-29 19:25:15 +0300 |
commit | 397a83ab978553ca2970ad1ccdbac0cdc732efd9 (patch) | |
tree | b23ad812c9c8490c63d216bab039f42c3e3345a8 /fs | |
parent | db163660b02abbffebfad1bcd6dbce1201c72731 (diff) | |
parent | c898afdc15645efb555acb6d85b484eb40a45409 (diff) | |
download | linux-397a83ab978553ca2970ad1ccdbac0cdc732efd9.tar.xz |
Merge tag '9p-for-6.10-rc2' of https://github.com/martinetd/linux
Pull 9p fixes from Dominique Martinet:
"Two fixes headed to stable trees:
- a trace event was dumping uninitialized values
- a missing lock that was thought to have exclusive access, and it
turned out not to"
* tag '9p-for-6.10-rc2' of https://github.com/martinetd/linux:
9p: add missing locking around taking dentry fid list
net/9p: fix uninit-value in p9_client_rpc()
Diffstat (limited to 'fs')
-rw-r--r-- | fs/9p/vfs_dentry.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/9p/vfs_dentry.c b/fs/9p/vfs_dentry.c index f16f73581634..01338d4c2d9e 100644 --- a/fs/9p/vfs_dentry.c +++ b/fs/9p/vfs_dentry.c @@ -48,12 +48,17 @@ static int v9fs_cached_dentry_delete(const struct dentry *dentry) static void v9fs_dentry_release(struct dentry *dentry) { struct hlist_node *p, *n; + struct hlist_head head; p9_debug(P9_DEBUG_VFS, " dentry: %pd (%p)\n", dentry, dentry); - hlist_for_each_safe(p, n, (struct hlist_head *)&dentry->d_fsdata) + + spin_lock(&dentry->d_lock); + hlist_move_list((struct hlist_head *)&dentry->d_fsdata, &head); + spin_unlock(&dentry->d_lock); + + hlist_for_each_safe(p, n, &head) p9_fid_put(hlist_entry(p, struct p9_fid, dlist)); - dentry->d_fsdata = NULL; } static int v9fs_lookup_revalidate(struct dentry *dentry, unsigned int flags) |