Whamcloud - gitweb
LU-9416 hsm: add kkuc before sending registration RPCs
[fs/lustre-release.git] / lustre / lmv / lmv_obd.c
index 19bbe64..754c96f 100644 (file)
@@ -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;
 }