super.c (f26e8817b235d8764363bffcc9cbfc61867371f2) super.c (be628be09563f8f6e81929efbd7cf3f45c344416)
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,

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

1486 if (c->btree_pages > BTREE_MAX_PAGES)
1487 c->btree_pages = max_t(int, c->btree_pages / 4,
1488 BTREE_MAX_PAGES);
1489
1490 sema_init(&c->sb_write_mutex, 1);
1491 mutex_init(&c->bucket_lock);
1492 init_waitqueue_head(&c->btree_cache_wait);
1493 init_waitqueue_head(&c->bucket_wait);
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,

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

1484 if (c->btree_pages > BTREE_MAX_PAGES)
1485 c->btree_pages = max_t(int, c->btree_pages / 4,
1486 BTREE_MAX_PAGES);
1487
1488 sema_init(&c->sb_write_mutex, 1);
1489 mutex_init(&c->bucket_lock);
1490 init_waitqueue_head(&c->btree_cache_wait);
1491 init_waitqueue_head(&c->bucket_wait);
1492 init_waitqueue_head(&c->gc_wait);
1494 sema_init(&c->uuid_write_mutex, 1);
1495
1496 spin_lock_init(&c->btree_gc_time.lock);
1497 spin_lock_init(&c->btree_split_time.lock);
1498 spin_lock_init(&c->btree_read_time.lock);
1499
1500 bch_moving_init_cache_set(c);
1501

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

1545 struct cache *ca;
1546 struct closure cl;
1547 unsigned i;
1548
1549 closure_init_stack(&cl);
1550
1551 for_each_cache(ca, c, i)
1552 c->nbuckets += ca->sb.nbuckets;
1493 sema_init(&c->uuid_write_mutex, 1);
1494
1495 spin_lock_init(&c->btree_gc_time.lock);
1496 spin_lock_init(&c->btree_split_time.lock);
1497 spin_lock_init(&c->btree_read_time.lock);
1498
1499 bch_moving_init_cache_set(c);
1500

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

1544 struct cache *ca;
1545 struct closure cl;
1546 unsigned i;
1547
1548 closure_init_stack(&cl);
1549
1550 for_each_cache(ca, c, i)
1551 c->nbuckets += ca->sb.nbuckets;
1552 set_gc_sectors(c);
1553
1554 if (CACHE_SYNC(&c->sb)) {
1555 LIST_HEAD(journal);
1556 struct bkey *k;
1557 struct jset *j;
1558
1559 err = "cannot allocate memory for journal";
1560 if (bch_journal_read(c, &journal))

--- 248 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
1553
1554 if (CACHE_SYNC(&c->sb)) {
1555 LIST_HEAD(journal);
1556 struct bkey *k;
1557 struct jset *j;
1558
1559 err = "cannot allocate memory for journal";
1560 if (bch_journal_read(c, &journal))

--- 248 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
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;
1817 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
1818
1819 free = roundup_pow_of_two(ca->sb.nbuckets) >> 10;
1820
1821 if (!init_fifo(&ca->free[RESERVE_BTREE], 8, GFP_KERNEL) ||
1822 !init_fifo_exact(&ca->free[RESERVE_PRIO], prio_buckets(ca), GFP_KERNEL) ||
1823 !init_fifo(&ca->free[RESERVE_MOVINGGC], free, GFP_KERNEL) ||
1824 !init_fifo(&ca->free[RESERVE_NONE], free, GFP_KERNEL) ||
1825 !init_fifo(&ca->free_inc, free << 2, GFP_KERNEL) ||

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

1845 char name[BDEVNAME_SIZE];
1846 const char *err = NULL; /* must be set for any error case */
1847 int ret = 0;
1848
1849 memcpy(&ca->sb, sb, sizeof(struct cache_sb));
1850 ca->bdev = bdev;
1851 ca->bdev->bd_holder = ca;
1852
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;
1853 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 ---
1854 ca->sb_bio.bi_io_vec[0].bv_page = sb_page;
1855 get_page(sb_page);
1856
1857 if (blk_queue_discard(bdev_get_queue(ca->bdev)))
1858 ca->discard = CACHE_DISCARD(&ca->sb);
1859
1860 ret = cache_alloc(ca);
1861 if (ret != 0) {

--- 257 unchanged lines hidden ---