Seeing this patch made me think of a larger cleanup.
Would this be worth adding to the series?
(I incorporated your patch, as I couldn't decide whether
to write mine before or after; I assume it's no problem
to separate whichever way you want to order it.)

Commit comment something like:

Subject: Let clear_obj_pfmemalloc return the modified pointer

All callers fetch it immediately after, so just return the written
value for convenience.

Signed-off-by: George Spelvin <li...@horizon.com>
---
 mm/slab.c | 24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/mm/slab.c b/mm/slab.c
index 388cb1ae6f..7fdc8df104 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -215,9 +215,9 @@ static inline void set_obj_pfmemalloc(void **objp)
        return;
 }
 
-static inline void clear_obj_pfmemalloc(void **objp)
+static inline void *clear_obj_pfmemalloc(void **objp)
 {
-       *objp = (void *)((unsigned long)*objp & ~SLAB_OBJ_PFMEMALLOC);
+       return *objp = (void *)((unsigned long)*objp & ~SLAB_OBJ_PFMEMALLOC);
 }
 
 /*
@@ -809,10 +809,8 @@ static void *__ac_get_obj(struct kmem_cache *cachep, 
struct array_cache *ac,
        if (unlikely(is_obj_pfmemalloc(objp))) {
                struct kmem_cache_node *n;
 
-               if (gfp_pfmemalloc_allowed(flags)) {
-                       clear_obj_pfmemalloc(&objp);
-                       return objp;
-               }
+               if (gfp_pfmemalloc_allowed(flags))
+                       return clear_obj_pfmemalloc(&objp);
 
                /* The caller cannot use PFMEMALLOC objects, find another one */
                for (i = 0; i < ac->avail; i++) {
@@ -833,9 +831,8 @@ static void *__ac_get_obj(struct kmem_cache *cachep, struct 
array_cache *ac,
                if (!list_empty(&n->slabs_free) && force_refill) {
                        struct page *page = virt_to_head_page(objp);
                        ClearPageSlabPfmemalloc(page);
-                       clear_obj_pfmemalloc(&objp);
                        recheck_pfmemalloc_active(cachep, ac);
-                       return objp;
+                       return clear_obj_pfmemalloc(&objp);
                }
 
                /* No !PFMEMALLOC objects available */
@@ -3362,17 +3359,12 @@ static void free_block(struct kmem_cache *cachep, void 
**objpp, int nr_objects,
                       int node)
 {
        int i;
-       struct kmem_cache_node *n;
+       struct kmem_cache_node *n = cachep->node[node];
 
        for (i = 0; i < nr_objects; i++) {
-               void *objp;
-               struct page *page;
-
-               clear_obj_pfmemalloc(&objpp[i]);
-               objp = objpp[i];
+               void *objp = clear_obj_pfmemalloc(&objpp[i]);
+               struct page *page = virt_to_head_page(objp);
 
-               page = virt_to_head_page(objp);
-               n = cachep->node[node];
                list_del(&page->lru);
                check_spinlock_acquired_node(cachep, node);
                slab_put_obj(cachep, page, objp, node);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to