• T
    block: update add_partition() error handling · 88e34126
    Tejun Heo 提交于
    d805dda4 tried to fix error case handling in add_partition() but had a
    few problems.
    
    * disk->part[] entry is set early and left dangling if operation
      fails.
    
    * Once device initialized, the last put_device() is responsible for
      freeing all the resources.  The failure path freed part_stats and p
      regardless of put_device() causing double free.
    
    * holders subdir holds reference to the disk device, so failure path
      should remove it to release resources properly which was missing.
    
    This patch fixes the above problems and while at it move partition
    slot busy check into add_partition() for completeness and inlines
    holders subdirectory creation.  Using separate function for it just
    obfuscates the code.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: Abdel Benamrouche <draconux@gmail.com>
    Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
    88e34126
check.c 13.1 KB