Re: [PATCH 05/19] dm: bio_alloc can't fail if it is allowed to sleep

2022-01-27 Thread Mike Snitzer
On Mon, Jan 24 2022 at  4:10P -0500,
Christoph Hellwig  wrote:

> Remove handling of NULL returns from sleeping bio_alloc calls given that
> those can't fail.
> 
> Signed-off-by: Christoph Hellwig 

Acked-by: Mike Snitzer 




[PATCH 05/19] dm: bio_alloc can't fail if it is allowed to sleep

2022-01-24 Thread Christoph Hellwig
Remove handling of NULL returns from sleeping bio_alloc calls given that
those can't fail.

Signed-off-by: Christoph Hellwig 
---
 drivers/md/dm-crypt.c  |  5 +
 drivers/md/dm-log-writes.c | 18 --
 drivers/md/dm-thin.c   | 25 +
 drivers/md/dm-zoned-metadata.c | 11 ---
 drivers/md/dm.c|  2 --
 5 files changed, 10 insertions(+), 51 deletions(-)

diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index d4ae31558826a..20abe3486aba1 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -1673,9 +1673,6 @@ static struct bio *crypt_alloc_buffer(struct dm_crypt_io 
*io, unsigned size)
mutex_lock(>bio_alloc_lock);
 
clone = bio_alloc_bioset(GFP_NOIO, nr_iovecs, >bs);
-   if (!clone)
-   goto out;
-
clone_init(io, clone);
 
remaining_size = size;
@@ -1702,7 +1699,7 @@ static struct bio *crypt_alloc_buffer(struct dm_crypt_io 
*io, unsigned size)
bio_put(clone);
clone = NULL;
}
-out:
+
if (unlikely(gfp_mask & __GFP_DIRECT_RECLAIM))
mutex_unlock(>bio_alloc_lock);
 
diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
index 139b09b06eda9..25f5e8d2d417b 100644
--- a/drivers/md/dm-log-writes.c
+++ b/drivers/md/dm-log-writes.c
@@ -218,10 +218,6 @@ static int write_metadata(struct log_writes_c *lc, void 
*entry,
size_t ret;
 
bio = bio_alloc(GFP_KERNEL, 1);
-   if (!bio) {
-   DMERR("Couldn't alloc log bio");
-   goto error;
-   }
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
@@ -276,11 +272,6 @@ static int write_inline_data(struct log_writes_c *lc, void 
*entry,
atomic_inc(>io_blocks);
 
bio = bio_alloc(GFP_KERNEL, bio_pages);
-   if (!bio) {
-   DMERR("Couldn't alloc inline data bio");
-   goto error;
-   }
-
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
@@ -322,7 +313,6 @@ static int write_inline_data(struct log_writes_c *lc, void 
*entry,
 error_bio:
bio_free_pages(bio);
bio_put(bio);
-error:
put_io_block(lc);
return -1;
 }
@@ -364,10 +354,6 @@ static int log_one_block(struct log_writes_c *lc,
 
atomic_inc(>io_blocks);
bio = bio_alloc(GFP_KERNEL, bio_max_segs(block->vec_cnt));
-   if (!bio) {
-   DMERR("Couldn't alloc log bio");
-   goto error;
-   }
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
@@ -387,10 +373,6 @@ static int log_one_block(struct log_writes_c *lc,
submit_bio(bio);
bio = bio_alloc(GFP_KERNEL,
bio_max_segs(block->vec_cnt - i));
-   if (!bio) {
-   DMERR("Couldn't alloc log bio");
-   goto error;
-   }
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index ec119d2422d5d..76a9c2e9aeeea 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -1180,24 +1180,17 @@ static void 
process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
}
 
discard_parent = bio_alloc(GFP_NOIO, 1);
-   if (!discard_parent) {
-   DMWARN("%s: unable to allocate top level discard bio for 
passdown. Skipping passdown.",
-  dm_device_name(tc->pool->pool_md));
-   queue_passdown_pt2(m);
+   discard_parent->bi_end_io = passdown_endio;
+   discard_parent->bi_private = m;
 
-   } else {
-   discard_parent->bi_end_io = passdown_endio;
-   discard_parent->bi_private = m;
-
-   if (m->maybe_shared)
-   passdown_double_checking_shared_status(m, 
discard_parent);
-   else {
-   struct discard_op op;
+   if (m->maybe_shared)
+   passdown_double_checking_shared_status(m, discard_parent);
+   else {
+   struct discard_op op;
 
-   begin_discard(, tc, discard_parent);
-   r = issue_discard(, m->data_block, data_end);
-   end_discard(, r);
-   }
+   begin_discard(, tc, discard_parent);
+   r = issue_discard(, m->data_block, data_end);
+   end_discard(, r);
}
 }
 
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index ee4626d085574..5718b83cc7182 

[PATCH 05/19] dm: bio_alloc can't fail if it is allowed to sleep

2022-01-17 Thread Christoph Hellwig
Remove handling of NULL returns from sleeping bio_alloc calls given that
those can't fail.

Signed-off-by: Christoph Hellwig 
---
 drivers/md/dm-crypt.c  |  5 +
 drivers/md/dm-log-writes.c | 18 --
 drivers/md/dm-thin.c   | 25 +
 drivers/md/dm-zoned-metadata.c | 11 ---
 drivers/md/dm.c|  2 --
 5 files changed, 10 insertions(+), 51 deletions(-)

diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index d4ae31558826a..20abe3486aba1 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -1673,9 +1673,6 @@ static struct bio *crypt_alloc_buffer(struct dm_crypt_io 
*io, unsigned size)
mutex_lock(>bio_alloc_lock);
 
clone = bio_alloc_bioset(GFP_NOIO, nr_iovecs, >bs);
-   if (!clone)
-   goto out;
-
clone_init(io, clone);
 
remaining_size = size;
@@ -1702,7 +1699,7 @@ static struct bio *crypt_alloc_buffer(struct dm_crypt_io 
*io, unsigned size)
bio_put(clone);
clone = NULL;
}
-out:
+
if (unlikely(gfp_mask & __GFP_DIRECT_RECLAIM))
mutex_unlock(>bio_alloc_lock);
 
diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
index 139b09b06eda9..25f5e8d2d417b 100644
--- a/drivers/md/dm-log-writes.c
+++ b/drivers/md/dm-log-writes.c
@@ -218,10 +218,6 @@ static int write_metadata(struct log_writes_c *lc, void 
*entry,
size_t ret;
 
bio = bio_alloc(GFP_KERNEL, 1);
-   if (!bio) {
-   DMERR("Couldn't alloc log bio");
-   goto error;
-   }
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
@@ -276,11 +272,6 @@ static int write_inline_data(struct log_writes_c *lc, void 
*entry,
atomic_inc(>io_blocks);
 
bio = bio_alloc(GFP_KERNEL, bio_pages);
-   if (!bio) {
-   DMERR("Couldn't alloc inline data bio");
-   goto error;
-   }
-
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
@@ -322,7 +313,6 @@ static int write_inline_data(struct log_writes_c *lc, void 
*entry,
 error_bio:
bio_free_pages(bio);
bio_put(bio);
-error:
put_io_block(lc);
return -1;
 }
@@ -364,10 +354,6 @@ static int log_one_block(struct log_writes_c *lc,
 
atomic_inc(>io_blocks);
bio = bio_alloc(GFP_KERNEL, bio_max_segs(block->vec_cnt));
-   if (!bio) {
-   DMERR("Couldn't alloc log bio");
-   goto error;
-   }
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
@@ -387,10 +373,6 @@ static int log_one_block(struct log_writes_c *lc,
submit_bio(bio);
bio = bio_alloc(GFP_KERNEL,
bio_max_segs(block->vec_cnt - i));
-   if (!bio) {
-   DMERR("Couldn't alloc log bio");
-   goto error;
-   }
bio->bi_iter.bi_size = 0;
bio->bi_iter.bi_sector = sector;
bio_set_dev(bio, lc->logdev->bdev);
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index ec119d2422d5d..76a9c2e9aeeea 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -1180,24 +1180,17 @@ static void 
process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
}
 
discard_parent = bio_alloc(GFP_NOIO, 1);
-   if (!discard_parent) {
-   DMWARN("%s: unable to allocate top level discard bio for 
passdown. Skipping passdown.",
-  dm_device_name(tc->pool->pool_md));
-   queue_passdown_pt2(m);
+   discard_parent->bi_end_io = passdown_endio;
+   discard_parent->bi_private = m;
 
-   } else {
-   discard_parent->bi_end_io = passdown_endio;
-   discard_parent->bi_private = m;
-
-   if (m->maybe_shared)
-   passdown_double_checking_shared_status(m, 
discard_parent);
-   else {
-   struct discard_op op;
+   if (m->maybe_shared)
+   passdown_double_checking_shared_status(m, discard_parent);
+   else {
+   struct discard_op op;
 
-   begin_discard(, tc, discard_parent);
-   r = issue_discard(, m->data_block, data_end);
-   end_discard(, r);
-   }
+   begin_discard(, tc, discard_parent);
+   r = issue_discard(, m->data_block, data_end);
+   end_discard(, r);
}
 }
 
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index ee4626d085574..5718b83cc7182