Messages in this thread | | | Date | Thu, 03 Jan 2008 20:52:53 +1100 | From | Nigel Cunningham <> | Subject | Re: freeze vs freezer |
| |
Hi.
Oliver Neukum wrote: > Am Donnerstag 03 Januar 2008 schrieb Nigel Cunningham: >> On top of this, I made a (too simple at the moment) freeze_filesystems >> function which iterates through &super_blocks in reverse order, freezing >> fuse filesystems or ordinary ones. I say 'too simple' because it doesn't >> currently allow for the possibility of someone mounting (say) ext3 on >> fuse, but that would just be an extension of what's already done. > > How do you deal with fuse server tasks using other fuse filesystems?
Since they're frozen in reverse order, the dependant one would be frozen first.
> How does freeze_filesystems() look?
Removing my ugly debugging statements, it's currently:
/** * freeze_filesystems - lock all filesystems and force them into a consistent * state */ void freeze_filesystems(int which) { struct super_block *sb;
lockdep_off();
/* * Freeze in reverse order so filesystems dependant upon others are * frozen in the right order (eg. loopback on ext3). */ list_for_each_entry_reverse(sb, &super_blocks, s_list) { if (sb->s_type->fs_flags & FS_IS_FUSE && sb->s_frozen == SB_UNFROZEN && which & FS_FREEZER_FUSE) { sb->s_frozen = SB_FREEZE_TRANS; sb->s_flags |= MS_FROZEN; continue; }
if (!sb->s_root || !sb->s_bdev || (sb->s_frozen == SB_FREEZE_TRANS) || (sb->s_flags & MS_RDONLY) || (sb->s_flags & MS_FROZEN) || !(which & FS_FREEZER_NORMAL)) continue; freeze_bdev(sb->s_bdev); sb->s_flags |= MS_FROZEN; }
lockdep_on(); }
Nigel
| |