]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/md/bcache/super.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[karo-tx-linux.git] / drivers / md / bcache / super.c
index 849ad441cd76ba6b04ba2fa2aaac51471acdfd67..3a19cbc8b230e5a7b77cafa89427b8e282c251dc 100644 (file)
@@ -58,6 +58,7 @@ static wait_queue_head_t unregister_wait;
 struct workqueue_struct *bcache_wq;
 
 #define BTREE_MAX_PAGES                (256 * 1024 / PAGE_SIZE)
+#define BCACHE_MINORS          16 /* partition support */
 
 /* Superblock */
 
@@ -381,7 +382,7 @@ static char *uuid_read(struct cache_set *c, struct jset *j, struct closure *cl)
                return "bad uuid pointer";
 
        bkey_copy(&c->uuid_bucket, k);
-       uuid_io(c, REQ_OP_READ, READ_SYNC, k, cl);
+       uuid_io(c, REQ_OP_READ, 0, k, cl);
 
        if (j->version < BCACHE_JSET_VERSION_UUIDv1) {
                struct uuid_entry_v0    *u0 = (void *) c->uuids;
@@ -600,7 +601,7 @@ static void prio_read(struct cache *ca, uint64_t bucket)
                        ca->prio_last_buckets[bucket_nr] = bucket;
                        bucket_nr++;
 
-                       prio_io(ca, bucket, REQ_OP_READ, READ_SYNC);
+                       prio_io(ca, bucket, REQ_OP_READ, 0);
 
                        if (p->csum != bch_crc64(&p->magic, bucket_bytes(ca) - 8))
                                pr_warn("bad csum reading priorities");
@@ -783,8 +784,10 @@ static int bcache_device_init(struct bcache_device *d, unsigned block_size,
        if (minor < 0)
                return minor;
 
+       minor *= BCACHE_MINORS;
+
        if (!(d->bio_split = bioset_create(4, offsetof(struct bbio, bio))) ||
-           !(d->disk = alloc_disk(1))) {
+           !(d->disk = alloc_disk(BCACHE_MINORS))) {
                ida_simple_remove(&bcache_minor, minor);
                return -ENOMEM;
        }
@@ -1152,9 +1155,7 @@ static void register_bdev(struct cache_sb *sb, struct page *sb_page,
        dc->bdev = bdev;
        dc->bdev->bd_holder = dc;
 
-       bio_init(&dc->sb_bio);
-       dc->sb_bio.bi_max_vecs  = 1;
-       dc->sb_bio.bi_io_vec    = dc->sb_bio.bi_inline_vecs;
+       bio_init(&dc->sb_bio, dc->sb_bio.bi_inline_vecs, 1);
        dc->sb_bio.bi_io_vec[0].bv_page = sb_page;
        get_page(sb_page);
 
@@ -1491,6 +1492,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
        mutex_init(&c->bucket_lock);
        init_waitqueue_head(&c->btree_cache_wait);
        init_waitqueue_head(&c->bucket_wait);
+       init_waitqueue_head(&c->gc_wait);
        sema_init(&c->uuid_write_mutex, 1);
 
        spin_lock_init(&c->btree_gc_time.lock);
@@ -1550,6 +1552,7 @@ static void run_cache_set(struct cache_set *c)
 
        for_each_cache(ca, c, i)
                c->nbuckets += ca->sb.nbuckets;
+       set_gc_sectors(c);
 
        if (CACHE_SYNC(&c->sb)) {
                LIST_HEAD(journal);
@@ -1814,9 +1817,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_max_vecs = 8;
-       ca->journal.bio.bi_io_vec = ca->journal.bio.bi_inline_vecs;
+       bio_init(&ca->journal.bio, ca->journal.bio.bi_inline_vecs, 8);
 
        free = roundup_pow_of_two(ca->sb.nbuckets) >> 10;
 
@@ -1852,9 +1853,7 @@ static int register_cache(struct cache_sb *sb, struct page *sb_page,
        ca->bdev = bdev;
        ca->bdev->bd_holder = ca;
 
-       bio_init(&ca->sb_bio);
-       ca->sb_bio.bi_max_vecs  = 1;
-       ca->sb_bio.bi_io_vec    = ca->sb_bio.bi_inline_vecs;
+       bio_init(&ca->sb_bio, ca->sb_bio.bi_inline_vecs, 1);
        ca->sb_bio.bi_io_vec[0].bv_page = sb_page;
        get_page(sb_page);