• Dan Williams's avatar
    dax: Introduce alloc_dev_dax_id() · 70aab281
    Dan Williams authored
    The reference counting of dax_region objects is needlessly complicated,
    has lead to confusion [1], and has hidden a bug [2]. Towards cleaning up
    that mess introduce alloc_dev_dax_id() to minimize the holding of a
    dax_region reference to only what dev_dax_release() needs, the
    dax_region->ida.
    
    Part of the reason for the mess was the design to dereference a
    dax_region in all cases in free_dev_dax_id() even if the id was
    statically assigned by the upper level dax_region driver. Remove the
    need to call "is_static(dax_region)" by tracking whether the id is
    dynamic directly in the dev_dax instance itself.
    
    With that flag the dax_region pinning and release per dev_dax instance
    can move to alloc_dev_dax_id() and free_dev_dax_id() respectively.
    
    A follow-on cleanup address the unnecessary references in the dax_region
    setup and drivers.
    
    Fixes: 0f3da14a ("device-dax: introduce 'seed' devices")
    Link: http://lore.kernel.org/r/20221203095858.612027-1-liuyongqiang13@huawei.com [1]
    ...
    70aab281
dax-private.h 3.15 KB