| From c1464c1835f19d431bf6a8c7a626f51b8b99ed11 Mon Sep 17 00:00:00 2001 |
| From: Andrea Parri <andrea.parri@amarulasolutions.com> |
| Date: Mon, 20 May 2019 19:23:58 +0200 |
| Subject: ceph: fix improper use of smp_mb__before_atomic() |
| |
| [ Upstream commit 749607731e26dfb2558118038c40e9c0c80d23b5 ] |
| |
| This barrier only applies to the read-modify-write operations; in |
| particular, it does not apply to the atomic64_set() primitive. |
| |
| Replace the barrier with an smp_mb(). |
| |
| Fixes: fdd4e15838e59 ("ceph: rework dcache readdir") |
| Reported-by: "Paul E. McKenney" <paulmck@linux.ibm.com> |
| Reported-by: Peter Zijlstra <peterz@infradead.org> |
| Signed-off-by: Andrea Parri <andrea.parri@amarulasolutions.com> |
| Reviewed-by: "Yan, Zheng" <zyan@redhat.com> |
| Signed-off-by: Ilya Dryomov <idryomov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/ceph/super.h | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/fs/ceph/super.h b/fs/ceph/super.h |
| index 622d5dd9f6169..9bd0d928057b7 100644 |
| --- a/fs/ceph/super.h |
| +++ b/fs/ceph/super.h |
| @@ -476,7 +476,12 @@ static inline void __ceph_dir_set_complete(struct ceph_inode_info *ci, |
| long long release_count, |
| long long ordered_count) |
| { |
| - smp_mb__before_atomic(); |
| + /* |
| + * Makes sure operations that setup readdir cache (update page |
| + * cache and i_size) are strongly ordered w.r.t. the following |
| + * atomic64_set() operations. |
| + */ |
| + smp_mb(); |
| atomic64_set(&ci->i_complete_seq[0], release_count); |
| atomic64_set(&ci->i_complete_seq[1], ordered_count); |
| } |
| -- |
| 2.20.1 |
| |