diff mbox series

mm/z3fold:remove unneeded spinlock in z3fold_alloc

Message ID 20240204131543.1469661-1-hezhongkun.hzk@bytedance.com (mailing list archive)
State New
Headers show
Series mm/z3fold:remove unneeded spinlock in z3fold_alloc | expand

Commit Message

Zhongkun He Feb. 4, 2024, 1:15 p.m. UTC
The spinklock in z3fold_alloc() is used to protect page->lru,
but now it was removed in commit 'e774a7bc7f0ad', so remove
the spinlock too.

Signed-off-by: Zhongkun He <hezhongkun.hzk@bytedance.com>
---
 mm/z3fold.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Johannes Weiner Feb. 8, 2024, 3:34 a.m. UTC | #1
On Sun, Feb 04, 2024 at 09:15:43PM +0800, Zhongkun He wrote:
> The spinklock in z3fold_alloc() is used to protect page->lru,
> but now it was removed in commit 'e774a7bc7f0ad', so remove
> the spinlock too.

The pool->lock clearly protects things other than page->lru.

I'm not saying that you're wrong, but your changelog doesn't make a
strong case that you're right, either ;)

Please CC Vitaly (scripts/get_maintainer.pl) on these patches.
Zhongkun He Feb. 8, 2024, 5:29 p.m. UTC | #2
On Thu, Feb 8, 2024 at 11:34 AM Johannes Weiner <hannes@cmpxchg.org> wrote:
>
> On Sun, Feb 04, 2024 at 09:15:43PM +0800, Zhongkun He wrote:
> > The spinklock in z3fold_alloc() is used to protect page->lru,
> > but now it was removed in commit 'e774a7bc7f0ad', so remove
> > the spinlock too.
>
> The pool->lock clearly protects things other than page->lru.

Yes, it protects pool unbuddied lists now.
I mean the following page-lru is removed in z3fold_alloc:
 headless:
        spin_lock(&pool->lock);
-       /* Add/move z3fold page to beginning of LRU */
-       if (!list_empty(&page->lru))
-               list_del(&page->lru);
-
-       list_add(&page->lru, &pool->lru);
-
        *handle = encode_handle(zhdr, bud);
        spin_unlock(&pool->lock);
        if (bud != HEADLESS)
            z3fold_page_unlock(zhdr);

For more detail please see the commit 'e774a7bc7f0ad'.

>
> I'm not saying that you're wrong, but your changelog doesn't make a
> strong case that you're right, either ;)
>

Hi Johannes, I am confused by the annotation :
The __encode_handle() annotation show:
* Pool lock should be held as this function accesses first_num.
but I did not find any use cases where first_num was protected by pool lock.
Furthermore, encode_handle() is protected by z3fold_page_lock() as I can
see.

> Please CC Vitaly (scripts/get_maintainer.pl) on these patches.

Got it, thanks.
Andrew Morton Feb. 21, 2024, 10:23 p.m. UTC | #3
On Sun,  4 Feb 2024 21:15:43 +0800 Zhongkun He <hezhongkun.hzk@bytedance.com> wrote:

> The spinklock in z3fold_alloc() is used to protect page->lru,
> but now it was removed in commit 'e774a7bc7f0ad', so remove
> the spinlock too.
> 

I think I'll drop this patch and "mm/z3fold: remove unneeded spinlock"
pending some more clarity and agreement on whether these are
safe.  Thanks.
Zhongkun He Feb. 22, 2024, 2:40 a.m. UTC | #4
>
> I think I'll drop this patch and "mm/z3fold: remove unneeded spinlock"
> pending some more clarity and agreement on whether these are
> safe.  Thanks.

Hi Andrew.
Per my understanding, these patches are safe and I hope they can be
reviewed by some experts.

Thanks.
diff mbox series

Patch

diff --git a/mm/z3fold.c b/mm/z3fold.c
index 7f608c0667f3..58946cacbfbb 100644
--- a/mm/z3fold.c
+++ b/mm/z3fold.c
@@ -1068,9 +1068,7 @@  static int z3fold_alloc(struct z3fold_pool *pool, size_t size, gfp_t gfp,
 	add_to_unbuddied(pool, zhdr);
 
 headless:
-	spin_lock(&pool->lock);
 	*handle = encode_handle(zhdr, bud);
-	spin_unlock(&pool->lock);
 	if (bud != HEADLESS)
 		z3fold_page_unlock(zhdr);