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 --- |