]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dlm: switch to GFP_ATOMIC in dlm allocations
authorAlexander Aring <aahringo@redhat.com>
Tue, 2 Apr 2024 19:17:58 +0000 (15:17 -0400)
committerDavid Teigland <teigland@redhat.com>
Tue, 9 Apr 2024 16:43:49 +0000 (11:43 -0500)
Replace GFP_NOFS with GFP_ATOMIC.  Also stop using idr_preload which
uses a non-bh spin_lock.  This is further preparation for softirq
message processing.

Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/lock.c
fs/dlm/memory.c
fs/dlm/recover.c
fs/dlm/requestqueue.c

index 2f94ffc3cf82d74015537d614dc13379d780d49b..d87464614bc5eb494fd470c4ae8466504c4c0900 100644 (file)
@@ -1206,13 +1206,11 @@ static int _create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret,
        INIT_LIST_HEAD(&lkb->lkb_ownqueue);
        INIT_LIST_HEAD(&lkb->lkb_rsb_lookup);
 
-       idr_preload(GFP_NOFS);
        spin_lock(&ls->ls_lkbidr_spin);
        rv = idr_alloc(&ls->ls_lkbidr, lkb, start, end, GFP_NOWAIT);
        if (rv >= 0)
                lkb->lkb_id = rv;
        spin_unlock(&ls->ls_lkbidr_spin);
-       idr_preload_end();
 
        if (rv < 0) {
                log_error(ls, "create_lkb idr error %d", rv);
index ab663ca66acaaf8ca443515a92fdeab5b6b6a05f..15a8b1cee43360a83d36a9df563fa4e75558d845 100644 (file)
@@ -84,7 +84,7 @@ char *dlm_allocate_lvb(struct dlm_ls *ls)
 {
        char *p;
 
-       p = kzalloc(ls->ls_lvblen, GFP_NOFS);
+       p = kzalloc(ls->ls_lvblen, GFP_ATOMIC);
        return p;
 }
 
@@ -97,7 +97,7 @@ struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls)
 {
        struct dlm_rsb *r;
 
-       r = kmem_cache_zalloc(rsb_cache, GFP_NOFS);
+       r = kmem_cache_zalloc(rsb_cache, GFP_ATOMIC);
        return r;
 }
 
@@ -112,7 +112,7 @@ struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls)
 {
        struct dlm_lkb *lkb;
 
-       lkb = kmem_cache_zalloc(lkb_cache, GFP_NOFS);
+       lkb = kmem_cache_zalloc(lkb_cache, GFP_ATOMIC);
        return lkb;
 }
 
index 53917c0aa3c07f8b4edfbe003cd6f0f97f2880b2..ce6dc914cb86da90eb833518a26b1ca70f6b1c6d 100644 (file)
@@ -310,7 +310,6 @@ static int recover_idr_add(struct dlm_rsb *r)
        struct dlm_ls *ls = r->res_ls;
        int rv;
 
-       idr_preload(GFP_NOFS);
        spin_lock(&ls->ls_recover_idr_lock);
        if (r->res_id) {
                rv = -1;
@@ -326,7 +325,6 @@ static int recover_idr_add(struct dlm_rsb *r)
        rv = 0;
 out_unlock:
        spin_unlock(&ls->ls_recover_idr_lock);
-       idr_preload_end();
        return rv;
 }
 
index 892d6ca21e7424f84227718a0ae8064a32301958..c05940afd063217db5785655ba1f0818f08a90d1 100644 (file)
@@ -37,7 +37,7 @@ void dlm_add_requestqueue(struct dlm_ls *ls, int nodeid,
        int length = le16_to_cpu(ms->m_header.h_length) -
                sizeof(struct dlm_message);
 
-       e = kmalloc(sizeof(struct rq_entry) + length, GFP_NOFS);
+       e = kmalloc(sizeof(struct rq_entry) + length, GFP_ATOMIC);
        if (!e) {
                log_print("dlm_add_requestqueue: out of memory len %d", length);
                return;