int ss;
struct lafs_inode *li;
+ lafs_checkpoint_lock(fs);
+ lafs_checkpoint_start(fs);
+ if (sb == fs->prime_sb)
+ /* Don't incorporate any more segusage/quota updates. */
+ set_bit(FinalCheckpoint, &fs->fsstate);
+ lafs_checkpoint_unlock_wait(fs);
+ lafs_cluster_wait_all(fs);
+
if (sb == fs->prime_sb) {
int d;
/* This is the main sb, not a snapshot or
* Now that all inodes have been invalidated we can do
* the final checkpoint.
*/
- lafs_checkpoint_lock(fs);
- /* Don't incorporate any more segusage/quota updates. */
- lafs_checkpoint_start(fs);
- set_bit(FinalCheckpoint, &fs->fsstate);
- lafs_checkpoint_unlock_wait(fs);
- lafs_cluster_wait_all(fs);
lafs_close_all_segments(fs);
lafs_empty_segment_table(fs);
lafs_seg_put_all(fs);
/* need to break a circular reference... */
for (ss = 0; ss < fs->maxsnapshot; ss++)
if (fs->ss[ss].root &&
- fs->ss[ss].root->i_sb == sb)
+ fs->ss[ss].root->i_sb == sb) {
+ dprintk("Putting ss %d\n", ss);
+ li = LAFSI(fs->ss[ss].root);
+ if (test_bit(B_Realloc, &li->dblock->b.flags))
+ lafs_dump_tree();
+ iput(fs->ss[ss].root);
+ fs->ss[ss].root = NULL;
break;
- dprintk("Putting ss %d\n", ss);
- li = LAFSI(fs->ss[ss].root);
- if (test_bit(B_Realloc, &li->dblock->b.flags))
- lafs_dump_tree();
- iput(fs->ss[ss].root);
- fs->ss[ss].root = NULL;
+ }
}
static int