static int lmv_hsm_ct_unregister(struct lmv_obd *lmv, unsigned int cmd, int len,
struct lustre_kernelcomm *lk, void *uarg)
{
- __u32 i;
- int rc;
+ __u32 i;
+ int rc;
+ struct kkuc_ct_data *kcd = NULL;
ENTRY;
/* unregister request (call from llapi_hsm_copytool_fini) */
* Unreached coordinators will get EPIPE on next requests
* and will unregister automatically.
*/
- rc = libcfs_kkuc_group_rem(lk->lk_uid, lk->lk_group);
+ rc = libcfs_kkuc_group_rem(lk->lk_uid, lk->lk_group, (void **)&kcd);
+ if (kcd != NULL)
+ OBD_FREE_PTR(kcd);
+
RETURN(rc);
}
static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len,
struct lustre_kernelcomm *lk, void *uarg)
{
- struct file *filp;
- __u32 i, j;
- int err, rc;
- bool any_set = false;
+ struct file *filp;
+ __u32 i, j;
+ int err, rc;
+ bool any_set = false;
+ struct kkuc_ct_data *kcd;
ENTRY;
/* All or nothing: try to register to all MDS.
/* at least one registration done, with no failure */
filp = fget(lk->lk_wfd);
- if (filp == NULL) {
+ if (filp == NULL)
RETURN(-EBADF);
- }
- rc = libcfs_kkuc_group_add(filp, lk->lk_uid, lk->lk_group, lk->lk_data);
- if (rc != 0 && filp != NULL)
+
+ OBD_ALLOC_PTR(kcd);
+ if (kcd == NULL) {
fput(filp);
+ 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);
+ if (rc != 0) {
+ if (filp != NULL)
+ fput(filp);
+ OBD_FREE_PTR(kcd);
+ }
+
RETURN(rc);
}