diff options
author | David Teigland <teigland@redhat.com> | 2009-05-15 11:50:57 -0400 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2009-05-15 12:24:59 -0400 |
commit | 748285ccf7ea76d3d76d0d5f2945ad6fb91f5329 (patch) | |
tree | aeb56a0e18c2f54acccb65e5b6e8ac63f53dfc44 /fs/dlm | |
parent | 391fbdc5d527149578490db2f1619951d91f3561 (diff) |
dlm: use more NOFS allocation
Change some GFP_KERNEL allocations to use either GFP_NOFS or
ls_allocation (when available) which the fs sets to GFP_NOFS.
The point is to prevent allocations from going back into the
cluster fs in places where that might lead to deadlock.
Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm')
-rw-r--r-- | fs/dlm/dir.c | 7 | ||||
-rw-r--r-- | fs/dlm/lowcomms.c | 6 | ||||
-rw-r--r-- | fs/dlm/member.c | 8 | ||||
-rw-r--r-- | fs/dlm/requestqueue.c | 2 |
4 files changed, 12 insertions, 11 deletions
diff --git a/fs/dlm/dir.c b/fs/dlm/dir.c index 858fba14aaa6..c4dfa1dcc86f 100644 --- a/fs/dlm/dir.c +++ b/fs/dlm/dir.c | |||
@@ -49,7 +49,8 @@ static struct dlm_direntry *get_free_de(struct dlm_ls *ls, int len) | |||
49 | spin_unlock(&ls->ls_recover_list_lock); | 49 | spin_unlock(&ls->ls_recover_list_lock); |
50 | 50 | ||
51 | if (!found) | 51 | if (!found) |
52 | de = kzalloc(sizeof(struct dlm_direntry) + len, GFP_KERNEL); | 52 | de = kzalloc(sizeof(struct dlm_direntry) + len, |
53 | ls->ls_allocation); | ||
53 | return de; | 54 | return de; |
54 | } | 55 | } |
55 | 56 | ||
@@ -211,7 +212,7 @@ int dlm_recover_directory(struct dlm_ls *ls) | |||
211 | 212 | ||
212 | dlm_dir_clear(ls); | 213 | dlm_dir_clear(ls); |
213 | 214 | ||
214 | last_name = kmalloc(DLM_RESNAME_MAXLEN, GFP_KERNEL); | 215 | last_name = kmalloc(DLM_RESNAME_MAXLEN, ls->ls_allocation); |
215 | if (!last_name) | 216 | if (!last_name) |
216 | goto out; | 217 | goto out; |
217 | 218 | ||
@@ -322,7 +323,7 @@ static int get_entry(struct dlm_ls *ls, int nodeid, char *name, | |||
322 | if (namelen > DLM_RESNAME_MAXLEN) | 323 | if (namelen > DLM_RESNAME_MAXLEN) |
323 | return -EINVAL; | 324 | return -EINVAL; |
324 | 325 | ||
325 | de = kzalloc(sizeof(struct dlm_direntry) + namelen, GFP_KERNEL); | 326 | de = kzalloc(sizeof(struct dlm_direntry) + namelen, ls->ls_allocation); |
326 | if (!de) | 327 | if (!de) |
327 | return -ENOMEM; | 328 | return -ENOMEM; |
328 | 329 | ||
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 2559a97f0ddc..cdb580a9c7a2 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c | |||
@@ -500,7 +500,7 @@ static void process_sctp_notification(struct connection *con, | |||
500 | return; | 500 | return; |
501 | } | 501 | } |
502 | 502 | ||
503 | new_con = nodeid2con(nodeid, GFP_KERNEL); | 503 | new_con = nodeid2con(nodeid, GFP_NOFS); |
504 | if (!new_con) | 504 | if (!new_con) |
505 | return; | 505 | return; |
506 | 506 | ||
@@ -736,7 +736,7 @@ static int tcp_accept_from_sock(struct connection *con) | |||
736 | * the same time and the connections cross on the wire. | 736 | * the same time and the connections cross on the wire. |
737 | * In this case we store the incoming one in "othercon" | 737 | * In this case we store the incoming one in "othercon" |
738 | */ | 738 | */ |
739 | newcon = nodeid2con(nodeid, GFP_KERNEL); | 739 | newcon = nodeid2con(nodeid, GFP_NOFS); |
740 | if (!newcon) { | 740 | if (!newcon) { |
741 | result = -ENOMEM; | 741 | result = -ENOMEM; |
742 | goto accept_err; | 742 | goto accept_err; |
@@ -746,7 +746,7 @@ static int tcp_accept_from_sock(struct connection *con) | |||
746 | struct connection *othercon = newcon->othercon; | 746 | struct connection *othercon = newcon->othercon; |
747 | 747 | ||
748 | if (!othercon) { | 748 | if (!othercon) { |
749 | othercon = kmem_cache_zalloc(con_cache, GFP_KERNEL); | 749 | othercon = kmem_cache_zalloc(con_cache, GFP_NOFS); |
750 | if (!othercon) { | 750 | if (!othercon) { |
751 | log_print("failed to allocate incoming socket"); | 751 | log_print("failed to allocate incoming socket"); |
752 | mutex_unlock(&newcon->sock_mutex); | 752 | mutex_unlock(&newcon->sock_mutex); |
diff --git a/fs/dlm/member.c b/fs/dlm/member.c index 2afb77051cce..b128775913b2 100644 --- a/fs/dlm/member.c +++ b/fs/dlm/member.c | |||
@@ -48,7 +48,7 @@ static int dlm_add_member(struct dlm_ls *ls, int nodeid) | |||
48 | struct dlm_member *memb; | 48 | struct dlm_member *memb; |
49 | int w, error; | 49 | int w, error; |
50 | 50 | ||
51 | memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL); | 51 | memb = kzalloc(sizeof(struct dlm_member), ls->ls_allocation); |
52 | if (!memb) | 52 | if (!memb) |
53 | return -ENOMEM; | 53 | return -ENOMEM; |
54 | 54 | ||
@@ -143,7 +143,7 @@ static void make_member_array(struct dlm_ls *ls) | |||
143 | 143 | ||
144 | ls->ls_total_weight = total; | 144 | ls->ls_total_weight = total; |
145 | 145 | ||
146 | array = kmalloc(sizeof(int) * total, GFP_KERNEL); | 146 | array = kmalloc(sizeof(int) * total, ls->ls_allocation); |
147 | if (!array) | 147 | if (!array) |
148 | return; | 148 | return; |
149 | 149 | ||
@@ -226,7 +226,7 @@ int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out) | |||
226 | continue; | 226 | continue; |
227 | log_debug(ls, "new nodeid %d is a re-added member", rv->new[i]); | 227 | log_debug(ls, "new nodeid %d is a re-added member", rv->new[i]); |
228 | 228 | ||
229 | memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL); | 229 | memb = kzalloc(sizeof(struct dlm_member), ls->ls_allocation); |
230 | if (!memb) | 230 | if (!memb) |
231 | return -ENOMEM; | 231 | return -ENOMEM; |
232 | memb->nodeid = rv->new[i]; | 232 | memb->nodeid = rv->new[i]; |
@@ -341,7 +341,7 @@ int dlm_ls_start(struct dlm_ls *ls) | |||
341 | int *ids = NULL, *new = NULL; | 341 | int *ids = NULL, *new = NULL; |
342 | int error, ids_count = 0, new_count = 0; | 342 | int error, ids_count = 0, new_count = 0; |
343 | 343 | ||
344 | rv = kzalloc(sizeof(struct dlm_recover), GFP_KERNEL); | 344 | rv = kzalloc(sizeof(struct dlm_recover), ls->ls_allocation); |
345 | if (!rv) | 345 | if (!rv) |
346 | return -ENOMEM; | 346 | return -ENOMEM; |
347 | 347 | ||
diff --git a/fs/dlm/requestqueue.c b/fs/dlm/requestqueue.c index daa4183fbb84..7a2307c08911 100644 --- a/fs/dlm/requestqueue.c +++ b/fs/dlm/requestqueue.c | |||
@@ -35,7 +35,7 @@ void dlm_add_requestqueue(struct dlm_ls *ls, int nodeid, struct dlm_message *ms) | |||
35 | struct rq_entry *e; | 35 | struct rq_entry *e; |
36 | int length = ms->m_header.h_length - sizeof(struct dlm_message); | 36 | int length = ms->m_header.h_length - sizeof(struct dlm_message); |
37 | 37 | ||
38 | e = kmalloc(sizeof(struct rq_entry) + length, GFP_KERNEL); | 38 | e = kmalloc(sizeof(struct rq_entry) + length, ls->ls_allocation); |
39 | if (!e) { | 39 | if (!e) { |
40 | log_print("dlm_add_requestqueue: out of memory len %d", length); | 40 | log_print("dlm_add_requestqueue: out of memory len %d", length); |
41 | return; | 41 | return; |