Skip to content
  • Dan Williams's avatar
    mm, devm_memremap_pages: fix shutdown handling · a95c90f1
    Dan Williams authored
    The last step before devm_memremap_pages() returns success is to allocate
    a release action, devm_memremap_pages_release(), to tear the entire setup
    down.  However, the result from devm_add_action() is not checked.
    
    Checking the error from devm_add_action() is not enough.  The api
    currently relies on the fact that the percpu_ref it is using is killed by
    the time the devm_memremap_pages_release() is run.  Rather than continue
    this awkward situation, offload the responsibility of killing the
    percpu_ref to devm_memremap_pages_release() directly.  This allows
    devm_memremap_pages() to do the right thing relative to init failures and
    shutdown.
    
    Without this change we could fail to register the teardown of
    devm_memremap_pages().  The likelihood of hitting this failure is tiny as
    small memory allocations almost always succeed.  However, the impact of
    the failure is large given any future reconfiguration, or disable/enable,
    of an nvdimm namespace will fail forever as subsequent calls to
    devm_memremap_pages() will fail to setup the pgmap_radix since there will
    be stale entries for the physical address range.
    
    An argument could be made to require that the ->kill() operation be set in
    the @pgmap arg rather than passed in separately.  However, it helps code
    readability, tracking the lifetime of a given instance, to be able to grep
    the kill routine directly at the devm_memremap_pages() call site.
    
    Link: http://lkml.kernel.org/r/154275558526.76910.7535251937849268605.stgit@dwillia2-desk3.amr.corp.intel.com
    
    
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Fixes: e8d51348
    
     ("memremap: change devm_memremap_pages interface...")
    Reviewed-by: default avatar"Jérôme Glisse" <jglisse@redhat.com>
    Reported-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Cc: Balbir Singh <bsingharora@gmail.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a95c90f1