]> www.infradead.org Git - users/hch/block.git/commitdiff
block: pass a bdev argument to bio_init bio_alloc
authorChristoph Hellwig <hch@lst.de>
Mon, 25 Jan 2021 17:13:54 +0000 (18:13 +0100)
committerChristoph Hellwig <hch@lst.de>
Tue, 2 Feb 2021 09:41:12 +0000 (10:41 +0100)
Clean up some code and prepare for always having a valid bi_bdev in
the bio.

Signed-off-by: Christoph Hellwig <hch@lst.de>
26 files changed:
block/bio.c
block/blk-flush.c
drivers/block/floppy.c
drivers/block/zram/zram_drv.c
drivers/lightnvm/core.c
drivers/md/bcache/io.c
drivers/md/bcache/journal.c
drivers/md/bcache/movinggc.c
drivers/md/bcache/request.c
drivers/md/bcache/super.c
drivers/md/bcache/writeback.c
drivers/md/dm-snap.c
drivers/md/dm-thin.c
drivers/md/dm.c
drivers/md/md-multipath.c
drivers/md/md.c
drivers/md/raid5-cache.c
drivers/md/raid5-ppl.c
drivers/md/raid5.c
drivers/nvme/target/io-cmd-bdev.c
drivers/nvme/target/passthru.c
fs/block_dev.c
fs/iomap/buffered-io.c
fs/xfs/xfs_log.c
fs/zonefs/super.c
include/linux/bio.h

index f56b71153f40bb7da7f476336a18846cb18bcb29..65a4406709cee0f3755f14d95d42f97b5f6ab56a 100644 (file)
@@ -264,13 +264,15 @@ static void bio_free(struct bio *bio)
  * they must remember to pair any call to bio_init() with bio_uninit()
  * when IO has completed, or when the bio is released.
  */
