• Robert Love's avatar
    [SCSI] fcoe: Fix module reference count for vports · 7287fb91
    Robert Love authored
    vports are not grabbing module references but are
    releasing them. This causes the module reference count
    to decrement too many times and it wraps around past 0.
    
    The solution is to do a module_put() in
    fcoe_interface_release() so that the reference is only
    released when the fcoe_interface is released. There is a
    one-to-one relationship between the N_Port and the
    fcoe_interface, so the module reference will only be
    dropped when the N_Port is destroyed
    
    To create symetry in the code this patch moves the
    try_module_get() call into fcoe_interface_create(). This
    means that only the N_Port will grab a reference to the
    module when its corresponding fcoe_interface is created.
    
    This patch also makes it so that the fcoe_interface_create()
    routine encodes any error codes in the fcoe_interface
    pointer returned. This way its caller, fcoe_create(), can
    return an accurate error code.
    Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
    Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
    7287fb91
fcoe.c 72.1 KB