提交 573c24c4 编写于 作者: D David Teigland

dlm: always use GFP_NOFS

Replace all GFP_KERNEL and ls_allocation with GFP_NOFS.
ls_allocation would be GFP_KERNEL for userland lockspaces
and GFP_NOFS for file system lockspaces.

It was discovered that any lockspaces on the system can
affect all others by triggering memory reclaim in the
file system which could in turn call back into the dlm
to acquire locks, deadlocking dlm threads that were
shared by all lockspaces, like dlm_recv.
Signed-off-by: NDavid Teigland <teigland@redhat.com>
上级 a8a8a669
...@@ -410,10 +410,10 @@ static struct config_group *make_cluster(struct config_group *g, ...@@ -410,10 +410,10 @@ static struct config_group *make_cluster(struct config_group *g,
struct dlm_comms *cms = NULL; struct dlm_comms *cms = NULL;
void *gps = NULL; void *gps = NULL;
cl = kzalloc(sizeof(struct dlm_cluster), GFP_KERNEL); cl = kzalloc(sizeof(struct dlm_cluster), GFP_NOFS);
gps = kcalloc(3, sizeof(struct config_group *), GFP_KERNEL); gps = kcalloc(3, sizeof(struct config_group *), GFP_NOFS);
sps = kzalloc(sizeof(struct dlm_spaces), GFP_KERNEL); sps = kzalloc(sizeof(struct dlm_spaces), GFP_NOFS);
cms = kzalloc(sizeof(struct dlm_comms), GFP_KERNEL); cms = kzalloc(sizeof(struct dlm_comms), GFP_NOFS);
if (!cl || !gps || !sps || !cms) if (!cl || !gps || !sps || !cms)
goto fail; goto fail;
...@@ -482,9 +482,9 @@ static struct config_group *make_space(struct config_group *g, const char *name) ...@@ -482,9 +482,9 @@ static struct config_group *make_space(struct config_group *g, const char *name)
struct dlm_nodes *nds = NULL; struct dlm_nodes *nds = NULL;
void *gps = NULL; void *gps = NULL;
sp = kzalloc(sizeof(struct dlm_space), GFP_KERNEL); sp = kzalloc(sizeof(struct dlm_space), GFP_NOFS);
gps = kcalloc(2, sizeof(struct config_group *), GFP_KERNEL); gps = kcalloc(2, sizeof(struct config_group *), GFP_NOFS);
nds = kzalloc(sizeof(struct dlm_nodes), GFP_KERNEL); nds = kzalloc(sizeof(struct dlm_nodes), GFP_NOFS);
if (!sp || !gps || !nds) if (!sp || !gps || !nds)
goto fail; goto fail;
...@@ -536,7 +536,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name) ...@@ -536,7 +536,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name)
{ {
struct dlm_comm *cm; struct dlm_comm *cm;
cm = kzalloc(sizeof(struct dlm_comm), GFP_KERNEL); cm = kzalloc(sizeof(struct dlm_comm), GFP_NOFS);
if (!cm) if (!cm)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
...@@ -569,7 +569,7 @@ static struct config_item *make_node(struct config_group *g, const char *name) ...@@ -569,7 +569,7 @@ static struct config_item *make_node(struct config_group *g, const char *name)
struct dlm_space *sp = config_item_to_space(g->cg_item.ci_parent); struct dlm_space *sp = config_item_to_space(g->cg_item.ci_parent);
struct dlm_node *nd; struct dlm_node *nd;
nd = kzalloc(sizeof(struct dlm_node), GFP_KERNEL); nd = kzalloc(sizeof(struct dlm_node), GFP_NOFS);
if (!nd) if (!nd)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
...@@ -705,7 +705,7 @@ static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len) ...@@ -705,7 +705,7 @@ static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len)
if (cm->addr_count >= DLM_MAX_ADDR_COUNT) if (cm->addr_count >= DLM_MAX_ADDR_COUNT)
return -ENOSPC; return -ENOSPC;
addr = kzalloc(sizeof(*addr), GFP_KERNEL); addr = kzalloc(sizeof(*addr), GFP_NOFS);
if (!addr) if (!addr)
return -ENOMEM; return -ENOMEM;
...@@ -868,7 +868,7 @@ int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out, ...@@ -868,7 +868,7 @@ int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out,
ids_count = sp->members_count; ids_count = sp->members_count;
ids = kcalloc(ids_count, sizeof(int), GFP_KERNEL); ids = kcalloc(ids_count, sizeof(int), GFP_NOFS);
if (!ids) { if (!ids) {
rv = -ENOMEM; rv = -ENOMEM;
goto out; goto out;
...@@ -886,7 +886,7 @@ int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out, ...@@ -886,7 +886,7 @@ int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out,
if (!new_count) if (!new_count)
goto out_ids; goto out_ids;
new = kcalloc(new_count, sizeof(int), GFP_KERNEL); new = kcalloc(new_count, sizeof(int), GFP_NOFS);
if (!new) { if (!new) {
kfree(ids); kfree(ids);
rv = -ENOMEM; rv = -ENOMEM;
......
...@@ -404,7 +404,7 @@ static void *table_seq_start(struct seq_file *seq, loff_t *pos) ...@@ -404,7 +404,7 @@ static void *table_seq_start(struct seq_file *seq, loff_t *pos)
if (bucket >= ls->ls_rsbtbl_size) if (bucket >= ls->ls_rsbtbl_size)
return NULL; return NULL;
ri = kzalloc(sizeof(struct rsbtbl_iter), GFP_KERNEL); ri = kzalloc(sizeof(struct rsbtbl_iter), GFP_NOFS);
if (!ri) if (!ri)
return NULL; return NULL;
if (n == 0) if (n == 0)
......
...@@ -49,8 +49,7 @@ static struct dlm_direntry *get_free_de(struct dlm_ls *ls, int len) ...@@ -49,8 +49,7 @@ static struct dlm_direntry *get_free_de(struct dlm_ls *ls, int len)
spin_unlock(&ls->ls_recover_list_lock); spin_unlock(&ls->ls_recover_list_lock);
if (!found) if (!found)
de = kzalloc(sizeof(struct dlm_direntry) + len, de = kzalloc(sizeof(struct dlm_direntry) + len, GFP_NOFS);
ls->ls_allocation);
return de; return de;
} }
...@@ -212,7 +211,7 @@ int dlm_recover_directory(struct dlm_ls *ls) ...@@ -212,7 +211,7 @@ int dlm_recover_directory(struct dlm_ls *ls)
dlm_dir_clear(ls); dlm_dir_clear(ls);
last_name = kmalloc(DLM_RESNAME_MAXLEN, ls->ls_allocation); last_name = kmalloc(DLM_RESNAME_MAXLEN, GFP_NOFS);
if (!last_name) if (!last_name)
goto out; goto out;
...@@ -323,7 +322,7 @@ static int get_entry(struct dlm_ls *ls, int nodeid, char *name, ...@@ -323,7 +322,7 @@ static int get_entry(struct dlm_ls *ls, int nodeid, char *name,
if (namelen > DLM_RESNAME_MAXLEN) if (namelen > DLM_RESNAME_MAXLEN)
return -EINVAL; return -EINVAL;
de = kzalloc(sizeof(struct dlm_direntry) + namelen, ls->ls_allocation); de = kzalloc(sizeof(struct dlm_direntry) + namelen, GFP_NOFS);
if (!de) if (!de)
return -ENOMEM; return -ENOMEM;
......
...@@ -473,7 +473,6 @@ struct dlm_ls { ...@@ -473,7 +473,6 @@ struct dlm_ls {
int ls_low_nodeid; int ls_low_nodeid;
int ls_total_weight; int ls_total_weight;
int *ls_node_array; int *ls_node_array;
gfp_t ls_allocation;
struct dlm_rsb ls_stub_rsb; /* for returning errors */ struct dlm_rsb ls_stub_rsb; /* for returning errors */
struct dlm_lkb ls_stub_lkb; /* for returning errors */ struct dlm_lkb ls_stub_lkb; /* for returning errors */
......
...@@ -2689,7 +2689,7 @@ static int _create_message(struct dlm_ls *ls, int mb_len, ...@@ -2689,7 +2689,7 @@ static int _create_message(struct dlm_ls *ls, int mb_len,
pass into lowcomms_commit and a message buffer (mb) that we pass into lowcomms_commit and a message buffer (mb) that we
write our data into */ write our data into */
mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, ls->ls_allocation, &mb); mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, GFP_NOFS, &mb);
if (!mh) if (!mh)
return -ENOBUFS; return -ENOBUFS;
...@@ -4512,7 +4512,7 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua, ...@@ -4512,7 +4512,7 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua,
} }
if (flags & DLM_LKF_VALBLK) { if (flags & DLM_LKF_VALBLK) {
ua->lksb.sb_lvbptr = kzalloc(DLM_USER_LVB_LEN, GFP_KERNEL); ua->lksb.sb_lvbptr = kzalloc(DLM_USER_LVB_LEN, GFP_NOFS);
if (!ua->lksb.sb_lvbptr) { if (!ua->lksb.sb_lvbptr) {
kfree(ua); kfree(ua);
__put_lkb(ls, lkb); __put_lkb(ls, lkb);
...@@ -4582,7 +4582,7 @@ int dlm_user_convert(struct dlm_ls *ls, struct dlm_user_args *ua_tmp, ...@@ -4582,7 +4582,7 @@ int dlm_user_convert(struct dlm_ls *ls, struct dlm_user_args *ua_tmp,
ua = lkb->lkb_ua; ua = lkb->lkb_ua;
if (flags & DLM_LKF_VALBLK && !ua->lksb.sb_lvbptr) { if (flags & DLM_LKF_VALBLK && !ua->lksb.sb_lvbptr) {
ua->lksb.sb_lvbptr = kzalloc(DLM_USER_LVB_LEN, GFP_KERNEL); ua->lksb.sb_lvbptr = kzalloc(DLM_USER_LVB_LEN, GFP_NOFS);
if (!ua->lksb.sb_lvbptr) { if (!ua->lksb.sb_lvbptr) {
error = -ENOMEM; error = -ENOMEM;
goto out_put; goto out_put;
......
...@@ -430,7 +430,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace, ...@@ -430,7 +430,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
error = -ENOMEM; error = -ENOMEM;
ls = kzalloc(sizeof(struct dlm_ls) + namelen, GFP_KERNEL); ls = kzalloc(sizeof(struct dlm_ls) + namelen, GFP_NOFS);
if (!ls) if (!ls)
goto out; goto out;
memcpy(ls->ls_name, name, namelen); memcpy(ls->ls_name, name, namelen);
...@@ -443,11 +443,6 @@ static int new_lockspace(const char *name, int namelen, void **lockspace, ...@@ -443,11 +443,6 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
if (flags & DLM_LSFL_TIMEWARN) if (flags & DLM_LSFL_TIMEWARN)
set_bit(LSFL_TIMEWARN, &ls->ls_flags); set_bit(LSFL_TIMEWARN, &ls->ls_flags);
if (flags & DLM_LSFL_FS)
ls->ls_allocation = GFP_NOFS;
else
ls->ls_allocation = GFP_KERNEL;
/* ls_exflags are forced to match among nodes, and we don't /* ls_exflags are forced to match among nodes, and we don't
need to require all nodes to have some flags set */ need to require all nodes to have some flags set */
ls->ls_exflags = (flags & ~(DLM_LSFL_TIMEWARN | DLM_LSFL_FS | ls->ls_exflags = (flags & ~(DLM_LSFL_TIMEWARN | DLM_LSFL_FS |
...@@ -456,7 +451,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace, ...@@ -456,7 +451,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
size = dlm_config.ci_rsbtbl_size; size = dlm_config.ci_rsbtbl_size;
ls->ls_rsbtbl_size = size; ls->ls_rsbtbl_size = size;
ls->ls_rsbtbl = kmalloc(sizeof(struct dlm_rsbtable) * size, GFP_KERNEL); ls->ls_rsbtbl = kmalloc(sizeof(struct dlm_rsbtable) * size, GFP_NOFS);
if (!ls->ls_rsbtbl) if (!ls->ls_rsbtbl)
goto out_lsfree; goto out_lsfree;
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
...@@ -468,7 +463,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace, ...@@ -468,7 +463,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
size = dlm_config.ci_lkbtbl_size; size = dlm_config.ci_lkbtbl_size;
ls->ls_lkbtbl_size = size; ls->ls_lkbtbl_size = size;
ls->ls_lkbtbl = kmalloc(sizeof(struct dlm_lkbtable) * size, GFP_KERNEL); ls->ls_lkbtbl = kmalloc(sizeof(struct dlm_lkbtable) * size, GFP_NOFS);
if (!ls->ls_lkbtbl) if (!ls->ls_lkbtbl)
goto out_rsbfree; goto out_rsbfree;
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
...@@ -480,7 +475,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace, ...@@ -480,7 +475,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
size = dlm_config.ci_dirtbl_size; size = dlm_config.ci_dirtbl_size;
ls->ls_dirtbl_size = size; ls->ls_dirtbl_size = size;
ls->ls_dirtbl = kmalloc(sizeof(struct dlm_dirtable) * size, GFP_KERNEL); ls->ls_dirtbl = kmalloc(sizeof(struct dlm_dirtable) * size, GFP_NOFS);
if (!ls->ls_dirtbl) if (!ls->ls_dirtbl)
goto out_lkbfree; goto out_lkbfree;
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
...@@ -527,7 +522,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace, ...@@ -527,7 +522,7 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
mutex_init(&ls->ls_requestqueue_mutex); mutex_init(&ls->ls_requestqueue_mutex);
mutex_init(&ls->ls_clear_proc_locks); mutex_init(&ls->ls_clear_proc_locks);
ls->ls_recover_buf = kmalloc(dlm_config.ci_buffer_size, GFP_KERNEL); ls->ls_recover_buf = kmalloc(dlm_config.ci_buffer_size, GFP_NOFS);
if (!ls->ls_recover_buf) if (!ls->ls_recover_buf)
goto out_dirfree; goto out_dirfree;
......
...@@ -1060,7 +1060,7 @@ static void init_local(void) ...@@ -1060,7 +1060,7 @@ static void init_local(void)
if (dlm_our_addr(&sas, i)) if (dlm_our_addr(&sas, i))
break; break;
addr = kmalloc(sizeof(*addr), GFP_KERNEL); addr = kmalloc(sizeof(*addr), GFP_NOFS);
if (!addr) if (!addr)
break; break;
memcpy(addr, &sas, sizeof(*addr)); memcpy(addr, &sas, sizeof(*addr));
...@@ -1099,7 +1099,7 @@ static int sctp_listen_for_all(void) ...@@ -1099,7 +1099,7 @@ static int sctp_listen_for_all(void)
struct sockaddr_storage localaddr; struct sockaddr_storage localaddr;
struct sctp_event_subscribe subscribe; struct sctp_event_subscribe subscribe;
int result = -EINVAL, num = 1, i, addr_len; int result = -EINVAL, num = 1, i, addr_len;
struct connection *con = nodeid2con(0, GFP_KERNEL); struct connection *con = nodeid2con(0, GFP_NOFS);
int bufsize = NEEDED_RMEM; int bufsize = NEEDED_RMEM;
if (!con) if (!con)
...@@ -1171,7 +1171,7 @@ static int sctp_listen_for_all(void) ...@@ -1171,7 +1171,7 @@ static int sctp_listen_for_all(void)
static int tcp_listen_for_all(void) static int tcp_listen_for_all(void)
{ {
struct socket *sock = NULL; struct socket *sock = NULL;
struct connection *con = nodeid2con(0, GFP_KERNEL); struct connection *con = nodeid2con(0, GFP_NOFS);
int result = -EINVAL; int result = -EINVAL;
if (!con) if (!con)
......
...@@ -48,7 +48,7 @@ static int dlm_add_member(struct dlm_ls *ls, int nodeid) ...@@ -48,7 +48,7 @@ static int dlm_add_member(struct dlm_ls *ls, int nodeid)
struct dlm_member *memb; struct dlm_member *memb;
int w, error; int w, error;
memb = kzalloc(sizeof(struct dlm_member), ls->ls_allocation); memb = kzalloc(sizeof(struct dlm_member), GFP_NOFS);
if (!memb) if (!memb)
return -ENOMEM; return -ENOMEM;
...@@ -143,7 +143,7 @@ static void make_member_array(struct dlm_ls *ls) ...@@ -143,7 +143,7 @@ static void make_member_array(struct dlm_ls *ls)
ls->ls_total_weight = total; ls->ls_total_weight = total;
array = kmalloc(sizeof(int) * total, ls->ls_allocation); array = kmalloc(sizeof(int) * total, GFP_NOFS);
if (!array) if (!array)
return; return;
...@@ -226,7 +226,7 @@ int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out) ...@@ -226,7 +226,7 @@ int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out)
continue; continue;
log_debug(ls, "new nodeid %d is a re-added member", rv->new[i]); log_debug(ls, "new nodeid %d is a re-added member", rv->new[i]);
memb = kzalloc(sizeof(struct dlm_member), ls->ls_allocation); memb = kzalloc(sizeof(struct dlm_member), GFP_NOFS);
if (!memb) if (!memb)
return -ENOMEM; return -ENOMEM;
memb->nodeid = rv->new[i]; memb->nodeid = rv->new[i];
...@@ -341,7 +341,7 @@ int dlm_ls_start(struct dlm_ls *ls) ...@@ -341,7 +341,7 @@ int dlm_ls_start(struct dlm_ls *ls)
int *ids = NULL, *new = NULL; int *ids = NULL, *new = NULL;
int error, ids_count = 0, new_count = 0; int error, ids_count = 0, new_count = 0;
rv = kzalloc(sizeof(struct dlm_recover), ls->ls_allocation); rv = kzalloc(sizeof(struct dlm_recover), GFP_NOFS);
if (!rv) if (!rv)
return -ENOMEM; return -ENOMEM;
......
...@@ -39,7 +39,7 @@ char *dlm_allocate_lvb(struct dlm_ls *ls) ...@@ -39,7 +39,7 @@ char *dlm_allocate_lvb(struct dlm_ls *ls)
{ {
char *p; char *p;
p = kzalloc(ls->ls_lvblen, ls->ls_allocation); p = kzalloc(ls->ls_lvblen, GFP_NOFS);
return p; return p;
} }
...@@ -57,7 +57,7 @@ struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls, int namelen) ...@@ -57,7 +57,7 @@ struct dlm_rsb *dlm_allocate_rsb(struct dlm_ls *ls, int namelen)
DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,); DLM_ASSERT(namelen <= DLM_RESNAME_MAXLEN,);
r = kzalloc(sizeof(*r) + namelen, ls->ls_allocation); r = kzalloc(sizeof(*r) + namelen, GFP_NOFS);
return r; return r;
} }
...@@ -72,7 +72,7 @@ struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls) ...@@ -72,7 +72,7 @@ struct dlm_lkb *dlm_allocate_lkb(struct dlm_ls *ls)
{ {
struct dlm_lkb *lkb; struct dlm_lkb *lkb;
lkb = kmem_cache_zalloc(lkb_cache, ls->ls_allocation); lkb = kmem_cache_zalloc(lkb_cache, GFP_NOFS);
return lkb; return lkb;
} }
......
...@@ -26,7 +26,7 @@ static int prepare_data(u8 cmd, struct sk_buff **skbp, size_t size) ...@@ -26,7 +26,7 @@ static int prepare_data(u8 cmd, struct sk_buff **skbp, size_t size)
struct sk_buff *skb; struct sk_buff *skb;
void *data; void *data;
skb = genlmsg_new(size, GFP_KERNEL); skb = genlmsg_new(size, GFP_NOFS);
if (!skb) if (!skb)
return -ENOMEM; return -ENOMEM;
......
...@@ -82,7 +82,7 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file, ...@@ -82,7 +82,7 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
if (!ls) if (!ls)
return -EINVAL; return -EINVAL;
xop = kzalloc(sizeof(*xop), GFP_KERNEL); xop = kzalloc(sizeof(*xop), GFP_NOFS);
if (!xop) { if (!xop) {
rv = -ENOMEM; rv = -ENOMEM;
goto out; goto out;
...@@ -211,7 +211,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file, ...@@ -211,7 +211,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
if (!ls) if (!ls)
return -EINVAL; return -EINVAL;
op = kzalloc(sizeof(*op), GFP_KERNEL); op = kzalloc(sizeof(*op), GFP_NOFS);
if (!op) { if (!op) {
rv = -ENOMEM; rv = -ENOMEM;
goto out; goto out;
...@@ -266,7 +266,7 @@ int dlm_posix_get(dlm_lockspace_t *lockspace, u64 number, struct file *file, ...@@ -266,7 +266,7 @@ int dlm_posix_get(dlm_lockspace_t *lockspace, u64 number, struct file *file,
if (!ls) if (!ls)
return -EINVAL; return -EINVAL;
op = kzalloc(sizeof(*op), GFP_KERNEL); op = kzalloc(sizeof(*op), GFP_NOFS);
if (!op) { if (!op) {
rv = -ENOMEM; rv = -ENOMEM;
goto out; goto out;
......
...@@ -38,7 +38,7 @@ static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len, ...@@ -38,7 +38,7 @@ static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
char *mb; char *mb;
int mb_len = sizeof(struct dlm_rcom) + len; int mb_len = sizeof(struct dlm_rcom) + len;
mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, ls->ls_allocation, &mb); mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, GFP_NOFS, &mb);
if (!mh) { if (!mh) {
log_print("create_rcom to %d type %d len %d ENOBUFS", log_print("create_rcom to %d type %d len %d ENOBUFS",
to_nodeid, type, len); to_nodeid, type, len);
......
...@@ -35,7 +35,7 @@ void dlm_add_requestqueue(struct dlm_ls *ls, int nodeid, struct dlm_message *ms) ...@@ -35,7 +35,7 @@ void dlm_add_requestqueue(struct dlm_ls *ls, int nodeid, struct dlm_message *ms)
struct rq_entry *e; struct rq_entry *e;
int length = ms->m_header.h_length - sizeof(struct dlm_message); int length = ms->m_header.h_length - sizeof(struct dlm_message);
e = kmalloc(sizeof(struct rq_entry) + length, ls->ls_allocation); e = kmalloc(sizeof(struct rq_entry) + length, GFP_NOFS);
if (!e) { if (!e) {
log_print("dlm_add_requestqueue: out of memory len %d", length); log_print("dlm_add_requestqueue: out of memory len %d", length);
return; return;
......
...@@ -267,7 +267,7 @@ static int device_user_lock(struct dlm_user_proc *proc, ...@@ -267,7 +267,7 @@ static int device_user_lock(struct dlm_user_proc *proc,
goto out; goto out;
} }
ua = kzalloc(sizeof(struct dlm_user_args), GFP_KERNEL); ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
if (!ua) if (!ua)
goto out; goto out;
ua->proc = proc; ua->proc = proc;
...@@ -307,7 +307,7 @@ static int device_user_unlock(struct dlm_user_proc *proc, ...@@ -307,7 +307,7 @@ static int device_user_unlock(struct dlm_user_proc *proc,
if (!ls) if (!ls)
return -ENOENT; return -ENOENT;
ua = kzalloc(sizeof(struct dlm_user_args), GFP_KERNEL); ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
if (!ua) if (!ua)
goto out; goto out;
ua->proc = proc; ua->proc = proc;
...@@ -352,7 +352,7 @@ static int dlm_device_register(struct dlm_ls *ls, char *name) ...@@ -352,7 +352,7 @@ static int dlm_device_register(struct dlm_ls *ls, char *name)
error = -ENOMEM; error = -ENOMEM;
len = strlen(name) + strlen(name_prefix) + 2; len = strlen(name) + strlen(name_prefix) + 2;
ls->ls_device.name = kzalloc(len, GFP_KERNEL); ls->ls_device.name = kzalloc(len, GFP_NOFS);
if (!ls->ls_device.name) if (!ls->ls_device.name)
goto fail; goto fail;
...@@ -520,7 +520,7 @@ static ssize_t device_write(struct file *file, const char __user *buf, ...@@ -520,7 +520,7 @@ static ssize_t device_write(struct file *file, const char __user *buf,
#endif #endif
return -EINVAL; return -EINVAL;
kbuf = kzalloc(count + 1, GFP_KERNEL); kbuf = kzalloc(count + 1, GFP_NOFS);
if (!kbuf) if (!kbuf)
return -ENOMEM; return -ENOMEM;
...@@ -546,7 +546,7 @@ static ssize_t device_write(struct file *file, const char __user *buf, ...@@ -546,7 +546,7 @@ static ssize_t device_write(struct file *file, const char __user *buf,
/* add 1 after namelen so that the name string is terminated */ /* add 1 after namelen so that the name string is terminated */
kbuf = kzalloc(sizeof(struct dlm_write_request) + namelen + 1, kbuf = kzalloc(sizeof(struct dlm_write_request) + namelen + 1,
GFP_KERNEL); GFP_NOFS);
if (!kbuf) { if (!kbuf) {
kfree(k32buf); kfree(k32buf);
return -ENOMEM; return -ENOMEM;
...@@ -648,7 +648,7 @@ static int device_open(struct inode *inode, struct file *file) ...@@ -648,7 +648,7 @@ static int device_open(struct inode *inode, struct file *file)
if (!ls) if (!ls)
return -ENOENT; return -ENOENT;
proc = kzalloc(sizeof(struct dlm_user_proc), GFP_KERNEL); proc = kzalloc(sizeof(struct dlm_user_proc), GFP_NOFS);
if (!proc) { if (!proc) {
dlm_put_lockspace(ls); dlm_put_lockspace(ls);
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册