diff options
Diffstat (limited to 'drivers/md/bcache/writeback.c')
-rw-r--r-- | drivers/md/bcache/writeback.c | 37 |
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 | ||
436 | static int bch_btree_sectors_dirty_init(struct btree *b, struct btree_op *op, | 436 | static 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 | ||
463 | void bch_sectors_dirty_init(struct cached_dev *dc) | 449 | void 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 | ||
471 | int bch_cached_dev_writeback_init(struct cached_dev *dc) | 460 | int bch_cached_dev_writeback_init(struct cached_dev *dc) |