[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



Remove handling of NULL returns from sleeping bio_alloc calls given that
those can't fail.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
 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(&cc->bio_alloc_lock);
 
        clone = bio_alloc_bioset(GFP_NOIO, nr_iovecs, &cc->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(&cc->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(&lc->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(&lc->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(&op, tc, discard_parent);
-                       r = issue_discard(&op, m->data_block, data_end);
-                       end_discard(&op, r);
-               }
+               begin_discard(&op, tc, discard_parent);
+               r = issue_discard(&op, m->data_block, data_end);
+               end_discard(&op, r);
        }
 }
 
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index ee4626d085574..5718b83cc7182 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -551,10 +551,6 @@ static struct dmz_mblock *dmz_get_mblock_slow(struct 
dmz_metadata *zmd,
                return ERR_PTR(-ENOMEM);
 
        bio = bio_alloc(GFP_NOIO, 1);
-       if (!bio) {
-               dmz_free_mblock(zmd, mblk);
-               return ERR_PTR(-ENOMEM);
-       }
 
        spin_lock(&zmd->mblk_lock);
 
@@ -726,10 +722,6 @@ static int dmz_write_mblock(struct dmz_metadata *zmd, 
struct dmz_mblock *mblk,
                return -EIO;
 
        bio = bio_alloc(GFP_NOIO, 1);
-       if (!bio) {
-               set_bit(DMZ_META_ERROR, &mblk->state);
-               return -ENOMEM;
-       }
 
        set_bit(DMZ_META_WRITING, &mblk->state);
 
@@ -760,9 +752,6 @@ static int dmz_rdwr_block(struct dmz_dev *dev, int op,
                return -EIO;
 
        bio = bio_alloc(GFP_NOIO, 1);
-       if (!bio)
-               return -ENOMEM;
-
        bio->bi_iter.bi_sector = dmz_blk2sect(block);
        bio_set_dev(bio, dev->bdev);
        bio_set_op_attrs(bio, op, REQ_SYNC | REQ_META | REQ_PRIO);
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index c0ae8087c6027..81449cbdafa81 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -520,8 +520,6 @@ static struct dm_io *alloc_io(struct mapped_device *md, 
struct bio *bio)
        struct bio *clone;
 
        clone = bio_alloc_bioset(GFP_NOIO, 0, &md->io_bs);
-       if (!clone)
-               return NULL;
 
        tio = container_of(clone, struct dm_target_io, clone);
        tio->inside_dm_io = true;
-- 
2.30.2




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.