• Krzysztof Opasiak's avatar
    fs: configfs: Add unlocked version of configfs_depend_item() · d79d75b5
    Krzysztof Opasiak authored
    This change is necessary for the SCSI target usb gadget composed with
    configfs. In this case configfs will be used for two different purposes:
    to compose a usb gadget and to configure the target part. If an instance
    of tcm function is created in $CONFIGFS_ROOT/usb_gadget/<gadget>/functions
    a tpg can be created in $CONFIGFS_ROOT/target/usb_gadget/<wwn>/, but after
    a tpg is created the tcm function must not be removed until its
    corresponding tpg is gone. While the configfs_depend/undepend_item() are
    meant exactly for creating this kind of dependencies, they are not suitable
    if the other kernel subsystem happens to be another subsystem in configfs,
    so this patch adds unlocked versions meant for configfs callbacks.
    
    Above description has been provided by:
    Andrzej Pietrasiewicz <andrzej.p@samsung.com>
    
    In configfs_depend_item() we have to consider two possible cases:
    
    1) When we are called to depend another item in the same subsystem
       as caller
    	In this case we should skip locking configfs root as we know
    	that configfs is in valid state and our subsystem will not
    	be unregistered during this call.
    
    2) When we are called to depend item in different subsystem than
       our caller
    	In this case we are also sure that configfs is in valid state
    	but we have to lock root of configfs to avoid unregistration
    	of target's subsystem. As it is other than caller's subsystem,
    	there may be nothing what protects us against unregistration
    	of that subsystem.
    Signed-off-by: default avatarKrzysztof Opasiak <k.opasiak@samsung.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    d79d75b5
dir.c 49.2 KB