From: Henri Doreau Date: Wed, 23 Aug 2017 15:16:25 +0000 (+0200) Subject: LU-9416 hsm: add kkuc before sending registration RPCs X-Git-Tag: 2.10.2-RC1~45 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F87%2F29687%2F2;p=fs%2Flustre-release.git LU-9416 hsm: add kkuc before sending registration RPCs This avoids a situation where the registration completes and the CDT sends HSM actions just before the kkuc registration happens. In this case the client drops the actions because there are no CT pipes in the kkuc list. Lustre-change: https://review.whamcloud.com/28751 Lustre-commit: bdb04079570dd2de3b9310221e0206d64efb9ecc Change-Id: Icbd6575f04c0ca7e8f731ee8481ec72a9ff4f2e1 Signed-off-by: Henri Doreau Reviewed-by: John L. Hammond Reviewed-by: Faccini Bruno Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/29687 Tested-by: Jenkins Tested-by: Maloo --- diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c index 78160ad..8364def 100644 --- a/lustre/lmv/lmv_obd.c +++ b/lustre/lmv/lmv_obd.c @@ -822,11 +822,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. */ @@ -835,6 +849,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) { @@ -853,7 +868,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 @@ -865,23 +880,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; }