-void bio_init(struct bio *bio, struct bio_vec *table,
+void bio_init(struct bio *bio, struct block_device *bdev, struct bio_vec *table,
              unsigned short max_vecs)
 {
        memset(bio, 0, sizeof(*bio));
        atomic_set(&bio->__bi_remaining, 1);
        atomic_set(&bio->__bi_cnt, 1);
 
+       if (bdev)
+               bio_set_dev(bio, bdev);
        bio->bi_io_vec = table;
        bio->bi_max_vecs = max_vecs;
 }
@@ -487,15 +489,13 @@ struct bio *bio_alloc_bioset(struct block_device *bdev, unsigned int nr_iovecs,
                        goto err_free;
 
                bio->bi_flags |= idx << BVEC_POOL_OFFSET;
-               bio_init(bio, bvl, bvec_nr_vecs(idx));
+               bio_init(bio, bdev, bvl, bvec_nr_vecs(idx));
        } else if (nr_iovecs) {
-               bio_init(bio, bio->bi_inline_vecs, BIO_INLINE_VECS);
+               bio_init(bio, bdev, bio->bi_inline_vecs, BIO_INLINE_VECS);
        } else {
-               bio_init(bio, NULL, 0);
+               bio_init(bio, bdev, NULL, 0);
        }
 
-       if (bdev)
-               bio_set_dev(bio, bdev);
        bio->bi_pool = bs;
        return bio;
 
@@ -526,9 +526,7 @@ struct bio *bio_kmalloc(struct block_device *bdev, unsigned int nr_iovecs,
        bio = kmalloc(struct_size(bio, bi_inline_vecs, nr_iovecs), gfp_mask);
        if (unlikely(!bio))
                return NULL;
-       bio_init(bio, nr_iovecs ? bio->bi_inline_vecs : NULL, nr_iovecs);
-       if (bdev)
-               bio_set_dev(bio, bdev);
+       bio_init(bio, bdev, nr_iovecs ? bio->bi_inline_vecs : NULL, nr_iovecs);
        bio->bi_pool = NULL;
        return bio;
 }
index 7942ca6ed3211c684437c6875e678841888b583b..50a7ca9b52a645c70d36f5c19c766935223c2a72 100644 (file)
@@ -440,8 +440,7 @@ int blkdev_issue_flush(struct block_device *bdev)
 {
        struct bio bio;
 
-       bio_init(&bio, NULL, 0);
-       bio_set_dev(&bio, bdev);
+       bio_init(&bio, bdev, NULL, 0);
        bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
        return submit_bio_wait(&bio);
 }
index dfe1dfc901ccc2ae5876437f735220d1e1b6d41f..b1113fcfbe9b6949c6c9ad6cbcc3d749cc719b7d 100644 (file)
@@ -4218,8 +4218,7 @@ static int __floppy_read_block_0(struct block_device *bdev, int drive)
 
        cbdata.drive = drive;
 
-       bio_init(&bio, &bio_vec, 1);
-       bio_set_dev(&bio, bdev);
+       bio_init(&bio, bdev, &bio_vec, 1);
        bio_add_page(&bio, page, block_size(bdev), 0);
 
        bio.bi_iter.bi_sector = 0;
index 7ee6adf8fbf88d2febe96a41e925668b94c2e019..e1c17ed4c888f280d1f3ba4ab3db85e4ec5de70c 100644 (file)
@@ -717,8 +717,7 @@ static ssize_t writeback_store(struct device *dev,
                        continue;
                }
 
-               bio_init(&bio, &bio_vec, 1);
-               bio_set_dev(&bio, zram->bdev);
+               bio_init(&bio, zram->bdev, &bio_vec, 1);
                bio.bi_iter.bi_sector = blk_idx * (PAGE_SIZE >> 9);
                bio.bi_opf = REQ_OP_WRITE | REQ_SYNC;
 
index 28ddcaa5358b141db53af65dc595b08ef80044e8..a7bc025273dfb9ab13786a80cf7e1a9f93ab8a38 100644 (file)
@@ -833,7 +833,7 @@ static int nvm_bb_chunk_sense(struct nvm_dev *dev, struct ppa_addr ppa)
        if (!page)
                return -ENOMEM;
 
-       bio_init(&bio, &bio_vec, 1);
+       bio_init(&bio, NULL, &bio_vec, 1);
        bio_add_page(&bio, page, PAGE_SIZE, 0);
        bio_set_op_attrs(&bio, REQ_OP_READ, 0);
 
index 3ee85758f5f8a16641ebdcac6dadcf688bc38977..4dd257bb57eb951b7c8a5e97d12d04b6c83c89d1 100644 (file)
@@ -26,9 +26,8 @@ struct bio *bch_bbio_alloc(struct cache_set *c)
        struct bbio *b = mempool_alloc(&c->bio_meta, GFP_NOIO);
        struct bio *bio = &b->bio;
 
-       bio_init(bio, bio->bi_inline_vecs, meta_bucket_pages(&c->cache->sb));
-       bio_set_dev(bio, c->cache->bdev);
-
+       bio_init(bio, c->cache->bdev, bio->bi_inline_vecs,
+                meta_bucket_pages(&c->cache->sb));
        return bio;
 }
 
index 718c3c6199e8167c74553e7c1fd0cab118ce4487..8050915e94262f50d020a2ac8b97d996c1d9deb4 100644 (file)
@@ -611,11 +611,10 @@ static void do_journal_discard(struct cache *ca)
 
                atomic_set(&ja->discard_in_flight, DISCARD_IN_FLIGHT);
 
-               bio_init(bio, bio->bi_inline_vecs, 1);
+               bio_init(bio, ca->bdev, bio->bi_inline_vecs, 1);
                bio_set_op_attrs(bio, REQ_OP_DISCARD, 0);
                bio->bi_iter.bi_sector  = bucket_to_sector(ca->set,
                                                ca->sb.d[ja->discard_idx]);
-               bio_set_dev(bio, ca->bdev);
                bio->bi_iter.bi_size    = bucket_bytes(ca);
                bio->bi_end_io          = journal_discard_endio;
 
@@ -775,7 +774,6 @@ static void journal_write_unlocked(struct closure *cl)
 
                bio_reset(bio);
                bio->bi_iter.bi_sector  = PTR_OFFSET(k, i);
-               bio_set_dev(bio, ca->bdev);
                bio->bi_iter.bi_size = sectors << 9;
 
                bio->bi_end_io  = journal_write_endio;
