Commit 17328956 authored by Hongchao Zhang's avatar Hongchao Zhang Committed by Greg Kroah-Hartman

staging: lustre: embed kr_data into kkuc_reg

In struct kkuc_reg, the "kr_data" is difficult to be freed
outside of libcfs, then it's better to change it to be
inline data instead of the data pointer.
Signed-off-by: default avatarHongchao Zhang <hongchao.zhang@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6485
Reviewed-on: http://review.whamcloud.com/14638Reviewed-by: default avatarJohn L. Hammond <john.hammond@intel.com>
Reviewed-by: default avatarJames Simmons <uja.ornl@yahoo.com>
Reviewed-by: default avatarfrank zago <fzago@cray.com>
Reviewed-by: default avatarRobert Read <robert.read@intel.com>
Reviewed-by: default avatarHenri Doreau <henri.doreau@cea.fr>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e2780478
...@@ -47,8 +47,8 @@ typedef int (*libcfs_kkuc_cb_t)(void *data, void *cb_arg); ...@@ -47,8 +47,8 @@ typedef int (*libcfs_kkuc_cb_t)(void *data, void *cb_arg);
int libcfs_kkuc_msg_put(struct file *fp, void *payload); int libcfs_kkuc_msg_put(struct file *fp, void *payload);
int libcfs_kkuc_group_put(int group, void *payload); int libcfs_kkuc_group_put(int group, void *payload);
int libcfs_kkuc_group_add(struct file *fp, int uid, unsigned int group, int libcfs_kkuc_group_add(struct file *fp, int uid, unsigned int group,
void *data); void *data, size_t data_len);
int libcfs_kkuc_group_rem(int uid, int group, void **pdata); int libcfs_kkuc_group_rem(int uid, int group);
int libcfs_kkuc_group_foreach(int group, libcfs_kkuc_cb_t cb_func, int libcfs_kkuc_group_foreach(int group, libcfs_kkuc_cb_t cb_func,
void *cb_arg); void *cb_arg);
......
...@@ -795,7 +795,6 @@ static void lmv_hsm_req_build(struct lmv_obd *lmv, ...@@ -795,7 +795,6 @@ static void lmv_hsm_req_build(struct lmv_obd *lmv,
static int lmv_hsm_ct_unregister(struct lmv_obd *lmv, unsigned int cmd, int len, static int lmv_hsm_ct_unregister(struct lmv_obd *lmv, unsigned int cmd, int len,
struct lustre_kernelcomm *lk, void *uarg) struct lustre_kernelcomm *lk, void *uarg)
{ {
struct kkuc_ct_data *kcd = NULL;
int rc = 0; int rc = 0;
__u32 i; __u32 i;
...@@ -810,9 +809,7 @@ static int lmv_hsm_ct_unregister(struct lmv_obd *lmv, unsigned int cmd, int len, ...@@ -810,9 +809,7 @@ static int lmv_hsm_ct_unregister(struct lmv_obd *lmv, unsigned int cmd, int len,
* Unreached coordinators will get EPIPE on next requests * Unreached coordinators will get EPIPE on next requests
* and will unregister automatically. * and will unregister automatically.
*/ */
rc = libcfs_kkuc_group_rem(lk->lk_uid, lk->lk_group, (void **)&kcd); rc = libcfs_kkuc_group_rem(lk->lk_uid, lk->lk_group);
if (kcd)
kfree(kcd);
return rc; return rc;
} }
...@@ -824,7 +821,7 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len, ...@@ -824,7 +821,7 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len,
__u32 i, j; __u32 i, j;
int err, rc = 0; int err, rc = 0;
bool any_set = false; bool any_set = false;
struct kkuc_ct_data *kcd; struct kkuc_ct_data kcd = { 0 };
/* All or nothing: try to register to all MDS. /* All or nothing: try to register to all MDS.
* In case of failure, unregister from previous MDS, * In case of failure, unregister from previous MDS,
...@@ -864,20 +861,15 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len, ...@@ -864,20 +861,15 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len,
if (!filp) if (!filp)
return -EBADF; return -EBADF;
kcd = kzalloc(sizeof(*kcd), GFP_NOFS); kcd.kcd_magic = KKUC_CT_DATA_MAGIC;
if (!kcd) { kcd.kcd_uuid = lmv->cluuid;
fput(filp); kcd.kcd_archive = lk->lk_data;
return -ENOMEM;
}
kcd->kcd_magic = KKUC_CT_DATA_MAGIC;
kcd->kcd_uuid = lmv->cluuid;
kcd->kcd_archive = lk->lk_data;
rc = libcfs_kkuc_group_add(filp, lk->lk_uid, lk->lk_group, kcd); rc = libcfs_kkuc_group_add(filp, lk->lk_uid, lk->lk_group,
&kcd, sizeof(kcd));
if (rc) { if (rc) {
if (filp) if (filp)
fput(filp); fput(filp);
kfree(kcd);
} }
return rc; return rc;
......
...@@ -2376,7 +2376,7 @@ static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) ...@@ -2376,7 +2376,7 @@ static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
case OBD_CLEANUP_EXPORTS: case OBD_CLEANUP_EXPORTS:
/* Failsafe, ok if racy */ /* Failsafe, ok if racy */
if (obd->obd_type->typ_refcnt <= 1) if (obd->obd_type->typ_refcnt <= 1)
libcfs_kkuc_group_rem(0, KUC_GRP_HSM, NULL); libcfs_kkuc_group_rem(0, KUC_GRP_HSM);
obd_cleanup_client_import(obd); obd_cleanup_client_import(obd);
ptlrpc_lprocfs_unregister_obd(obd); ptlrpc_lprocfs_unregister_obd(obd);
......
...@@ -97,7 +97,7 @@ struct kkuc_reg { ...@@ -97,7 +97,7 @@ struct kkuc_reg {
struct list_head kr_chain; struct list_head kr_chain;
int kr_uid; int kr_uid;
struct file *kr_fp; struct file *kr_fp;
void *kr_data; char kr_data[0];
}; };
static struct list_head kkuc_groups[KUC_GRP_MAX+1] = {}; static struct list_head kkuc_groups[KUC_GRP_MAX+1] = {};
...@@ -111,7 +111,7 @@ static DECLARE_RWSEM(kg_sem); ...@@ -111,7 +111,7 @@ static DECLARE_RWSEM(kg_sem);
* @param data user data * @param data user data
*/ */
int libcfs_kkuc_group_add(struct file *filp, int uid, unsigned int group, int libcfs_kkuc_group_add(struct file *filp, int uid, unsigned int group,
void *data) void *data, size_t data_len)
{ {
struct kkuc_reg *reg; struct kkuc_reg *reg;
...@@ -125,13 +125,13 @@ int libcfs_kkuc_group_add(struct file *filp, int uid, unsigned int group, ...@@ -125,13 +125,13 @@ int libcfs_kkuc_group_add(struct file *filp, int uid, unsigned int group,
return -EBADF; return -EBADF;
/* freed in group_rem */ /* freed in group_rem */
reg = kmalloc(sizeof(*reg), 0); reg = kmalloc(sizeof(*reg) + data_len, 0);
if (reg == NULL) if (reg == NULL)
return -ENOMEM; return -ENOMEM;
reg->kr_fp = filp; reg->kr_fp = filp;
reg->kr_uid = uid; reg->kr_uid = uid;
reg->kr_data = data; memcpy(reg->kr_data, data, data_len);
down_write(&kg_sem); down_write(&kg_sem);
if (kkuc_groups[group].next == NULL) if (kkuc_groups[group].next == NULL)
...@@ -145,7 +145,7 @@ int libcfs_kkuc_group_add(struct file *filp, int uid, unsigned int group, ...@@ -145,7 +145,7 @@ int libcfs_kkuc_group_add(struct file *filp, int uid, unsigned int group,
} }
EXPORT_SYMBOL(libcfs_kkuc_group_add); EXPORT_SYMBOL(libcfs_kkuc_group_add);
int libcfs_kkuc_group_rem(int uid, int group, void **pdata) int libcfs_kkuc_group_rem(int uid, int group)
{ {
struct kkuc_reg *reg, *next; struct kkuc_reg *reg, *next;
...@@ -171,8 +171,6 @@ int libcfs_kkuc_group_rem(int uid, int group, void **pdata) ...@@ -171,8 +171,6 @@ int libcfs_kkuc_group_rem(int uid, int group, void **pdata)
reg->kr_uid, reg->kr_fp, group); reg->kr_uid, reg->kr_fp, group);
if (reg->kr_fp != NULL) if (reg->kr_fp != NULL)
fput(reg->kr_fp); fput(reg->kr_fp);
if (pdata)
*pdata = reg->kr_data;
kfree(reg); kfree(reg);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment