| From: Yosry Ahmed <yosry.ahmed@linux.dev> |
| Subject: mm: zpool: remove object mapping APIs |
| Date: Wed, 5 Mar 2025 06:11:31 +0000 |
| |
| zpool_map_handle(), zpool_unmap_handle(), and zpool_can_sleep_mapped() are |
| no longer used. Remove them with the underlying driver callbacks. |
| |
| Link: https://lkml.kernel.org/r/20250305061134.4105762-4-yosry.ahmed@linux.dev |
| Signed-off-by: Yosry Ahmed <yosry.ahmed@linux.dev> |
| Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org> |
| Acked-by: Johannes Weiner <hannes@cmpxchg.org> |
| Acked-by: Nhat Pham <nphamcs@gmail.com> |
| Cc: Chengming Zhou <chengming.zhou@linux.dev> |
| Cc: Herbert Xu <herbert@gondor.apana.org.au> |
| Cc: Minchan Kim <minchan@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| include/linux/zpool.h | 30 ------------------- |
| mm/zpool.c | 61 ---------------------------------------- |
| mm/zsmalloc.c | 27 ----------------- |
| 3 files changed, 118 deletions(-) |
| |
| --- a/include/linux/zpool.h~mm-zpool-remove-object-mapping-apis |
| +++ a/include/linux/zpool.h |
| @@ -13,25 +13,6 @@ |
| |
| struct zpool; |
| |
| -/* |
| - * Control how a handle is mapped. It will be ignored if the |
| - * implementation does not support it. Its use is optional. |
| - * Note that this does not refer to memory protection, it |
| - * refers to how the memory will be copied in/out if copying |
| - * is necessary during mapping; read-write is the safest as |
| - * it copies the existing memory in on map, and copies the |
| - * changed memory back out on unmap. Write-only does not copy |
| - * in the memory and should only be used for initialization. |
| - * If in doubt, use ZPOOL_MM_DEFAULT which is read-write. |
| - */ |
| -enum zpool_mapmode { |
| - ZPOOL_MM_RW, /* normal read-write mapping */ |
| - ZPOOL_MM_RO, /* read-only (no copy-out at unmap time) */ |
| - ZPOOL_MM_WO, /* write-only (no copy-in at map time) */ |
| - |
| - ZPOOL_MM_DEFAULT = ZPOOL_MM_RW |
| -}; |
| - |
| bool zpool_has_pool(char *type); |
| |
| struct zpool *zpool_create_pool(const char *type, const char *name, gfp_t gfp); |
| @@ -47,12 +28,6 @@ int zpool_malloc(struct zpool *pool, siz |
| |
| void zpool_free(struct zpool *pool, unsigned long handle); |
| |
| -void *zpool_map_handle(struct zpool *pool, unsigned long handle, |
| - enum zpool_mapmode mm); |
| - |
| -void zpool_unmap_handle(struct zpool *pool, unsigned long handle); |
| - |
| - |
| void *zpool_obj_read_begin(struct zpool *zpool, unsigned long handle, |
| void *local_copy); |
| |
| @@ -95,11 +70,6 @@ struct zpool_driver { |
| unsigned long *handle); |
| void (*free)(void *pool, unsigned long handle); |
| |
| - bool sleep_mapped; |
| - void *(*map)(void *pool, unsigned long handle, |
| - enum zpool_mapmode mm); |
| - void (*unmap)(void *pool, unsigned long handle); |
| - |
| void *(*obj_read_begin)(void *pool, unsigned long handle, |
| void *local_copy); |
| void (*obj_read_end)(void *pool, unsigned long handle, |
| --- a/mm/zpool.c~mm-zpool-remove-object-mapping-apis |
| +++ a/mm/zpool.c |
| @@ -278,49 +278,6 @@ void zpool_free(struct zpool *zpool, uns |
| } |
| |
| /** |
| - * zpool_map_handle() - Map a previously allocated handle into memory |
| - * @zpool: The zpool that the handle was allocated from |
| - * @handle: The handle to map |
| - * @mapmode: How the memory should be mapped |
| - * |
| - * This maps a previously allocated handle into memory. The @mapmode |
| - * param indicates to the implementation how the memory will be |
| - * used, i.e. read-only, write-only, read-write. If the |
| - * implementation does not support it, the memory will be treated |
| - * as read-write. |
| - * |
| - * This may hold locks, disable interrupts, and/or preemption, |
| - * and the zpool_unmap_handle() must be called to undo those |
| - * actions. The code that uses the mapped handle should complete |
| - * its operations on the mapped handle memory quickly and unmap |
| - * as soon as possible. As the implementation may use per-cpu |
| - * data, multiple handles should not be mapped concurrently on |
| - * any cpu. |
| - * |
| - * Returns: A pointer to the handle's mapped memory area. |
| - */ |
| -void *zpool_map_handle(struct zpool *zpool, unsigned long handle, |
| - enum zpool_mapmode mapmode) |
| -{ |
| - return zpool->driver->map(zpool->pool, handle, mapmode); |
| -} |
| - |
| -/** |
| - * zpool_unmap_handle() - Unmap a previously mapped handle |
| - * @zpool: The zpool that the handle was allocated from |
| - * @handle: The handle to unmap |
| - * |
| - * This unmaps a previously mapped handle. Any locks or other |
| - * actions that the implementation took in zpool_map_handle() |
| - * will be undone here. The memory area returned from |
| - * zpool_map_handle() should no longer be used after this. |
| - */ |
| -void zpool_unmap_handle(struct zpool *zpool, unsigned long handle) |
| -{ |
| - zpool->driver->unmap(zpool->pool, handle); |
| -} |
| - |
| -/** |
| * zpool_obj_read_begin() - Start reading from a previously allocated handle. |
| * @zpool: The zpool that the handle was allocated from |
| * @handle: The handle to read from |
| @@ -381,23 +338,5 @@ u64 zpool_get_total_pages(struct zpool * |
| return zpool->driver->total_pages(zpool->pool); |
| } |
| |
| -/** |
| - * zpool_can_sleep_mapped - Test if zpool can sleep when do mapped. |
| - * @zpool: The zpool to test |
| - * |
| - * Some allocators enter non-preemptible context in ->map() callback (e.g. |
| - * disable pagefaults) and exit that context in ->unmap(), which limits what |
| - * we can do with the mapped object. For instance, we cannot wait for |
| - * asynchronous crypto API to decompress such an object or take mutexes |
| - * since those will call into the scheduler. This function tells us whether |
| - * we use such an allocator. |
| - * |
| - * Returns: true if zpool can sleep; false otherwise. |
| - */ |
| -bool zpool_can_sleep_mapped(struct zpool *zpool) |
| -{ |
| - return zpool->driver->sleep_mapped; |
| -} |
| - |
| MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>"); |
| MODULE_DESCRIPTION("Common API for compressed memory storage"); |
| --- a/mm/zsmalloc.c~mm-zpool-remove-object-mapping-apis |
| +++ a/mm/zsmalloc.c |
| @@ -482,31 +482,6 @@ static void zs_zpool_free(void *pool, un |
| zs_free(pool, handle); |
| } |
| |
| -static void *zs_zpool_map(void *pool, unsigned long handle, |
| - enum zpool_mapmode mm) |
| -{ |
| - enum zs_mapmode zs_mm; |
| - |
| - switch (mm) { |
| - case ZPOOL_MM_RO: |
| - zs_mm = ZS_MM_RO; |
| - break; |
| - case ZPOOL_MM_WO: |
| - zs_mm = ZS_MM_WO; |
| - break; |
| - case ZPOOL_MM_RW: |
| - default: |
| - zs_mm = ZS_MM_RW; |
| - break; |
| - } |
| - |
| - return zs_map_object(pool, handle, zs_mm); |
| -} |
| -static void zs_zpool_unmap(void *pool, unsigned long handle) |
| -{ |
| - zs_unmap_object(pool, handle); |
| -} |
| - |
| static void *zs_zpool_obj_read_begin(void *pool, unsigned long handle, |
| void *local_copy) |
| { |
| @@ -538,8 +513,6 @@ static struct zpool_driver zs_zpool_driv |
| .malloc_support_movable = true, |
| .malloc = zs_zpool_malloc, |
| .free = zs_zpool_free, |
| - .map = zs_zpool_map, |
| - .unmap = zs_zpool_unmap, |
| .obj_read_begin = zs_zpool_obj_read_begin, |
| .obj_read_end = zs_zpool_obj_read_end, |
| .obj_write = zs_zpool_obj_write, |
| _ |