simplifying the "is it mounted" checks for nilfs2
Subsystems (2)
Do you see any problems with just giving nilfs ->drop_inode() instance like this:
int nilfs2_drop_inode(struct inode *inode)
{
if (unlikely(inode->i_ino == NILFS_ROOT_INO))
return true;
return generic_drop_inode(inode);
}
Then nilfs_root will live exactly until we unmount the damn thing, giving us
int nilfs_checkpoint_is_mounted(struct super_block *sb, __u64 cno)
{
struct the_nilfs *nilfs = sb->s_fs_info;
if (cno < 0 || cno > nilfs->ns_cno)
return false;
if (cno >= nilfs_last_cno(nilfs))
return true; /* protect recent checkpoints */
return nilfs_lookup_root(nilfs, cno) != NULL;
}
while the logics in nilfs_mount becoming simply
busy = d_count(s->s_root) > 1;and we don't need to bother with nilfs_try_to_shrink_tree() at all.
I might be missing something, but it looks like that would work... Comments?
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20130705220309.GU4165-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org
Quoted 9 lines · Al Viro
Do you see any problems with just giving nilfs ->drop_inode() instance like this:
intnilfs2_drop_inode(struct inode *inode){ if (unlikely(inode->i_ino == NILFS_ROOT_INO)) return true; return generic_drop_inode(inode); }Then
nilfs_rootwill live exactly until we unmount the damn thing, giving us
... except that it won't be enough ;-/ Nothing to kick dentries out on such ummount of a secondary. Oh, well... I still doubt that have_submounts() makes any sense there, but...
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 11 lines · Al Viro
Quoted 9 lines · Al Viro
Do you see any problems with just giving nilfs ->drop_inode() instance like this:
intnilfs2_drop_inode(struct inode *inode){ if (unlikely(inode->i_ino == NILFS_ROOT_INO)) return true; return generic_drop_inode(inode); }Then
nilfs_rootwill live exactly until we unmount the damn thing, giving us
Quoted 3 lines
... except that it won't be enough ;-/ Nothing to kick dentries out on such ummount of a secondary. Oh, well... I still doubt that
have_submounts()makes any sense there, but...
Yes, the test with nilfs_lookup_root() is not enough because the root dentry of a secondary mount is not shrunk when its mountpoint is unmounted.
Thus the current nilfs_checkpoint_is_mounted() implementation needs to test whether the root dentry of the specified checkpoint is busy (mounted) or not.
Is there any good way to shrink dentries of such subvolumes at the time of their unmount ?
Regards,
Ryusuke Konishi