diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2008-11-12 17:49:48 -0500 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2008-12-23 11:15:40 -0500 |
commit | d6d7b702a3a1ca50f7ca2bebaa79c80425156bac (patch) | |
tree | 58399f82a48ca2a02bea7bdadc14925858a8017a | |
parent | 58e20d8d344b0ee083febb18c2b021d2427e56ca (diff) |
dlm: fix up memory allocation flags
Use ls_allocation for memory allocations, which a cluster fs sets to
GFP_NOFS. Use GFP_NOFS for allocations when no lockspace struct is
available. Taking dlm locks needs to avoid calling back into the
cluster fs because write-out can require taking dlm locks.
Cc: Christine Caulfield <ccaulfie@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
-rw-r--r-- | fs/dlm/lowcomms.c | 1 | ||||
-rw-r--r-- | fs/dlm/memory.c | 6 | ||||
-rw-r--r-- | fs/dlm/midcomms.c | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 3962262f991a..1e720316300b 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c | |||
@@ -295,6 +295,7 @@ static int add_sock(struct socket *sock, struct connection *con) | |||
295 | con->sock->sk->sk_write_space = lowcomms_write_space; | 295 | con->sock->sk->sk_write_space = lowcomms_write_space; |
296 | con->sock->sk->sk_state_change = lowcomms_state_change; | 296 | con->sock->sk->sk_state_change = lowcomms_state_change; |
297 | con->sock->sk->sk_user_data = con; | 297 | con->sock->sk->sk_user_data = con; |
298 | con->sock->sk->sk_allocation = GFP_NOFS; | ||
298 | return 0; | 299 | return 0; |
299 | } | 300 | } |
300 | 301 | ||
diff --git a/fs/dlm/memory.c b/fs/dlm/memory.c index 54c14c6d06cb..c1775b84ebab 100644 --- a/fs/dlm/memory.c +++ b/fs/dlm/memory.c | |||
@@ -39,7 +39,7 @@ char *dlm_allocate_lvb(struct dlm_ls *ls) | |||
39 | { | 39 | { |
40 | char *p; | 40 | char *p; |
41 | 41 | ||
42 | p = kzalloc(ls->ls_lvblen, GFP_KERNEL); | 42 | p = kzalloc(ls->ls_lvblen, ls->ls_allocation); |
43 | return p; | 43 | return p; |
44 | } | 44 | } |
45 | 45 | ||
@@ -57,7 +57,7 @@ struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls, int namelen) | |||
57 | 57 | ||
58 | DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,); | 58 | DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,); |
59 | 59 | ||
60 | r = kzalloc(sizeof(*r) + namelen, GFP_KERNEL); | 60 | r = kzalloc(sizeof(*r) + namelen, ls->ls_allocation); |
61 | return r; | 61 | return r; |
62 | } | 62 | } |
63 | 63 | ||
@@ -72,7 +72,7 @@ struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls) | |||
72 | { | 72 | { |
73 | struct dlm_lkb *lkb; | 73 | struct dlm_lkb *lkb; |
74 | 74 | ||
75 | lkb = kmem_cache_zalloc(lkb_cache, GFP_KERNEL); | 75 | lkb = kmem_cache_zalloc(lkb_cache, ls->ls_allocation); |
76 | return lkb; | 76 | return lkb; |
77 | } | 77 | } |
78 | 78 | ||
diff --git a/fs/dlm/midcomms.c b/fs/dlm/midcomms.c index 07ac709f3ed7..f3396c622aec 100644 --- a/fs/dlm/midcomms.c +++ b/fs/dlm/midcomms.c | |||
@@ -112,7 +112,7 @@ int dlm_process_incoming_buffer(int nodeid, const void *base, | |||
112 | ordinary messages). */ | 112 | ordinary messages). */ |
113 | 113 | ||
114 | if (msglen > sizeof(__tmp) && p == &__tmp.p) { | 114 | if (msglen > sizeof(__tmp) && p == &__tmp.p) { |
115 | p = kmalloc(dlm_config.ci_buffer_size, GFP_KERNEL); | 115 | p = kmalloc(dlm_config.ci_buffer_size, GFP_NOFS); |
116 | if (p == NULL) | 116 | if (p == NULL) |
117 | return ret; | 117 | return ret; |
118 | } | 118 | } |