index a22f4bbb79e6029ec0efd2eb66fd03d7dc280cd0..9ca72a9067ce8d29d0b6733be9bdb808648723f6 100644 (file)
@@ -79,9 +79,8 @@ static void moving_init(struct moving_io *io)
 {
        struct bio *bio = &io->bio.bio;
 
-       bio_init(bio, bio->bi_inline_vecs,
+       bio_init(bio, io->op.c->cache->bdev, bio->bi_inline_vecs,
                 DIV_ROUND_UP(KEY_SIZE(&io->w->key), PAGE_SECTORS));
-       bio_set_dev(bio, io->op.c->cache->bdev);
        bio_get(bio);
        bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
 
index 84917158da7cbc93ab50d6c31d1b482506c2c3da..b8f592df717340ebde6670968d9ba3c2d0e4dea4 100644 (file)
@@ -685,8 +685,7 @@ static void do_bio_hook(struct search *s,
 {
        struct bio *bio = &s->bio.bio;
 
-       bio_init(bio, NULL, 0);
-       bio->bi_bdev = orig_bio->bi_bdev;
+       bio_init(bio, orig_bio->bi_bdev, NULL, 0);
        __bio_clone_fast(bio, orig_bio);
        /*
         * bi_end_io can be set separately somewhere else, e.g. the
index 193fe7652329a3cad68a93de637674cdf316b621..dd0ee870e2bd8dfd715fdb24816d8a7bd7d2ca3b 100644 (file)
@@ -341,8 +341,7 @@ void bch_write_bdev_super(struct cached_dev *dc, struct closure *parent)
        down(&dc->sb_write_mutex);
        closure_init(cl, parent);
 
-       bio_init(bio, dc->sb_bv, 1);
-       bio_set_dev(bio, dc->bdev);
+       bio_init(bio, dc->bdev, dc->sb_bv, 1);
        bio->bi_end_io  = write_bdev_super_endio;
        bio->bi_private = dc;
 
@@ -385,8 +384,7 @@ void bcache_write_super(struct cache_set *c)
        if (ca->sb.version < version)
                ca->sb.version = version;
 
-       bio_init(bio, ca->sb_bv, 1);
-       bio_set_dev(bio, ca->bdev);
+       bio_init(bio, ca->bdev, ca->sb_bv, 1);
        bio->bi_end_io  = write_super_endio;
        bio->bi_private = ca;
 
@@ -2242,7 +2240,7 @@ static int cache_alloc(struct cache *ca)
        __module_get(THIS_MODULE);
        kobject_init(&ca->kobj, &bch_cache_ktype);
 
-       bio_init(&ca->journal.bio, ca->journal.bio.bi_inline_vecs, 8);
+       bio_init(&ca->journal.bio, ca->bdev, ca->journal.bio.bi_inline_vecs, 8);
 
        /*
         * when ca->sb.njournal_buckets is not zero, journal exists,
index 681d135f20d8a4ac51e6817ebab69107652143f1..3c00db4c27da7e47ea94778c3f3f9fd19a2e9b6f 100644 (file)
@@ -249,12 +249,12 @@ struct dirty_io {
        struct bio              bio;
 };
 
-static void dirty_init(struct keybuf_key *w)
+static void dirty_init(struct keybuf_key *w, struct block_device *bdev)
 {
        struct dirty_io *io = w->private;
        struct bio *bio = &io->bio;
 
-       bio_init(bio, bio->bi_inline_vecs,
+       bio_init(bio, bdev, bio->bi_inline_vecs,
                 DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS));
        if (!io->dc->writeback_percent)
                bio_set_prio(bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));
@@ -356,10 +356,9 @@ static void write_dirty(struct closure *cl)
         * to clean up.
         */
        if (KEY_DIRTY(&w->key)) {
-               dirty_init(w);
+               dirty_init(w, io->dc->bdev);
                bio_set_op_attrs(&io->bio, REQ_OP_WRITE, 0);
                io->bio.bi_iter.bi_sector = KEY_START(&w->key);
-               bio_set_dev(&io->bio, io->dc->bdev);
                io->bio.bi_end_io       = dirty_endio;
 
                /* I/O request sent to backing device */
@@ -469,10 +468,9 @@ static void read_dirty(struct cached_dev *dc)
                        io->dc          = dc;
                        io->sequence    = sequence++;
 
-                       dirty_init(w);
+                       dirty_init(w, dc->disk.c->cache->bdev);
                        bio_set_op_attrs(&io->bio, REQ_OP_READ, 0);
                        io->bio.bi_iter.bi_sector = PTR_OFFSET(&w->key, 0);
-                       bio_set_dev(&io->bio, dc->disk.c->cache->bdev);
                        io->bio.bi_end_io       = read_dirty_endio;
 
                        if (bch_bio_alloc_pages(&io->bio, GFP_KERNEL))
index 11890db71f3fe30a6a01958ae1da28ceb5d76d79..e254e763d7f8b849163b86a289be1cdcd91f2f9d 100644 (file)
@@ -1131,7 +1131,6 @@ static int flush_data(struct dm_snapshot *s)
        struct bio *flush_bio = &s->flush_bio;
 
        bio_reset(flush_bio);
-       bio_set_dev(flush_bio, s->origin->bdev);
        flush_bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
 
        return submit_bio_wait(flush_bio);
@@ -1339,7 +1338,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
        s->first_merging_chunk = 0;
        s->num_merging_chunks = 0;
        bio_list_init(&s->bios_queued_during_merge);
-       bio_init(&s->flush_bio, NULL, 0);
+       bio_init(&s->flush_bio, s->origin->bdev, NULL, 0);
 
        /* Allocate hash table for COW data */
        if (init_hash_tables(s)) {
index ebb8d72939a4d6071f7d7f4204b24f2dcf911c7f..b9efbc6e3685c7b66a71bffad98dcff3821fa2f2 100644 (file)
@@ -2998,7 +2998,7 @@ static struct pool *pool_create(struct mapped_device *pool_md,
        pool->low_water_triggered = false;
        pool->suspended = true;
        pool->out_of_data_space = false;
-       bio_init(&pool->flush_bio, NULL, 0);
+       bio_init(&pool->flush_bio, data_dev, NULL, 0);
 
        pool->shared_read_ds = dm_deferred_set_create();
        if (!pool->shared_read_ds) {
@@ -3208,7 +3208,6 @@ static int metadata_pre_commit_callback(void *context)
        struct bio *flush_bio = &pool->flush_bio;
 
        bio_reset(flush_bio);
-       bio_set_dev(flush_bio, pool->data_dev);
        flush_bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
 
        return submit_bio_wait(flush_bio);
index 0787f4ee2539aed6cefa9063a150e4b25b815f63..bb57ac40d1b4a5abeb1e19b3a531aa1dacd7ea45 100644 (file)
@@ -1425,9 +1425,8 @@ static int __send_empty_flush(struct clone_info *ci)
         * need to reference it after submit. It's just used as
         * the basis for the clone(s).
         */
-       bio_init(&flush_bio, NULL, 0);
+       bio_init(&flush_bio, ci->io->md->disk->part0, NULL, 0);
        flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC;
-       bio_set_dev(&flush_bio, ci->io->md->disk->part0);
 
        ci->bio = &flush_bio;
        ci->sector_count = 0;
index 776bbe542db55eeed565f5aa208713ed5215904a..4954d2291537855d786cbf72fbfe11c2931f5213 100644 (file)
@@ -121,11 +121,10 @@ static bool multipath_make_request(struct mddev *mddev, struct bio * bio)
        }
        multipath = conf->multipaths + mp_bh->path;
 
-       bio_init(&mp_bh->bio, NULL, 0);
+       bio_init(&mp_bh->bio, multipath->rdev->bdev, NULL, 0);
        __bio_clone_fast(&mp_bh->bio, bio);
 
        mp_bh->bio.bi_iter.bi_sector += multipath->rdev->data_offset;
-       bio_set_dev(&mp_bh->bio, multipath->rdev->bdev);
        mp_bh->bio.bi_opf |= REQ_FAILFAST_TRANSPORT;
        mp_bh->bio.bi_end_io = multipath_end_request;
        mp_bh->bio.bi_private = mp_bh;
index 85b56b9418f99e59687d207ccf690d47a58ab895..8384b189d5942c9d34b62b9588dbede23d46d999 100644 (file)
@@ -1016,12 +1016,8 @@ int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
        struct bio bio;
        struct bio_vec bvec;
 
-       bio_init(&bio, &bvec, 1);
-
-       if (metadata_op && rdev->meta_bdev)
-               bio_set_dev(&bio, rdev->meta_bdev);
-       else
-               bio_set_dev(&bio, rdev->bdev);
+       bio_init(&bio, (metadata_op && rdev->meta_bdev) ?
+                rdev->meta_bdev : rdev->bdev, &bvec, 1);
        bio.bi_opf = op | op_flags;
        if (metadata_op)
                bio.bi_iter.bi_sector = sector + rdev->sb_start;
index a1378548a4f8993e97726a2a0bc5dce213453a85..b2cb955a18506d6b32ebe9877df29978c33d08c1 100644 (file)
@@ -1303,7 +1303,6 @@ void r5l_flush_stripe_to_raid(struct r5l_log *log)
        if (!do_flush)
                return;
        bio_reset(&log->flush_bio);
-       bio_set_dev(&log->flush_bio, log->rdev->bdev);
        log->flush_bio.bi_end_io = r5l_log_flush_endio;
        log->flush_bio.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
        submit_bio(&log->flush_bio);
@@ -3108,7 +3107,7 @@ int r5l_init_log(struct r5conf *conf, struct md_rdev *rdev)
        INIT_LIST_HEAD(&log->io_end_ios);
        INIT_LIST_HEAD(&log->flushing_ios);
        INIT_LIST_HEAD(&log->finished_ios);
-       bio_init(&log->flush_bio, NULL, 0);
+       bio_init(&log->flush_bio, log->rdev->bdev, NULL, 0);
 
        log->io_kc = KMEM_CACHE(r5l_io_unit, 0);
        if (!log->io_kc)
index 51a8d88295ef3d0c49e5c896260e0e119ded71d3..58d21a47c17c07cc94a62fe0f2f71c750390f6d7 100644 (file)
@@ -250,7 +250,7 @@ static struct ppl_io_unit *ppl_new_iounit(struct ppl_log *log,
        INIT_LIST_HEAD(&io->stripe_list);
        atomic_set(&io->pending_stripes, 0);
        atomic_set(&io->pending_flushes, 0);
-       bio_init(&io->bio, io->biovec, PPL_IO_INLINE_BVECS);
+       bio_init(&io->bio, log->rdev->bdev, io->biovec, PPL_IO_INLINE_BVECS);
 
        pplhdr = page_address(io->header_page);
        clear_page(pplhdr);
@@ -466,7 +466,6 @@ static void ppl_submit_iounit(struct ppl_io_unit *io)
 
        bio->bi_end_io = ppl_log_endio;
        bio->bi_opf = REQ_OP_WRITE | REQ_FUA;
-       bio_set_dev(bio, log->rdev->bdev);
        bio->bi_iter.bi_sector = log->next_io_sector;
        bio_add_page(bio, io->header_page, PAGE_SIZE, 0);
        bio->bi_write_hint = ppl_conf->write_hint;
index 92c5dafb4d9021dd87b1d3b92da0df2c13cdfb31..799fe425186c8299ebad83ec10c76bd645799aab 100644 (file)
@@ -2309,8 +2309,12 @@ static struct stripe_head *alloc_stripe(struct kmem_cache *sc, gfp_t gfp,
                for (i = 0; i < disks; i++) {
                        struct r5dev *dev = &sh->dev[i];
 
-                       bio_init(&dev->req, &dev->vec, 1);
-                       bio_init(&dev->rreq, &dev->rvec, 1);
+                       /*
+                        * No bdev available yet, will be initialized later
+                        * before adding pages to the bio.
+                        */
+                       bio_init(&dev->req, NULL, &dev->vec, 1);
+                       bio_init(&dev->rreq, NULL, &dev->rvec, 1);
                }
 
                if (raid5_has_ppl(conf)) {
index b7d13fe148663c159eba2e66d018dde11ef8d408..e13fa33e378d493be11fc2efdcb9e7846b442b8d 100644 (file)
@@ -261,8 +261,8 @@ static void nvmet_bdev_execute_rw(struct nvmet_req *req)
 
        if (req->transfer_len <= NVMET_MAX_INLINE_DATA_LEN) {
                bio = &req->b.inline_bio;
-               bio_init(bio, req->inline_bvec, ARRAY_SIZE(req->inline_bvec));
-               bio_set_dev(bio, req->ns->bdev);
+               bio_init(bio, req->ns->bdev, req->inline_bvec,
+                        ARRAY_SIZE(req->inline_bvec));
        } else {
                bio = bio_alloc(req->ns->bdev, sg_cnt, GFP_KERNEL);
        }
@@ -321,8 +321,8 @@ static void nvmet_bdev_execute_flush(struct nvmet_req *req)
        if (!nvmet_check_transfer_len(req, 0))
                return;
 
-       bio_init(bio, req->inline_bvec, ARRAY_SIZE(req->inline_bvec));
-       bio_set_dev(bio, req->ns->bdev);
+       bio_init(bio, req->ns->bdev, req->inline_bvec,
+                ARRAY_SIZE(req->inline_bvec));
        bio->bi_private = req;
        bio->bi_end_io = nvmet_bio_done;
        bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;
index 482fe03b2dc30ce95133bb85abca3bd86ba313d2..447dd2020179d9b9fe1bfbe2d07eb46b73d75d86 100644 (file)
@@ -196,7 +196,8 @@ static int nvmet_passthru_map_sg(struct nvmet_req *req, struct request *rq)
 
        if (req->transfer_len <= NVMET_MAX_INLINE_DATA_LEN) {
                bio = &req->p.inline_bio;
-               bio_init(bio, req->inline_bvec, ARRAY_SIZE(req->inline_bvec));
+               bio_init(bio, NULL, req->inline_bvec,
+                        ARRAY_SIZE(req->inline_bvec));
        } else {
                bio = bio_alloc(NULL, req->sg_cnt, GFP_KERNEL);
                bio->bi_end_io = bio_put;
index 6c4c1fca138acb9ffd8d072703b7fffea8e47662..c138ede160f753628c77501b2f3a0fb4fea560c3 100644 (file)
@@ -237,8 +237,7 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
                        return -ENOMEM;
        }
 
-       bio_init(&bio, vecs, nr_pages);
-       bio_set_dev(&bio, bdev);
+       bio_init(&bio, bdev, vecs, nr_pages);
        bio.bi_iter.bi_sector = pos >> 9;
        bio.bi_write_hint = iocb->ki_hint;
        bio.bi_private = current;
index 0f971179b00c7b843ae505635bdf672aaee86586..910b73105af35245761981ea9faf6171a7c0cb5a 100644 (file)
@@ -537,10 +537,9 @@ iomap_read_page_sync(loff_t block_start, struct page *page, unsigned poff,
        struct bio_vec bvec;
        struct bio bio;
 
-       bio_init(&bio, &bvec, 1);
+       bio_init(&bio, iomap->bdev, &bvec, 1);
        bio.bi_opf = REQ_OP_READ;
        bio.bi_iter.bi_sector = iomap_sector(iomap, block_start);
-       bio_set_dev(&bio, iomap->bdev);
        __bio_add_page(&bio, page, plen, poff);
        return submit_bio_wait(&bio);
 }
index fa2d05e65ff1fc00041b92c703635dc5804145f5..16fd406a6fce8e0d17e5e677405db3b4e094b09e 100644 (file)
@@ -1701,8 +1701,8 @@ xlog_write_iclog(
                return;
        }
 
-       bio_init(&iclog->ic_bio, iclog->ic_bvec, howmany(count, PAGE_SIZE));
-       bio_set_dev(&iclog->ic_bio, log->l_targ->bt_bdev);
+       bio_init(&iclog->ic_bio, log->l_targ->bt_bdev, iclog->ic_bvec,
+                howmany(count, PAGE_SIZE));
        iclog->ic_bio.bi_iter.bi_sector = log->l_logBBstart + bno;
        iclog->ic_bio.bi_end_io = xlog_bio_end_io;
        iclog->ic_bio.bi_private = iclog;
index 51cfe2ee7a4b59383727dd6537ea0fbf70f5519d..9a4dd2f4caff7d95c1c5309547b270de8e87cf00 100644 (file)
@@ -1475,10 +1475,9 @@ static int zonefs_read_super(struct super_block *sb)
        if (!page)
                return -ENOMEM;
 
-       bio_init(&bio, &bio_vec, 1);
+       bio_init(&bio, sb->s_bdev, &bio_vec, 1);
        bio.bi_iter.bi_sector = 0;
        bio.bi_opf = REQ_OP_READ;
-       bio_set_dev(&bio, sb->s_bdev);
        bio_add_page(&bio, page, PAGE_SIZE, 0);
 
        ret = submit_bio_wait(&bio);
index d0e87174d263e603b0e2aa9b3df8daab923330f5..efd1734bb026621a370bbbcc9a8a2e9951294bba 100644 (file)
@@ -459,8 +459,8 @@ struct request_queue;
 extern int submit_bio_wait(struct bio *bio);
 extern void bio_advance(struct bio *, unsigned);
 
-extern void bio_init(struct bio *bio, struct bio_vec *table,
-                    unsigned short max_vecs);
+void bio_init(struct bio *bio, struct block_device *bdev, struct bio_vec *table,
+               unsigned short max_vecs);
 extern void bio_uninit(struct bio *);
 extern void bio_reset(struct bio *);
 void bio_chain(struct bio *, struct bio *);