• Michal Nazarewicz's avatar
    USB: gadget: file_storage: put_device() in error recovery · d9385b63
    Michal Nazarewicz authored
    This commit fixes some issues with File-backed Storage Gadget
    error recovery when registering LUN's devices.
    
    First of all, when device_register() fails the device still
    needs to be put.  However, because lun_release() decreases
    fsg->ref reference counter the counter must be incremented
    beforehand.
    
    Second of all, after any of the device_create_file()s fails,
    device_unregister() is called which in turn (indirectly) calls
    lun_release() which decrements fsg->ref.  So, again, the
    reference counter must be incremented beforehand.
    
    Lastly, if the first or the second device_create_file()
    succeeds, the files are never removed.  To fix it,
    device_remove_file() needs to be called.  This is done by
    simply marking LUN as registered prior to creating files so
    that fsg_unbind() can handle removing files.
    Signed-off-by: default avatarMichal Nazarewicz <mina86@mina86.com>
    Reported-by: default avatarRahul Ruikar <rahul.ruikar@gmail.com>
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    d9385b63
file_storage.c 103 KB