diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-04 10:58:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-04 10:58:06 -0400 |
commit | f459c34538f57661e0fd1d3eaf7c0b17125ae011 (patch) | |
tree | 3addc82d7f792c4533501978798dad0095293933 /fs | |
parent | 29dcea88779c856c7dc92040a0c01233263101d4 (diff) | |
parent | 32a50fabb334b2f0725de84bf248bd8c24c22b05 (diff) |
Merge tag 'for-4.18/block-20180603' of git://git.kernel.dk/linux-block
Pull block updates from Jens Axboe:
- clean up how we pass around gfp_t and
blk_mq_req_flags_t (Christoph)
- prepare us to defer scheduler attach (Christoph)
- clean up drivers handling of bounce buffers (Christoph)
- fix timeout handling corner cases (Christoph/Bart/Keith)
- bcache fixes (Coly)
- prep work for bcachefs and some block layer optimizations (Kent).
- convert users of bio_sets to using embedded structs (Kent).
- fixes for the BFQ io scheduler (Paolo/Davide/Filippo)
- lightnvm fixes and improvements (Matias, with contributions from Hans
and Javier)
- adding discard throttling to blk-wbt (me)
- sbitmap blk-mq-tag handling (me/Omar/Ming).
- remove the sparc jsflash block driver, acked by DaveM.
- Kyber scheduler improvement from Jianchao, making it more friendly
wrt merging.
- conversion of symbolic proc permissions to octal, from Joe Perches.
Previously the block parts were a mix of both.
- nbd fixes (Josef and Kevin Vigor)
- unify how we handle the various kinds of timestamps that the block
core and utility code uses (Omar)
- three NVMe pull requests from Keith and Christoph, bringing AEN to
feature completeness, file backed namespaces, cq/sq lock split, and
various fixes
- various little fixes and improvements all over the map
* tag 'for-4.18/block-20180603' of git://git.kernel.dk/linux-block: (196 commits)
blk-mq: update nr_requests when switching to 'none' scheduler
block: don't use blocking queue entered for recursive bio submits
dm-crypt: fix warning in shutdown path
lightnvm: pblk: take bitmap alloc. out of critical section
lightnvm: pblk: kick writer on new flush points
lightnvm: pblk: only try to recover lines with written smeta
lightnvm: pblk: remove unnecessary bio_get/put
lightnvm: pblk: add possibility to set write buffer size manually
lightnvm: fix partial read error path
lightnvm: proper error handling for pblk_bio_add_pages
lightnvm: pblk: fix smeta write error path
lightnvm: pblk: garbage collect lines with failed writes
lightnvm: pblk: rework write error recovery path
lightnvm: pblk: remove dead function
lightnvm: pass flag on graceful teardown to targets
lightnvm: pblk: check for chunk size before allocating it
lightnvm: pblk: remove unnecessary argument
lightnvm: pblk: remove unnecessary indirection
lightnvm: pblk: return NVM_ error on failed submission
lightnvm: pblk: warn in case of corrupted write buffer
...
Diffstat (limited to 'fs')
-rw-r--r-- | fs/block_dev.c | 24 | ||||
-rw-r--r-- | fs/btrfs/extent_io.c | 25 | ||||
-rw-r--r-- | fs/direct-io.c | 4 | ||||
-rw-r--r-- | fs/exofs/ore.c | 10 | ||||
-rw-r--r-- | fs/exofs/super.c | 2 | ||||
-rw-r--r-- | fs/nfsd/blocklayout.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_aops.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_aops.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_super.c | 11 |
9 files changed, 39 insertions, 43 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index 7ec920e27065..bef6934b6189 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -272,7 +272,7 @@ struct blkdev_dio { | |||
272 | struct bio bio; | 272 | struct bio bio; |
273 | }; | 273 | }; |
274 | 274 | ||
275 | static struct bio_set *blkdev_dio_pool __read_mostly; | 275 | static struct bio_set blkdev_dio_pool; |
276 | 276 | ||
277 | static void blkdev_bio_end_io(struct bio *bio) | 277 | static void blkdev_bio_end_io(struct bio *bio) |
278 | { | 278 | { |
@@ -334,7 +334,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) | |||
334 | (bdev_logical_block_size(bdev) - 1)) | 334 | (bdev_logical_block_size(bdev) - 1)) |
335 | return -EINVAL; | 335 | return -EINVAL; |
336 | 336 | ||
337 | bio = bio_alloc_bioset(GFP_KERNEL, nr_pages, blkdev_dio_pool); | 337 | bio = bio_alloc_bioset(GFP_KERNEL, nr_pages, &blkdev_dio_pool); |
338 | bio_get(bio); /* extra ref for the completion handler */ | 338 | bio_get(bio); /* extra ref for the completion handler */ |
339 | 339 | ||
340 | dio = container_of(bio, struct blkdev_dio, bio); | 340 | dio = container_of(bio, struct blkdev_dio, bio); |
@@ -432,10 +432,7 @@ blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter) | |||
432 | 432 | ||
433 | static __init int blkdev_init(void) | 433 | static __init int blkdev_init(void) |
434 | { | 434 | { |
435 | blkdev_dio_pool = bioset_create(4, offsetof(struct blkdev_dio, bio), BIOSET_NEED_BVECS); | 435 | return bioset_init(&blkdev_dio_pool, 4, offsetof(struct blkdev_dio, bio), BIOSET_NEED_BVECS); |
436 | if (!blkdev_dio_pool) | ||
437 | return -ENOMEM; | ||
438 | return 0; | ||
439 | } | 436 | } |
440 | module_init(blkdev_init); | 437 | module_init(blkdev_init); |
441 | 438 | ||
@@ -1322,27 +1319,30 @@ static void flush_disk(struct block_device *bdev, bool kill_dirty) | |||
1322 | * check_disk_size_change - checks for disk size change and adjusts bdev size. | 1319 | * check_disk_size_change - checks for disk size change and adjusts bdev size. |
1323 | * @disk: struct gendisk to check | 1320 | * @disk: struct gendisk to check |
1324 | * @bdev: struct bdev to adjust. | 1321 | * @bdev: struct bdev to adjust. |
1322 | * @verbose: if %true log a message about a size change if there is any | ||
1325 | * | 1323 | * |
1326 | * This routine checks to see if the bdev size does not match the disk size | 1324 | * This routine checks to see if the bdev size does not match the disk size |
1327 | * and adjusts it if it differs. When shrinking the bdev size, its all caches | 1325 | * and adjusts it if it differs. When shrinking the bdev size, its all caches |
1328 | * are freed. | 1326 | * are freed. |
1329 | */ | 1327 | */ |
1330 | void check_disk_size_change(struct gendisk *disk, struct block_device *bdev) | 1328 | void check_disk_size_change(struct gendisk *disk, struct block_device *bdev, |
1329 | bool verbose) | ||
1331 | { | 1330 | { |
1332 | loff_t disk_size, bdev_size; | 1331 | loff_t disk_size, bdev_size; |
1333 | 1332 | ||
1334 | disk_size = (loff_t)get_capacity(disk) << 9; | 1333 | disk_size = (loff_t)get_capacity(disk) << 9; |
1335 | bdev_size = i_size_read(bdev->bd_inode); | 1334 | bdev_size = i_size_read(bdev->bd_inode); |
1336 | if (disk_size != bdev_size) { | 1335 | if (disk_size != bdev_size) { |
1337 | printk(KERN_INFO | 1336 | if (verbose) { |
1338 | "%s: detected capacity change from %lld to %lld\n", | 1337 | printk(KERN_INFO |
1339 | disk->disk_name, bdev_size, disk_size); | 1338 | "%s: detected capacity change from %lld to %lld\n", |
1339 | disk->disk_name, bdev_size, disk_size); | ||
1340 | } | ||
1340 | i_size_write(bdev->bd_inode, disk_size); | 1341 | i_size_write(bdev->bd_inode, disk_size); |
1341 | if (bdev_size > disk_size) | 1342 | if (bdev_size > disk_size) |
1342 | flush_disk(bdev, false); | 1343 | flush_disk(bdev, false); |
1343 | } | 1344 | } |
1344 | } | 1345 | } |
1345 | EXPORT_SYMBOL(check_disk_size_change); | ||
1346 | 1346 | ||
1347 | /** | 1347 | /** |
1348 | * revalidate_disk - wrapper for lower-level driver's revalidate_disk call-back | 1348 | * revalidate_disk - wrapper for lower-level driver's revalidate_disk call-back |
@@ -1364,7 +1364,7 @@ int revalidate_disk(struct gendisk *disk) | |||
1364 | return ret; | 1364 | return ret; |
1365 | 1365 | ||
1366 | mutex_lock(&bdev->bd_mutex); | 1366 | mutex_lock(&bdev->bd_mutex); |
1367 | check_disk_size_change(disk, bdev); | 1367 | check_disk_size_change(disk, bdev, ret == 0); |
1368 | bdev->bd_invalidated = 0; | 1368 | bdev->bd_invalidated = 0; |
1369 | mutex_unlock(&bdev->bd_mutex); | 1369 | mutex_unlock(&bdev->bd_mutex); |
1370 | bdput(bdev); | 1370 | bdput(bdev); |
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index e99b329002cf..56d32bb462f9 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -26,7 +26,7 @@ | |||
26 | 26 | ||
27 | static struct kmem_cache *extent_state_cache; | 27 | static struct kmem_cache *extent_state_cache; |
28 | static struct kmem_cache *extent_buffer_cache; | 28 | static struct kmem_cache *extent_buffer_cache; |
29 | static struct bio_set *btrfs_bioset; | 29 | static struct bio_set btrfs_bioset; |
30 | 30 | ||
31 | static inline bool extent_state_in_tree(const struct extent_state *state) | 31 | static inline bool extent_state_in_tree(const struct extent_state *state) |
32 | { | 32 | { |
@@ -162,20 +162,18 @@ int __init extent_io_init(void) | |||
162 | if (!extent_buffer_cache) | 162 | if (!extent_buffer_cache) |
163 | goto free_state_cache; | 163 | goto free_state_cache; |
164 | 164 | ||
165 | btrfs_bioset = bioset_create(BIO_POOL_SIZE, | 165 | if (bioset_init(&btrfs_bioset, BIO_POOL_SIZE, |
166 | offsetof(struct btrfs_io_bio, bio), | 166 | offsetof(struct btrfs_io_bio, bio), |
167 | BIOSET_NEED_BVECS); | 167 | BIOSET_NEED_BVECS)) |
168 | if (!btrfs_bioset) | ||
169 | goto free_buffer_cache; | 168 | goto free_buffer_cache; |
170 | 169 | ||
171 | if (bioset_integrity_create(btrfs_bioset, BIO_POOL_SIZE)) | 170 | if (bioset_integrity_create(&btrfs_bioset, BIO_POOL_SIZE)) |
172 | goto free_bioset; | 171 | goto free_bioset; |
173 | 172 | ||
174 | return 0; | 173 | return 0; |
175 | 174 | ||
176 | free_bioset: | 175 | free_bioset: |
177 | bioset_free(btrfs_bioset); | 176 | bioset_exit(&btrfs_bioset); |
178 | btrfs_bioset = NULL; | ||
179 | 177 | ||
180 | free_buffer_cache: | 178 | free_buffer_cache: |
181 | kmem_cache_destroy(extent_buffer_cache); | 179 | kmem_cache_destroy(extent_buffer_cache); |
@@ -198,8 +196,7 @@ void __cold extent_io_exit(void) | |||
198 | rcu_barrier(); | 196 | rcu_barrier(); |
199 | kmem_cache_destroy(extent_state_cache); | 197 | kmem_cache_destroy(extent_state_cache); |
200 | kmem_cache_destroy(extent_buffer_cache); | 198 | kmem_cache_destroy(extent_buffer_cache); |
201 | if (btrfs_bioset) | 199 | bioset_exit(&btrfs_bioset); |
202 | bioset_free(btrfs_bioset); | ||
203 | } | 200 | } |
204 | 201 | ||
205 | void extent_io_tree_init(struct extent_io_tree *tree, | 202 | void extent_io_tree_init(struct extent_io_tree *tree, |
@@ -2679,7 +2676,7 @@ struct bio *btrfs_bio_alloc(struct block_device *bdev, u64 first_byte) | |||
2679 | { | 2676 | { |
2680 | struct bio *bio; | 2677 | struct bio *bio; |
2681 | 2678 | ||
2682 | bio = bio_alloc_bioset(GFP_NOFS, BIO_MAX_PAGES, btrfs_bioset); | 2679 | bio = bio_alloc_bioset(GFP_NOFS, BIO_MAX_PAGES, &btrfs_bioset); |
2683 | bio_set_dev(bio, bdev); | 2680 | bio_set_dev(bio, bdev); |
2684 | bio->bi_iter.bi_sector = first_byte >> 9; | 2681 | bio->bi_iter.bi_sector = first_byte >> 9; |
2685 | btrfs_io_bio_init(btrfs_io_bio(bio)); | 2682 | btrfs_io_bio_init(btrfs_io_bio(bio)); |
@@ -2692,7 +2689,7 @@ struct bio *btrfs_bio_clone(struct bio *bio) | |||
2692 | struct bio *new; | 2689 | struct bio *new; |
2693 | 2690 | ||
2694 | /* Bio allocation backed by a bioset does not fail */ | 2691 | /* Bio allocation backed by a bioset does not fail */ |
2695 | new = bio_clone_fast(bio, GFP_NOFS, btrfs_bioset); | 2692 | new = bio_clone_fast(bio, GFP_NOFS, &btrfs_bioset); |
2696 | btrfs_bio = btrfs_io_bio(new); | 2693 | btrfs_bio = btrfs_io_bio(new); |
2697 | btrfs_io_bio_init(btrfs_bio); | 2694 | btrfs_io_bio_init(btrfs_bio); |
2698 | btrfs_bio->iter = bio->bi_iter; | 2695 | btrfs_bio->iter = bio->bi_iter; |
@@ -2704,7 +2701,7 @@ struct bio *btrfs_io_bio_alloc(unsigned int nr_iovecs) | |||
2704 | struct bio *bio; | 2701 | struct bio *bio; |
2705 | 2702 | ||
2706 | /* Bio allocation backed by a bioset does not fail */ | 2703 | /* Bio allocation backed by a bioset does not fail */ |
2707 | bio = bio_alloc_bioset(GFP_NOFS, nr_iovecs, btrfs_bioset); | 2704 | bio = bio_alloc_bioset(GFP_NOFS, nr_iovecs, &btrfs_bioset); |
2708 | btrfs_io_bio_init(btrfs_io_bio(bio)); | 2705 | btrfs_io_bio_init(btrfs_io_bio(bio)); |
2709 | return bio; | 2706 | return bio; |
2710 | } | 2707 | } |
@@ -2715,7 +2712,7 @@ struct bio *btrfs_bio_clone_partial(struct bio *orig, int offset, int size) | |||
2715 | struct btrfs_io_bio *btrfs_bio; | 2712 | struct btrfs_io_bio *btrfs_bio; |
2716 | 2713 | ||
2717 | /* this will never fail when it's backed by a bioset */ | 2714 | /* this will never fail when it's backed by a bioset */ |
2718 | bio = bio_clone_fast(orig, GFP_NOFS, btrfs_bioset); | 2715 | bio = bio_clone_fast(orig, GFP_NOFS, &btrfs_bioset); |
2719 | ASSERT(bio); | 2716 | ASSERT(bio); |
2720 | 2717 | ||
2721 | btrfs_bio = btrfs_io_bio(bio); | 2718 | btrfs_bio = btrfs_io_bio(bio); |
diff --git a/fs/direct-io.c b/fs/direct-io.c index 874607bb6e02..093fb54cd316 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c | |||
@@ -432,8 +432,8 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio, | |||
432 | struct bio *bio; | 432 | struct bio *bio; |
433 | 433 | ||
434 | /* | 434 | /* |
435 | * bio_alloc() is guaranteed to return a bio when called with | 435 | * bio_alloc() is guaranteed to return a bio when allowed to sleep and |
436 | * __GFP_RECLAIM and we request a valid number of vectors. | 436 | * we request a valid number of vectors. |
437 | */ | 437 | */ |
438 | bio = bio_alloc(GFP_KERNEL, nr_vecs); | 438 | bio = bio_alloc(GFP_KERNEL, nr_vecs); |
439 | 439 | ||
diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c index 3c6a9c156b7a..ddbf87246898 100644 --- a/fs/exofs/ore.c +++ b/fs/exofs/ore.c | |||
@@ -790,7 +790,7 @@ int ore_create(struct ore_io_state *ios) | |||
790 | for (i = 0; i < ios->oc->numdevs; i++) { | 790 | for (i = 0; i < ios->oc->numdevs; i++) { |
791 | struct osd_request *or; | 791 | struct osd_request *or; |
792 | 792 | ||
793 | or = osd_start_request(_ios_od(ios, i), GFP_KERNEL); | 793 | or = osd_start_request(_ios_od(ios, i)); |
794 | if (unlikely(!or)) { | 794 | if (unlikely(!or)) { |
795 | ORE_ERR("%s: osd_start_request failed\n", __func__); | 795 | ORE_ERR("%s: osd_start_request failed\n", __func__); |
796 | ret = -ENOMEM; | 796 | ret = -ENOMEM; |
@@ -815,7 +815,7 @@ int ore_remove(struct ore_io_state *ios) | |||
815 | for (i = 0; i < ios->oc->numdevs; i++) { | 815 | for (i = 0; i < ios->oc->numdevs; i++) { |
816 | struct osd_request *or; | 816 | struct osd_request *or; |
817 | 817 | ||
818 | or = osd_start_request(_ios_od(ios, i), GFP_KERNEL); | 818 | or = osd_start_request(_ios_od(ios, i)); |
819 | if (unlikely(!or)) { | 819 | if (unlikely(!or)) { |
820 | ORE_ERR("%s: osd_start_request failed\n", __func__); | 820 | ORE_ERR("%s: osd_start_request failed\n", __func__); |
821 | ret = -ENOMEM; | 821 | ret = -ENOMEM; |
@@ -847,7 +847,7 @@ static int _write_mirror(struct ore_io_state *ios, int cur_comp) | |||
847 | struct ore_per_dev_state *per_dev = &ios->per_dev[cur_comp]; | 847 | struct ore_per_dev_state *per_dev = &ios->per_dev[cur_comp]; |
848 | struct osd_request *or; | 848 | struct osd_request *or; |
849 | 849 | ||
850 | or = osd_start_request(_ios_od(ios, dev), GFP_KERNEL); | 850 | or = osd_start_request(_ios_od(ios, dev)); |
851 | if (unlikely(!or)) { | 851 | if (unlikely(!or)) { |
852 | ORE_ERR("%s: osd_start_request failed\n", __func__); | 852 | ORE_ERR("%s: osd_start_request failed\n", __func__); |
853 | ret = -ENOMEM; | 853 | ret = -ENOMEM; |
@@ -966,7 +966,7 @@ int _ore_read_mirror(struct ore_io_state *ios, unsigned cur_comp) | |||
966 | return 0; /* Just an empty slot */ | 966 | return 0; /* Just an empty slot */ |
967 | 967 | ||
968 | first_dev = per_dev->dev + first_dev % ios->layout->mirrors_p1; | 968 | first_dev = per_dev->dev + first_dev % ios->layout->mirrors_p1; |
969 | or = osd_start_request(_ios_od(ios, first_dev), GFP_KERNEL); | 969 | or = osd_start_request(_ios_od(ios, first_dev)); |
970 | if (unlikely(!or)) { | 970 | if (unlikely(!or)) { |
971 | ORE_ERR("%s: osd_start_request failed\n", __func__); | 971 | ORE_ERR("%s: osd_start_request failed\n", __func__); |
972 | return -ENOMEM; | 972 | return -ENOMEM; |
@@ -1060,7 +1060,7 @@ static int _truncate_mirrors(struct ore_io_state *ios, unsigned cur_comp, | |||
1060 | struct ore_per_dev_state *per_dev = &ios->per_dev[cur_comp]; | 1060 | struct ore_per_dev_state *per_dev = &ios->per_dev[cur_comp]; |
1061 | struct osd_request *or; | 1061 | struct osd_request *or; |
1062 | 1062 | ||
1063 | or = osd_start_request(_ios_od(ios, cur_comp), GFP_KERNEL); | 1063 | or = osd_start_request(_ios_od(ios, cur_comp)); |
1064 | if (unlikely(!or)) { | 1064 | if (unlikely(!or)) { |
1065 | ORE_ERR("%s: osd_start_request failed\n", __func__); | 1065 | ORE_ERR("%s: osd_start_request failed\n", __func__); |
1066 | return -ENOMEM; | 1066 | return -ENOMEM; |
diff --git a/fs/exofs/super.c b/fs/exofs/super.c index 179cd5c2f52a..719a3152da80 100644 --- a/fs/exofs/super.c +++ b/fs/exofs/super.c | |||
@@ -229,7 +229,7 @@ void exofs_make_credential(u8 cred_a[OSD_CAP_LEN], const struct osd_obj_id *obj) | |||
229 | static int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj, | 229 | static int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj, |
230 | u64 offset, void *p, unsigned length) | 230 | u64 offset, void *p, unsigned length) |
231 | { | 231 | { |
232 | struct osd_request *or = osd_start_request(od, GFP_KERNEL); | 232 | struct osd_request *or = osd_start_request(od); |
233 | /* struct osd_sense_info osi = {.key = 0};*/ | 233 | /* struct osd_sense_info osi = {.key = 0};*/ |
234 | int ret; | 234 | int ret; |
235 | 235 | ||
diff --git a/fs/nfsd/blocklayout.c b/fs/nfsd/blocklayout.c index 70b8bf781fce..a43dfedd69ec 100644 --- a/fs/nfsd/blocklayout.c +++ b/fs/nfsd/blocklayout.c | |||
@@ -227,7 +227,7 @@ static int nfsd4_scsi_identify_device(struct block_device *bdev, | |||
227 | if (!buf) | 227 | if (!buf) |
228 | return -ENOMEM; | 228 | return -ENOMEM; |
229 | 229 | ||
230 | rq = blk_get_request(q, REQ_OP_SCSI_IN, GFP_KERNEL); | 230 | rq = blk_get_request(q, REQ_OP_SCSI_IN, 0); |
231 | if (IS_ERR(rq)) { | 231 | if (IS_ERR(rq)) { |
232 | error = -ENOMEM; | 232 | error = -ENOMEM; |
233 | goto out_free_buf; | 233 | goto out_free_buf; |
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 0ab824f574ed..102463543db3 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c | |||
@@ -594,7 +594,7 @@ xfs_alloc_ioend( | |||
594 | struct xfs_ioend *ioend; | 594 | struct xfs_ioend *ioend; |
595 | struct bio *bio; | 595 | struct bio *bio; |
596 | 596 | ||
597 | bio = bio_alloc_bioset(GFP_NOFS, BIO_MAX_PAGES, xfs_ioend_bioset); | 597 | bio = bio_alloc_bioset(GFP_NOFS, BIO_MAX_PAGES, &xfs_ioend_bioset); |
598 | xfs_init_bio_from_bh(bio, bh); | 598 | xfs_init_bio_from_bh(bio, bh); |
599 | 599 | ||
600 | ioend = container_of(bio, struct xfs_ioend, io_inline_bio); | 600 | ioend = container_of(bio, struct xfs_ioend, io_inline_bio); |
diff --git a/fs/xfs/xfs_aops.h b/fs/xfs/xfs_aops.h index 69346d460dfa..694c85b03813 100644 --- a/fs/xfs/xfs_aops.h +++ b/fs/xfs/xfs_aops.h | |||
@@ -18,7 +18,7 @@ | |||
18 | #ifndef __XFS_AOPS_H__ | 18 | #ifndef __XFS_AOPS_H__ |
19 | #define __XFS_AOPS_H__ | 19 | #define __XFS_AOPS_H__ |
20 | 20 | ||
21 | extern struct bio_set *xfs_ioend_bioset; | 21 | extern struct bio_set xfs_ioend_bioset; |
22 | 22 | ||
23 | /* | 23 | /* |
24 | * Types of I/O for bmap clustering and I/O completion tracking. | 24 | * Types of I/O for bmap clustering and I/O completion tracking. |
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index d71424052917..f643d76db516 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c | |||
@@ -63,7 +63,7 @@ | |||
63 | #include <linux/parser.h> | 63 | #include <linux/parser.h> |
64 | 64 | ||
65 | static const struct super_operations xfs_super_operations; | 65 | static const struct super_operations xfs_super_operations; |
66 | struct bio_set *xfs_ioend_bioset; | 66 | struct bio_set xfs_ioend_bioset; |
67 | 67 | ||
68 | static struct kset *xfs_kset; /* top-level xfs sysfs dir */ | 68 | static struct kset *xfs_kset; /* top-level xfs sysfs dir */ |
69 | #ifdef DEBUG | 69 | #ifdef DEBUG |
@@ -1845,10 +1845,9 @@ MODULE_ALIAS_FS("xfs"); | |||
1845 | STATIC int __init | 1845 | STATIC int __init |
1846 | xfs_init_zones(void) | 1846 | xfs_init_zones(void) |
1847 | { | 1847 | { |
1848 | xfs_ioend_bioset = bioset_create(4 * MAX_BUF_PER_PAGE, | 1848 | if (bioset_init(&xfs_ioend_bioset, 4 * MAX_BUF_PER_PAGE, |
1849 | offsetof(struct xfs_ioend, io_inline_bio), | 1849 | offsetof(struct xfs_ioend, io_inline_bio), |
1850 | BIOSET_NEED_BVECS); | 1850 | BIOSET_NEED_BVECS)) |
1851 | if (!xfs_ioend_bioset) | ||
1852 | goto out; | 1851 | goto out; |
1853 | 1852 | ||
1854 | xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), | 1853 | xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), |
@@ -1997,7 +1996,7 @@ xfs_init_zones(void) | |||
1997 | out_destroy_log_ticket_zone: | 1996 | out_destroy_log_ticket_zone: |
1998 | kmem_zone_destroy(xfs_log_ticket_zone); | 1997 | kmem_zone_destroy(xfs_log_ticket_zone); |
1999 | out_free_ioend_bioset: | 1998 | out_free_ioend_bioset: |
2000 | bioset_free(xfs_ioend_bioset); | 1999 | bioset_exit(&xfs_ioend_bioset); |
2001 | out: | 2000 | out: |
2002 | return -ENOMEM; | 2001 | return -ENOMEM; |
2003 | } | 2002 | } |
@@ -2029,7 +2028,7 @@ xfs_destroy_zones(void) | |||
2029 | kmem_zone_destroy(xfs_btree_cur_zone); | 2028 | kmem_zone_destroy(xfs_btree_cur_zone); |
2030 | kmem_zone_destroy(xfs_bmap_free_item_zone); | 2029 | kmem_zone_destroy(xfs_bmap_free_item_zone); |
2031 | kmem_zone_destroy(xfs_log_ticket_zone); | 2030 | kmem_zone_destroy(xfs_log_ticket_zone); |
2032 | bioset_free(xfs_ioend_bioset); | 2031 | bioset_exit(&xfs_ioend_bioset); |
2033 | } | 2032 | } |
2034 | 2033 | ||
2035 | STATIC int __init | 2034 | STATIC int __init |