]>
Commit | Line | Data |
---|---|---|
b7ca0ba0 SL |
1 | From 1d1a3dcaabf48c515ec575726aa68829983e4861 Mon Sep 17 00:00:00 2001 |
2 | From: Sasha Levin <sashal@kernel.org> | |
3 | Date: Wed, 28 Feb 2024 16:50:49 +0100 | |
4 | Subject: fuse: don't unhash root | |
5 | ||
6 | From: Miklos Szeredi <mszeredi@redhat.com> | |
7 | ||
8 | [ Upstream commit b1fe686a765e6c0d71811d825b5a1585a202b777 ] | |
9 | ||
10 | The root inode is assumed to be always hashed. Do not unhash the root | |
11 | inode even if it is marked BAD. | |
12 | ||
13 | Fixes: 5d069dbe8aaf ("fuse: fix bad inode") | |
14 | Cc: <stable@vger.kernel.org> # v5.11 | |
15 | Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> | |
16 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
17 | --- | |
18 | fs/fuse/fuse_i.h | 1 - | |
19 | fs/fuse/inode.c | 7 +++++-- | |
20 | 2 files changed, 5 insertions(+), 3 deletions(-) | |
21 | ||
22 | diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h | |
23 | index ceaa6868386e6..33eb5fefc06b4 100644 | |
24 | --- a/fs/fuse/fuse_i.h | |
25 | +++ b/fs/fuse/fuse_i.h | |
26 | @@ -873,7 +873,6 @@ static inline bool fuse_stale_inode(const struct inode *inode, int generation, | |
27 | ||
28 | static inline void fuse_make_bad(struct inode *inode) | |
29 | { | |
30 | - remove_inode_hash(inode); | |
31 | set_bit(FUSE_I_BAD, &get_fuse_inode(inode)->state); | |
32 | } | |
33 | ||
34 | diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c | |
35 | index 9ea175ff9c8e6..4a7ebccd359ee 100644 | |
36 | --- a/fs/fuse/inode.c | |
37 | +++ b/fs/fuse/inode.c | |
38 | @@ -352,8 +352,11 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid, | |
39 | } else if (fuse_stale_inode(inode, generation, attr)) { | |
40 | /* nodeid was reused, any I/O on the old inode should fail */ | |
41 | fuse_make_bad(inode); | |
42 | - iput(inode); | |
43 | - goto retry; | |
44 | + if (inode != d_inode(sb->s_root)) { | |
45 | + remove_inode_hash(inode); | |
46 | + iput(inode); | |
47 | + goto retry; | |
48 | + } | |
49 | } | |
50 | done: | |
51 | fi = get_fuse_inode(inode); | |
52 | -- | |
53 | 2.43.0 | |
54 |