The patch titled Subject: z3fold: make pages_nr atomic has been added to the -mm tree. Its filename is z3fold-make-pages_nr-atomic.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/z3fold-make-pages_nr-atomic.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/z3fold-make-pages_nr-atomic.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Vitaly Wool <vitalywool@xxxxxxxxx> Subject: z3fold: make pages_nr atomic Convert pages_nr per-pool counter to atomic64_t. Link: http://lkml.kernel.org/r/20170131213946.b828676ab17bbea42022c213@xxxxxxxxx Signed-off-by: Vitaly Wool <vitalywool@xxxxxxxxx> Cc: Dan Streetman <ddstreet@xxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/z3fold.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff -puN mm/z3fold.c~z3fold-make-pages_nr-atomic mm/z3fold.c --- a/mm/z3fold.c~z3fold-make-pages_nr-atomic +++ a/mm/z3fold.c @@ -80,7 +80,7 @@ struct z3fold_pool { struct list_head unbuddied[NCHUNKS]; struct list_head buddied; struct list_head lru; - u64 pages_nr; + atomic64_t pages_nr; const struct z3fold_ops *ops; struct zpool *zpool; const struct zpool_ops *zpool_ops; @@ -238,7 +238,7 @@ static struct z3fold_pool *z3fold_create INIT_LIST_HEAD(&pool->unbuddied[i]); INIT_LIST_HEAD(&pool->buddied); INIT_LIST_HEAD(&pool->lru); - pool->pages_nr = 0; + atomic64_set(&pool->pages_nr, 0); pool->ops = ops; return pool; } @@ -350,7 +350,7 @@ static int z3fold_alloc(struct z3fold_po if (!page) return -ENOMEM; spin_lock(&pool->lock); - pool->pages_nr++; + atomic64_inc(&pool->pages_nr); zhdr = init_z3fold_page(page); if (bud == HEADLESS) { @@ -443,10 +443,9 @@ static void z3fold_free(struct z3fold_po return; } - if (bud != HEADLESS) { - /* Remove from existing buddy list */ + /* Remove from existing buddy list */ + if (bud != HEADLESS) list_del(&zhdr->buddy); - } if (bud == HEADLESS || (zhdr->first_chunks == 0 && zhdr->middle_chunks == 0 && @@ -455,7 +454,7 @@ static void z3fold_free(struct z3fold_po list_del(&page->lru); clear_bit(PAGE_HEADLESS, &page->private); free_z3fold_page(zhdr); - pool->pages_nr--; + atomic64_dec(&pool->pages_nr); } else { z3fold_compact_page(zhdr); /* Add to the unbuddied list */ @@ -573,7 +572,7 @@ next: */ clear_bit(PAGE_HEADLESS, &page->private); free_z3fold_page(zhdr); - pool->pages_nr--; + atomic64_dec(&pool->pages_nr); spin_unlock(&pool->lock); return 0; } else if (!test_bit(PAGE_HEADLESS, &page->private)) { @@ -676,12 +675,11 @@ static void z3fold_unmap(struct z3fold_p * z3fold_get_pool_size() - gets the z3fold pool size in pages * @pool: pool whose size is being queried * - * Returns: size in pages of the given pool. The pool lock need not be - * taken to access pages_nr. + * Returns: size in pages of the given pool. */ static u64 z3fold_get_pool_size(struct z3fold_pool *pool) { - return pool->pages_nr; + return atomic64_read(&pool->pages_nr); } /***************** _ Patches currently in -mm which might be from vitalywool@xxxxxxxxx are z3fold-make-pages_nr-atomic.patch z3fold-fix-header-size-related-issues.patch z3fold-extend-compaction-function.patch z3fold-use-per-page-spinlock.patch z3fold-add-kref-refcounting.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html