[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250429072033.3382-1-liubo03@inspur.com>
Date: Tue, 29 Apr 2025 03:20:33 -0400
From: Bo Liu <liubo03@...pur.com>
To: <clm@...com>, <josef@...icpanda.com>, <dsterba@...e.com>
CC: <linux-btrfs@...r.kernel.org>, <linux-kernel@...r.kernel.org>, Bo Liu
<liubo03@...pur.com>
Subject: [PATCH] btrfs: Use refcount_t instead of atomic_t for mmap_count
Use an API that resembles more the actual use of mmap_count.
Found by cocci:
fs/btrfs/bio.c:153:5-24: WARNING: atomic_dec_and_test variation before object free at line 155
Signed-off-by: Bo Liu <liubo03@...pur.com>
---
fs/btrfs/bio.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/fs/btrfs/bio.c b/fs/btrfs/bio.c
index a3ee9a976f6f..353c61936cd6 100644
--- a/fs/btrfs/bio.c
+++ b/fs/btrfs/bio.c
@@ -23,7 +23,7 @@ static mempool_t btrfs_failed_bio_pool;
struct btrfs_failed_bio {
struct btrfs_bio *bbio;
int num_copies;
- atomic_t repair_count;
+ refcount_t repair_count;
};
/* Is this a data path I/O that needs storage layer checksum and repair? */
@@ -150,7 +150,7 @@ static int prev_repair_mirror(struct btrfs_failed_bio *fbio, int cur_mirror)
static void btrfs_repair_done(struct btrfs_failed_bio *fbio)
{
- if (atomic_dec_and_test(&fbio->repair_count)) {
+ if (refcount_dec_and_test(&fbio->repair_count)) {
btrfs_bio_end_io(fbio->bbio, fbio->bbio->bio.bi_status);
mempool_free(fbio, &btrfs_failed_bio_pool);
}
@@ -235,10 +235,10 @@ static struct btrfs_failed_bio *repair_one_sector(struct btrfs_bio *failed_bbio,
fbio = mempool_alloc(&btrfs_failed_bio_pool, GFP_NOFS);
fbio->bbio = failed_bbio;
fbio->num_copies = num_copies;
- atomic_set(&fbio->repair_count, 1);
+ refcount_set(&fbio->repair_count, 1);
}
- atomic_inc(&fbio->repair_count);
+ refcount_inc(&fbio->repair_count);
repair_bio = bio_alloc_bioset(NULL, 1, REQ_OP_READ, GFP_NOFS,
&btrfs_repair_bioset);
--
2.31.1
Powered by blists - more mailing lists