X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flmv%2Flmv_obd.c;h=754c96f88339e73044f4ecbb971ca65ff2ca8000;hb=refs%2Fchanges%2F51%2F28751%2F5;hp=19bbe64f569030c082b8af3f5b44f3c870915472;hpb=a1eb6de081473545fbd5c1fe33e209fe391bf708;p=fs%2Flustre-release.git diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c index 19bbe64..754c96f 100644 --- a/lustre/lmv/lmv_obd.c +++ b/lustre/lmv/lmv_obd.c @@ -821,11 +821,25 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len, { struct file *filp; __u32 i, j; - int err, rc; + int err; bool any_set = false; - struct kkuc_ct_data kcd = { 0 }; + struct kkuc_ct_data kcd = { + .kcd_magic = KKUC_CT_DATA_MAGIC, + .kcd_uuid = lmv->cluuid, + .kcd_archive = lk->lk_data + }; + int rc = 0; ENTRY; + filp = fget(lk->lk_wfd); + if (!filp) + RETURN(-EBADF); + + rc = libcfs_kkuc_group_add(filp, lk->lk_uid, lk->lk_group, + &kcd, sizeof(kcd)); + if (rc) + GOTO(err_fput, rc); + /* All or nothing: try to register to all MDS. * In case of failure, unregister from previous MDS, * except if it because of inactive target. */ @@ -834,6 +848,7 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len, if (tgt == NULL || tgt->ltd_exp == NULL) continue; + err = obd_iocontrol(cmd, tgt->ltd_exp, len, lk, uarg); if (err) { if (tgt->ltd_active) { @@ -852,7 +867,7 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len, obd_iocontrol(cmd, tgt->ltd_exp, len, lk, uarg); } - RETURN(rc); + GOTO(err_kkuc_rem, rc); } /* else: transient error. * kuc will register to the missing MDT @@ -864,23 +879,16 @@ static int lmv_hsm_ct_register(struct lmv_obd *lmv, unsigned int cmd, int len, if (!any_set) /* no registration done: return error */ - RETURN(-ENOTCONN); + GOTO(err_kkuc_rem, rc = -ENOTCONN); - /* at least one registration done, with no failure */ - filp = fget(lk->lk_wfd); - if (filp == NULL) - RETURN(-EBADF); + RETURN(0); - kcd.kcd_magic = KKUC_CT_DATA_MAGIC; - kcd.kcd_uuid = lmv->cluuid; - kcd.kcd_archive = lk->lk_data; +err_kkuc_rem: + libcfs_kkuc_group_rem(lk->lk_uid, lk->lk_group); - rc = libcfs_kkuc_group_add(filp, lk->lk_uid, lk->lk_group, - &kcd, sizeof(kcd)); - if (rc != 0) - fput(filp); - - RETURN(rc); +err_fput: + fput(filp); + return rc; }