• V
    nilfs2: integrate sysfs support into driver · dd70edbd
    Vyacheslav Dubeyko 提交于
    This patch integrates creation of sysfs groups and
    attributes into NILFS file system driver.
    
    It was found the issue with nilfs_sysfs_{create/delete}_snapshot_group
    functions by Michael L Semon <mlsemon35@gmail.com> in the first
    version of the patch:
    
      BUG: sleeping function called from invalid context at kernel/locking/mutex.c:579
      in_atomic(): 1, irqs_disabled(): 0, pid: 32676, name: umount.nilfs2
      2 locks held by umount.nilfs2/32676:
       #0:  (&type->s_umount_key#21){++++..}, at: [<790c18e2>] deactivate_super+0x37/0x58
       #1:  (&(&nilfs->ns_cptree_lock)->rlock){+.+...}, at: [<791bf659>] nilfs_put_root+0x23/0x5a
      Preemption disabled at:[<791bf659>] nilfs_put_root+0x23/0x5a
    
      CPU: 0 PID: 32676 Comm: umount.nilfs2 Not tainted 3.14.0+ #2
      Hardware name: Dell Computer Corporation Dimension 2350/07W080, BIOS A01 12/17/2002
      Call Trace:
        dump_stack+0x4b/0x75
        __might_sleep+0x111/0x16f
        mutex_lock_nested+0x1e/0x3ad
        kernfs_remove+0x12/0x26
        sysfs_remove_dir+0x3d/0x62
        kobject_del+0x13/0x38
        nilfs_sysfs_delete_snapshot_group+0xb/0xd
        nilfs_put_root+0x2a/0x5a
        nilfs_detach_log_writer+0x1ab/0x2c1
        nilfs_put_super+0x13/0x68
        generic_shutdown_super+0x60/0xd1
        kill_block_super+0x1d/0x60
        deactivate_locked_super+0x22/0x3f
        deactivate_super+0x3e/0x58
        mntput_no_expire+0xe2/0x141
        SyS_oldumount+0x70/0xa5
        syscall_call+0x7/0xb
    
    The reason of the issue was placement of
    nilfs_sysfs_{create/delete}_snapshot_group() call under
    nilfs->ns_cptree_lock protection.  But this protection is unnecessary and
    wrong solution.  The second version of the patch fixes this issue.
    
    [fengguang.wu@intel.com: nilfs_sysfs_create_mounted_snapshots_group can be static]
    Reported-by: NMichael L. Semon <mlsemon35@gmail.com>
    Signed-off-by: NVyacheslav Dubeyko <Vyacheslav.Dubeyko@hgst.com>
    Cc: Vyacheslav Dubeyko <slava@dubeyko.com>
    Cc: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
    Tested-by: NMichael L. Semon <mlsemon35@gmail.com>
    Signed-off-by: NFengguang Wu <fengguang.wu@intel.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    dd70edbd
super.c 36.0 KB