• Ryusuke Konishi's avatar
    nilfs2: correct exclusion control in nilfs_remount function · e59399d0
    Ryusuke Konishi authored
    nilfs_remount() changes mount state of a superblock instance.  Even
    though nilfs accesses other superblock instances during mount or
    remount, the mount state was not properly protected in
    nilfs_remount().
    
    Moreover, nilfs_remount() has a lock order reversal problem;
    nilfs_get_sb() holds:
    
      1. bdev->bd_mount_sem
      2. sb->s_umount  (sget acquires)
    
    and nilfs_remount() holds:
    
      1. sb->s_umount  (locked by the caller in vfs)
      2. bdev->bd_mount_sem
    
    To avoid these problems, this patch divides a semaphore protecting
    super block instances from nilfs->ns_sem, and applies it to the mount
    state protection in nilfs_remount().
    
    With this change, bd_mount_sem use is removed from nilfs_remount() and
    the lock order reversal will be resolved.  And the new rw-semaphore,
    nilfs->ns_super_sem will properly protect the mount state except the
    modification from nilfs_error function.
    Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    e59399d0
the_nilfs.c 20.2 KB