aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-06-04 10:58:06 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-06-04 10:58:06 -0400
commitf459c34538f57661e0fd1d3eaf7c0b17125ae011 (patch)
tree3addc82d7f792c4533501978798dad0095293933 /fs
parent29dcea88779c856c7dc92040a0c01233263101d4 (diff)
parent32a50fabb334b2f0725de84bf248bd8c24c22b05 (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.c24
-rw-r--r--fs/btrfs/extent_io.c25
-rw-r--r--fs/direct-io.c4
-rw-r--r--fs/exofs/ore.c10
-rw-r--r--fs/exofs/super.c2
-rw-r--r--fs/nfsd/blocklayout.c2
-rw-r--r--fs/xfs/xfs_aops.c2
-rw-r--r--fs/xfs/xfs_aops.h2
-rw-r--r--fs/xfs/xfs_super.c11
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
275static struct bio_set *blkdev_dio_pool __read_mostly; 275static struct bio_set blkdev_dio_pool;
276 276
277static void blkdev_bio_end_io(struct bio *bio) 277static 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
433static __init int blkdev_init(void) 433static __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}
440module_init(blkdev_init); 437module_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 */
1330void check_disk_size_change(struct gendisk *disk, struct block_device *bdev) 1328void 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}
1345EXPORT_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
27static struct kmem_cache *extent_state_cache; 27static struct kmem_cache *extent_state_cache;
28static struct kmem_cache *extent_buffer_cache; 28static struct kmem_cache *extent_buffer_cache;
29static struct bio_set *btrfs_bioset; 29static struct bio_set btrfs_bioset;
30 30
31static inline bool extent_state_in_tree(const struct extent_state *state) 31static 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
176free_bioset: 175free_bioset:
177 bioset_free(btrfs_bioset); 176 bioset_exit(&btrfs_bioset);
178 btrfs_bioset = NULL;
179 177
180free_buffer_cache: 178free_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
205void extent_io_tree_init(struct extent_io_tree *tree, 202void 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)
229static int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj, 229static 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
21extern struct bio_set *xfs_ioend_bioset; 21extern 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
65static const struct super_operations xfs_super_operations; 65static const struct super_operations xfs_super_operations;
66struct bio_set *xfs_ioend_bioset; 66struct bio_set xfs_ioend_bioset;
67 67
68static struct kset *xfs_kset; /* top-level xfs sysfs dir */ 68static struct kset *xfs_kset; /* top-level xfs sysfs dir */
69#ifdef DEBUG 69#ifdef DEBUG
@@ -1845,10 +1845,9 @@ MODULE_ALIAS_FS("xfs");
1845STATIC int __init 1845STATIC int __init
1846xfs_init_zones(void) 1846xfs_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
2035STATIC int __init 2034STATIC int __init