aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/bcache/writeback.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/bcache/writeback.c')
-rw-r--r--drivers/md/bcache/writeback.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 4392f3f38d62..c68de9f12618 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -433,31 +433,17 @@ static int bch_writeback_thread(void *arg)
433 433
434/* Init */ 434/* Init */
435 435
436static int bch_btree_sectors_dirty_init(struct btree *b, struct btree_op *op, 436static int sectors_dirty_init_fn(struct btree_op *op, struct btree *b,
437 struct cached_dev *dc) 437 struct bkey *k)
438{ 438{
439 struct bkey *k; 439 if (KEY_INODE(k) > op->inode)
440 struct btree_iter iter; 440 return MAP_DONE;
441
442 bch_btree_iter_init(b, &iter, &KEY(dc->disk.id, 0, 0));
443 while ((k = bch_btree_iter_next_filter(&iter, b, bch_ptr_bad)))
444 if (!b->level) {
445 if (KEY_INODE(k) > dc->disk.id)
446 break;
447
448 if (KEY_DIRTY(k))
449 bcache_dev_sectors_dirty_add(b->c, dc->disk.id,
450 KEY_START(k),
451 KEY_SIZE(k));
452 } else {
453 btree(sectors_dirty_init, k, b, op, dc);
454 if (KEY_INODE(k) > dc->disk.id)
455 break;
456
457 cond_resched();
458 }
459 441
460 return 0; 442 if (KEY_DIRTY(k))
443 bcache_dev_sectors_dirty_add(b->c, KEY_INODE(k),
444 KEY_START(k), KEY_SIZE(k));
445
446 return MAP_CONTINUE;
461} 447}
462 448
463void bch_sectors_dirty_init(struct cached_dev *dc) 449void bch_sectors_dirty_init(struct cached_dev *dc)
@@ -465,7 +451,10 @@ void bch_sectors_dirty_init(struct cached_dev *dc)
465 struct btree_op op; 451 struct btree_op op;
466 452
467 bch_btree_op_init_stack(&op); 453 bch_btree_op_init_stack(&op);
468 btree_root(sectors_dirty_init, dc->disk.c, &op, dc); 454 op.inode = dc->disk.id;
455
456 bch_btree_map_keys(&op, dc->disk.c, &KEY(op.inode, 0, 0),
457 sectors_dirty_init_fn, 0);
469} 458}
470 459
471int bch_cached_dev_writeback_init(struct cached_dev *dc) 460int bch_cached_dev_writeback_init(struct cached_dev *dc)