Skip to content
  • Moger, Babu's avatar
    [SCSI] scsi_dh_rdac: Fix for unbalanced reference count · 3569e537
    Moger, Babu authored
    
    
    This patch fixes an unbalanced refcount issue.
    
    Elevating the lock for both kref_put and also for controller node deletion.
    Previously, controller deletion was protected but the not the kref_put. This
    was causing the other thread to pick up the controller structure which was
    already kref'd zero.
    
    This was causing the following WARN_ON and also sometimes panic.
    
    WARNING: at lib/kref.c:43 kref_get+0x2d/0x30() (Not tainted)
    Hardware name: IBM System x3655 -[7985AC1]-
    Modules linked in: fuse scsi_dh_rdac autofs4 nfs lockd fscache nfs_acl
    auth_rpcgss sunrpc 8021q garp stp llc ipv6 ib_srp(U) scsi_transport_srp
    scsi_tgt ib_cm(U) ib_sa(U) ib_uverbs(U) ib_umad(U) mlx4_ib(U) mlx4_core(U)
    ib_mthca(U) ib_mad(U) ib_core(U) dm_mirror dm_region_hash dm_log dm_round_robin
    dm_multipath uinput bnx2 ses enclosure sg ibmpex ibmaem ipmi_msghandler
    serio_raw k8temp hwmon amd64_edac_mod edac_core edac_mce_amd shpchp i2c_piix4
    ext4 mbcache jbd2 sr_mod cdrom sd_mod crc_t10dif sata_svw pata_acpi ata_generic
    pata_serverworks aacraid radeon ttm drm_kms_helper drm i2c_algo_bit i2c_core
    dm_mod [last unloaded: freq_table]
    Pid: 13735, comm: srp_daemon Not tainted 2.6.32-71.el6.x86_64 #1
    Call Trace:
    [<ffffffff8106b857>] warn_slowpath_common+0x87/0xc0
    [<ffffffff8106b8aa>] warn_slowpath_null+0x1a/0x20
    [<ffffffff8125c39d>] kref_get+0x2d/0x30
    [<ffffffffa01b4029>] rdac_bus_attach+0x459/0x580 [scsi_dh_rdac]
    [<ffffffff8135232a>] scsi_dh_handler_attach+0x2a/0x80
    [<ffffffff81352c7b>] scsi_dh_notifier+0x9b/0xa0
    [<ffffffff814cd7a5>] notifier_call_chain+0x55/0x80
    [<ffffffff8109711a>] __blocking_notifier_call_chain+0x5a/0x80
    [<ffffffff81097156>] blocking_notifier_call_chain+0x16/0x20
    [<ffffffff8132bec5>] device_add+0x515/0x640
    [<ffffffff813329e4>] ? attribute_container_device_trigger+0xc4/0xe0
    [<ffffffff8134f659>] scsi_sysfs_add_sdev+0x89/0x2c0
    [<ffffffff8134d096>] scsi_probe_and_add_lun+0xea6/0xed0
    [<ffffffff8134beb2>] ? scsi_alloc_target+0x292/0x2d0
    [<ffffffff8134d1e1>] __scsi_scan_target+0x121/0x750
    [<ffffffff811df806>] ? sysfs_create_file+0x26/0x30
    [<ffffffff8132b759>] ? device_create_file+0x19/0x20
    [<ffffffff81332838>] ? attribute_container_add_attrs+0x78/0x90
    [<ffffffff814b008c>] ? klist_next+0x4c/0xf0
    [<ffffffff81332e30>] ? transport_configure+0x0/0x20
    [<ffffffff813329e4>] ? attribute_container_device_trigger+0xc4/0xe0
    [<ffffffff8134df40>] scsi_scan_target+0xd0/0xe0
    [<ffffffffa02f053a>] srp_create_target+0x75a/0x890 [ib_srp]
    [<ffffffff8132a130>] dev_attr_store+0x20/0x30
    [<ffffffff811df145>] sysfs_write_file+0xe5/0x170
    [<ffffffff8116c818>] vfs_write+0xb8/0x1a0
    [<ffffffff810d40a2>] ? audit_syscall_entry+0x272/0x2a0
    [<ffffffff8116d251>] sys_write+0x51/0x90
    [<ffffffff81013172>] system_call_fastpath+0x16/0x1b
    
    Signed-off-by: default avatarBabu Moger <babu.moger@netapp.com>
    Acked-by: default avatarMike Snitzer <snitzer@redhat.com>
    Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
    3569e537