Files
odroid-linux/include/linux
Dan Williams a95c90f1e2 mm, devm_memremap_pages: fix shutdown handling
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: Dan Williams <dan.j.williams@intel.com>
Fixes: e8d5134833 ("memremap: change devm_memremap_pages interface...")
Reviewed-by: "Jérôme Glisse" <jglisse@redhat.com>
Reported-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-12-28 12:11:47 -08:00
..
2018-11-14 10:56:33 -08:00
2018-12-11 09:57:47 -08:00
2018-10-16 11:13:50 +02:00
2018-12-11 01:04:23 +00:00
2018-11-12 10:33:49 +01:00
2018-05-26 09:16:44 +02:00
2018-06-15 18:10:01 -03:00
2018-11-26 18:41:21 -05:00
2018-11-01 19:59:53 -06:00
2018-10-19 13:24:31 -07:00
2018-09-06 15:12:24 -06:00
2017-11-15 18:21:04 -08:00
2018-10-26 16:26:32 -07:00
2018-06-15 18:10:01 -03:00
2018-03-26 15:09:38 +02:00
2018-08-22 10:52:48 -07:00
2018-12-03 17:40:18 +01:00
2018-11-13 21:55:24 +01:00
2018-01-01 12:40:27 -07:00
2018-09-11 14:11:54 +02:00
2018-07-12 10:04:29 -04:00
2018-07-27 09:57:23 +10:00
2018-06-28 20:32:51 +09:00
2018-10-21 10:46:33 -04:00
2018-12-07 12:59:08 -08:00
2018-03-26 08:53:43 -06:00
2018-06-22 13:43:27 +09:00
2018-04-11 10:28:38 -07:00
2017-11-15 18:21:01 -08:00
2018-07-12 21:35:28 +02:00
2017-12-01 13:09:40 -08:00
2018-11-30 13:29:04 +00:00
2018-04-12 09:41:19 -07:00
2018-06-05 08:50:16 -04:00
2018-06-07 17:34:35 -07:00
2018-04-11 10:28:32 -07:00
2018-06-07 17:34:39 -07:00
2018-03-26 13:14:43 -04:00
2018-03-26 13:14:43 -04:00
2018-10-17 13:56:58 -07:00
2018-08-22 10:52:45 -07:00
2018-01-28 22:17:24 -05:00
2018-01-08 08:22:45 -06:00
2018-07-10 17:22:35 +02:00
2018-01-08 08:22:45 -06:00
2018-06-07 17:34:36 -07:00
2018-10-21 10:46:39 -04:00
2018-09-18 17:52:15 -05:00
2018-07-19 11:34:23 +01:00
2018-10-26 16:26:35 -07:00
2018-12-18 15:11:07 -08:00
2017-11-17 16:10:04 -08:00
2018-07-21 10:43:12 -05:00
2018-10-08 22:53:10 +11:00
2018-08-22 10:52:46 -07:00
2018-05-31 00:13:56 +08:00
2018-12-03 17:11:02 -08:00
2018-07-20 01:11:45 +02:00
2018-08-02 17:33:06 -04:00
2018-05-11 17:28:45 -07:00
2018-09-28 14:20:59 +02:00
2018-09-25 20:17:35 -07:00
2018-03-01 08:33:05 -07:00
2018-06-29 08:48:06 -06:00
2018-06-07 17:34:35 -07:00
2018-07-07 17:25:23 +02:00
2018-07-03 09:20:44 +02:00
2018-08-16 12:14:42 -07:00
2018-01-15 12:07:46 -08:00
2018-06-20 11:35:56 +02:00
2018-09-29 22:47:49 -04:00
2018-02-06 18:32:47 -08:00
2018-10-11 09:16:44 -07:00
2018-09-25 20:33:24 +02:00
2018-10-24 00:41:07 +01:00
2018-02-06 18:32:44 -08:00
2017-12-20 09:53:54 -07:00
2018-09-11 14:11:51 +02:00
2018-05-14 09:51:34 -04:00