diff options
Diffstat (limited to 'fs/ceph/snap.c')
| -rw-r--r-- | fs/ceph/snap.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c index 39c243acd06..f40b9139e43 100644 --- a/fs/ceph/snap.c +++ b/fs/ceph/snap.c | |||
| @@ -584,10 +584,14 @@ static void queue_realm_cap_snaps(struct ceph_snap_realm *realm) | |||
| 584 | if (lastinode) | 584 | if (lastinode) |
| 585 | iput(lastinode); | 585 | iput(lastinode); |
| 586 | 586 | ||
| 587 | dout("queue_realm_cap_snaps %p %llx children\n", realm, realm->ino); | 587 | list_for_each_entry(child, &realm->children, child_item) { |
| 588 | list_for_each_entry(child, &realm->children, child_item) | 588 | dout("queue_realm_cap_snaps %p %llx queue child %p %llx\n", |
| 589 | queue_realm_cap_snaps(child); | 589 | realm, realm->ino, child, child->ino); |
| 590 | list_del_init(&child->dirty_item); | ||
| 591 | list_add(&child->dirty_item, &realm->dirty_item); | ||
| 592 | } | ||
| 590 | 593 | ||
| 594 | list_del_init(&realm->dirty_item); | ||
| 591 | dout("queue_realm_cap_snaps %p %llx done\n", realm, realm->ino); | 595 | dout("queue_realm_cap_snaps %p %llx done\n", realm, realm->ino); |
| 592 | } | 596 | } |
| 593 | 597 | ||
| @@ -683,7 +687,9 @@ more: | |||
| 683 | * queue cap snaps _after_ we've built the new snap contexts, | 687 | * queue cap snaps _after_ we've built the new snap contexts, |
| 684 | * so that i_head_snapc can be set appropriately. | 688 | * so that i_head_snapc can be set appropriately. |
| 685 | */ | 689 | */ |
| 686 | list_for_each_entry(realm, &dirty_realms, dirty_item) { | 690 | while (!list_empty(&dirty_realms)) { |
| 691 | realm = list_first_entry(&dirty_realms, struct ceph_snap_realm, | ||
| 692 | dirty_item); | ||
| 687 | queue_realm_cap_snaps(realm); | 693 | queue_realm_cap_snaps(realm); |
| 688 | } | 694 | } |
| 689 | 695 | ||
