super.c (712cba5d87a6c0e980ee5fad45734e189c4d7151) super.c (3a83f4677539bce8eaa2bca9ee9c20e172d7ab04)
1/*
2 * bcache setup/teardown code, and some metadata io - read a superblock and
3 * figure out what to do with it.
4 *
5 * Copyright 2010, 2011 Kent Overstreet <kent.overstreet@gmail.com>
6 * Copyright 2012 Google, Inc.
7 */
8

--- 367 unchanged lines hidden (view full) ---

376static char *uuid_read(struct cache_set *c, struct jset *j, struct closure *cl)
377{
378 struct bkey *k = &j->uuid_bucket;
379
380 if (__bch_btree_ptr_invalid(c, k))
381 return "bad uuid pointer";
382
383 bkey_copy(&c->uuid_bucket, k);
1/*
2 * bcache setup/teardown code, and some metadata io - read a superblock and
3 * figure out what to do with it.
4 *
5 * Copyright 2010, 2011 Kent Overstreet <kent.overstreet@gmail.com>
6 * Copyright 2012 Google, Inc.
7 */
8

--- 367 unchanged lines hidden (view full) ---

376static char *uuid_read(struct cache_set *c, struct jset *j, struct closure *cl)
377{
378 struct bkey *k = &j->uuid_bucket;
379
380 if (__bch_btree_ptr_invalid(c, k))
381 return "bad uuid pointer";
382
383 bkey_copy(&c->uuid_bucket, k);
384 uuid_io(c, REQ_OP_READ, READ_SYNC, k, cl);
384 uuid_io(c, REQ_OP_READ, 0, k, cl);
385
386 if (j->version < BCACHE_JSET_VERSION_UUIDv1) {
387 struct uuid_entry_v0 *u0 = (void *) c->uuids;
388 struct uuid_entry *u1 = (void *) c->uuids;
389 int i;
390
391 closure_sync(cl);
392

--- 202 unchanged lines hidden (view full) ---

595 for (b = ca->buckets;
596 b < ca->buckets + ca->sb.nbuckets;
597 b++, d++) {
598 if (d == end) {
599 ca->prio_buckets[bucket_nr] = bucket;
600 ca->prio_last_buckets[bucket_nr] = bucket;
601 bucket_nr++;
602
385
386 if (j->version < BCACHE_JSET_VERSION_UUIDv1) {
387 struct uuid_entry_v0 *u0 = (void *) c->uuids;
388 struct uuid_entry *u1 = (void *) c->uuids;
389 int i;
390
391 closure_sync(cl);
392

--- 202 unchanged lines hidden (view full) ---

595 for (b = ca->buckets;
596 b < ca->buckets + ca->sb.nbuckets;
597 b++, d++) {
598 if (d == end) {
599 ca->prio_buckets[bucket_nr] = bucket;
600 ca->prio_last_buckets[bucket_nr] = bucket;
601 bucket_nr++;
602
603 prio_io(ca, bucket, REQ_OP_READ, READ_SYNC);
603 prio_io(ca, bucket, REQ_OP_READ, 0);
604
605 if (p->csum != bch_crc64(&p->magic, bucket_bytes(ca) - 8))
606 pr_warn("bad csum reading priorities");
607
608 if (p->magic != pset_magic(&ca->sb))
609 pr_warn("bad magic reading priorities");
610
611 bucket = p->next_bucket;

--- 535 unchanged lines hidden (view full) ---

1147 char name[BDEVNAME_SIZE];
1148 const char *err = "cannot allocate memory";
1149 struct cache_set *c;
1150
1151 memcpy(&dc->sb, sb, sizeof(struct cache_sb));
1152 dc->bdev = bdev;
1153 dc->bdev->bd_holder = dc;
1154
604
605 if (p->csum != bch_crc64(&p->magic, bucket_bytes(ca) - 8))
606 pr_warn("bad csum reading priorities");
607
608 if (p->magic != pset_magic(&ca->sb))
609 pr_warn("bad magic reading priorities");
610
611 bucket = p->next_bucket;

--- 535 unchanged lines hidden (view full) ---

1147 char name[BDEVNAME_SIZE];
1148 const char *err = "cannot allocate memory";
1149 struct cache_set *c;
1150
1151 memcpy(&dc->sb, sb, sizeof(struct cache_sb));
1152 dc->bdev = bdev;
1153 dc->bdev->bd_holder = dc;
1154
1155 bio_init(&dc->sb_bio);
1156 dc->sb_bio.bi_max_vecs = 1;
1157 dc->sb_bio.bi_io_vec = dc->sb_bio.bi_inline_vecs;
1155 bio_init(&dc->sb_bio, dc->sb_bio.bi_inline_vecs, 1);
1158 dc->sb_bio.bi_io_vec[0].bv_page = sb_page;
1159 get_page(sb_page);
1160
1161 if (cached_dev_init(dc, sb->block_size << 9))
1162 goto err;
1163
1164 err = "error creating kobject";
1165 if (kobject_add(&dc->disk.kobj, &part_to_dev(bdev->bd_part)->kobj,

--- 643 unchanged lines hidden (view full) ---

1809static int cache_alloc(struct cache *ca)
1810{
1811 size_t free;
1812 struct bucket *b;
1813
1814 __module_get(THIS_MODULE);
1815 kobject_init(&ca->kobj, &bch_cache_ktype);
1816
1156 dc->sb_bio.bi_io_vec[0].bv_page = sb_page;
1157 get_page(sb_page);
1158
1159 if (cached_dev_init(dc, sb->block_size << 9))
1160 goto err;
1161
1162 err = "error creating kobject";
1163 if (kobject_add(&dc->disk.kobj, &part_to_dev(bdev->bd_part)->kobj,

--- 643 unchanged lines hidden (view full) ---

1807static int cache_alloc(struct cache *ca)
1808{
1809 size_t free;
1810 struct bucket *b;
1811
1812 __module_get(THIS_MODULE);
1813 kobject_init(&ca->kobj, &bch_cache_ktype);
1814
1817 bio_init(&ca->journal.bio);
1818 ca->journal.bio.bi_max_vecs = 8;
1819 ca->journal.bio.bi_io_vec = ca->journal.bio.bi_inline_vecs;
1815 bio_init(&ca->journal.bio, ca->journal.bio.bi_inline_vecs, 8);
1820
1821 free = roundup_pow_of_two(ca->sb.nbuckets) >> 10;
1822
1823 if (!init_fifo(&ca->free[RESERVE_BTREE], 8, GFP_KERNEL) ||
1824 !init_fifo_exact(&ca->free[RESERVE_PRIO], prio_buckets(ca), GFP_KERNEL) ||
1825 !init_fifo(&ca->free[RESERVE_MOVINGGC], free, GFP_KERNEL) ||
1826 !init_fifo(&ca->free[RESERVE_NONE], free, GFP_KERNEL) ||
1827 !init_fifo(&ca->free_inc, free << 2, GFP_KERNEL) ||

--- 19 unchanged lines hidden (view full) ---

1847 char name[BDEVNAME_SIZE];
1848 const char *err = NULL; /* must be set for any error case */
1849 int ret = 0;
1850
1851 memcpy(&ca->sb, sb, sizeof(struct cache_sb));
1852 ca->bdev = bdev;
1853 ca->bdev->bd_holder = ca;
1854
1816
1817 free = roundup_pow_of_two(ca->sb.nbuckets) >> 10;
1818
1819 if (!init_fifo(&ca->free[RESERVE_BTREE], 8, GFP_KERNEL) ||
1820 !init_fifo_exact(&ca->free[RESERVE_PRIO], prio_buckets(ca), GFP_KERNEL) ||
1821 !init_fifo(&ca->free[RESERVE_MOVINGGC], free, GFP_KERNEL) ||
1822 !init_fifo(&ca->free[RESERVE_NONE], free, GFP_KERNEL) ||
1823 !init_fifo(&ca->free_inc, free << 2, GFP_KERNEL) ||

--- 19 unchanged lines hidden (view full) ---

1843 char name[BDEVNAME_SIZE];
1844 const char *err = NULL; /* must be set for any error case */
1845 int ret = 0;
1846
1847 memcpy(&ca->sb, sb, sizeof(struct cache_sb));
1848 ca->bdev = bdev;
1849 ca->bdev->bd_holder = ca;
1850
1855 bio_init(&ca->sb_bio);
1856 ca->sb_bio.bi_max_vecs = 1;
1857 ca->sb_bio.bi_io_vec = ca->sb_bio.bi_inline_vecs;
1851 bio_init(&ca->sb_bio, ca->sb_bio.bi_inline_vecs, 1);
1858 ca->sb_bio.bi_io_vec[0].bv_page = sb_page;
1859 get_page(sb_page);
1860
1861 if (blk_queue_discard(bdev_get_queue(ca->bdev)))
1862 ca->discard = CACHE_DISCARD(&ca->sb);
1863
1864 ret = cache_alloc(ca);
1865 if (ret != 0) {

--- 257 unchanged lines hidden ---
1852 ca->sb_bio.bi_io_vec[0].bv_page = sb_page;
1853 get_page(sb_page);
1854
1855 if (blk_queue_discard(bdev_get_queue(ca->bdev)))
1856 ca->discard = CACHE_DISCARD(&ca->sb);
1857
1858 ret = cache_alloc(ca);
1859 if (ret != 0) {

--- 257 unchanged lines hidden ---