Whamcloud - gitweb
LU-7251 osp: do not assign commit callback to every thandle
[fs/lustre-release.git] / lustre / target / update_trans.c
index 3909872..6c3e414 100644 (file)
@@ -87,8 +87,8 @@ static void top_multiple_thandle_dump(struct top_multiple_thandle *tmt,
                       st->st_committed, st->st_stopped, st->st_sub_th);
 
                list_for_each_entry(stc, &st->st_cookie_list, stc_list) {
-                       CDEBUG(mask, " cookie "DOSTID": %u\n",
-                              POSTID(&stc->stc_cookie.lgc_lgl.lgl_oi),
+                       CDEBUG(mask, " cookie "DFID".%u\n",
+                              PFID(&stc->stc_cookie.lgc_lgl.lgl_oi.oi_fid),
                               stc->stc_cookie.lgc_index);
                }
        }
@@ -201,7 +201,17 @@ static int sub_updates_write(const struct lu_env *env,
                 "lrh_len %u record_size %zu\n", record->lur_hdr.lrh_len,
                 llog_update_record_size(record));
 
-       if (likely(record->lur_hdr.lrh_len <= ctxt->loc_chunk_size)) {
+       /*
+        * If its size > llog chunk_size, then write current chunk to the update
+        * llog, NB the padding should >= LLOG_MIN_REC_SIZE.
+        *
+        * So check padding length is either >= LLOG_MIN_REC_SIZE or is 0
+        * (record length just matches the chunk size).
+        */
+
+       reclen = record->lur_hdr.lrh_len;
+       if (reclen + LLOG_MIN_REC_SIZE <= ctxt->loc_chunk_size ||
+           reclen == ctxt->loc_chunk_size) {
                OBD_ALLOC_PTR(stc);
                if (stc == NULL)
                        GOTO(llog_put, rc = -ENOMEM);
@@ -210,9 +220,9 @@ static int sub_updates_write(const struct lu_env *env,
                rc = llog_add(env, ctxt->loc_handle, &record->lur_hdr,
                              &stc->stc_cookie, sub_th->st_sub_th);
 
-               CDEBUG(D_INFO, "%s: Add update log "DOSTID":%u: rc = %d\n",
+               CDEBUG(D_INFO, "%s: Add update log "DFID".%u: rc = %d\n",
                       dt->dd_lu_dev.ld_obd->obd_name,
-                      POSTID(&stc->stc_cookie.lgc_lgl.lgl_oi),
+                      PFID(&stc->stc_cookie.lgc_lgl.lgl_oi.oi_fid),
                       stc->stc_cookie.lgc_index, rc);
 
                if (rc > 0) {
@@ -245,13 +255,6 @@ static int sub_updates_write(const struct lu_env *env,
                else
                        eof = true;
 
-               /*
-                * If its size > llog chunk_size, then write current chunk to
-                * the update llog, NB the padding should >= LLOG_MIN_REC_SIZE.
-                *
-                * So check padding length is either >= LLOG_MIN_REC_SIZE or is
-                * 0 (record length just matches the chunk size).
-                */
                reclen = __llog_update_record_size(
                                __update_records_size(next - start));
                if ((reclen + LLOG_MIN_REC_SIZE <= ctxt->loc_chunk_size ||
@@ -290,9 +293,9 @@ static int sub_updates_write(const struct lu_env *env,
                rc = llog_add(env, ctxt->loc_handle, &lur->lur_hdr,
                              &stc->stc_cookie, sub_th->st_sub_th);
 
-               CDEBUG(D_INFO, "%s: Add update log "DOSTID":%u rc = %d\n",
+               CDEBUG(D_INFO, "%s: Add update log "DFID".%u: rc = %d\n",
                        dt->dd_lu_dev.ld_obd->obd_name,
-                       POSTID(&stc->stc_cookie.lgc_lgl.lgl_oi),
+                       PFID(&stc->stc_cookie.lgc_lgl.lgl_oi.oi_fid),
                        stc->stc_cookie.lgc_index, rc);
 
                if (rc > 0) {
@@ -612,8 +615,6 @@ top_trans_create(const struct lu_env *env, struct dt_device *master_dev)
                child_th->th_top = &top_th->tt_super;
                child_th->th_wait_submit = 1;
                top_th->tt_master_sub_thandle = child_th;
-
-               top_th->tt_super.th_tags |= child_th->th_tags;
        }
        return &top_th->tt_super;
 }
@@ -792,7 +793,6 @@ int top_trans_start(const struct lu_env *env, struct dt_device *master_dev,
                        top_th->tt_master_sub_thandle->th_sync = th->th_sync;
                if (th->th_local)
                        top_th->tt_master_sub_thandle->th_local = th->th_local;
-               top_th->tt_master_sub_thandle->th_tags = th->th_tags;
                rc = dt_trans_start(env, top_th->tt_master_sub_thandle->th_dev,
                                    top_th->tt_master_sub_thandle);
                RETURN(rc);
@@ -810,7 +810,6 @@ int top_trans_start(const struct lu_env *env, struct dt_device *master_dev,
                        st->st_sub_th->th_sync = th->th_sync;
                if (th->th_local)
                        st->st_sub_th->th_local = th->th_local;
-               st->st_sub_th->th_tags = th->th_tags;
                rc = dt_trans_start(env, st->st_sub_th->th_dev,
                                    st->st_sub_th);
                if (rc != 0)
@@ -948,7 +947,6 @@ int top_trans_stop(const struct lu_env *env, struct dt_device *master_dev,
                        top_th->tt_master_sub_thandle->th_sync = th->th_sync;
                if (th->th_local)
                        top_th->tt_master_sub_thandle->th_local = th->th_local;
-               top_th->tt_master_sub_thandle->th_tags = th->th_tags;
                rc = dt_trans_stop(env, master_dev,
                                   top_th->tt_master_sub_thandle);
                OBD_FREE_PTR(top_th);
@@ -1008,7 +1006,6 @@ stop_master_trans:
                        master_st->st_sub_th->th_local = th->th_local;
                if (th->th_sync)
                        master_st->st_sub_th->th_sync = th->th_sync;
-               master_st->st_sub_th->th_tags = th->th_tags;
                master_st->st_sub_th->th_result = th->th_result;
                rc = dt_trans_stop(env, master_st->st_dt, master_st->st_sub_th);
                /* If it does not write_updates, then we call submit callback
@@ -1072,7 +1069,6 @@ stop_other_trans:
                        st->st_sub_th->th_sync = th->th_sync;
                if (th->th_local)
                        st->st_sub_th->th_local = th->th_local;
-               st->st_sub_th->th_tags = th->th_tags;
                st->st_sub_th->th_result = th->th_result;
                rc = dt_trans_stop(env, st->st_sub_th->th_dev,
                                   st->st_sub_th);
@@ -1297,9 +1293,9 @@ static int distribute_txn_cancel_records(const struct lu_env *env,
                        rc = llog_cat_cancel_records(env, ctxt->loc_handle, 1,
                                                     cookie);
                        CDEBUG(D_HA, "%s: batchid %llu cancel update log "
-                              DOSTID ".%u : rc = %d\n", obd->obd_name,
+                              DFID".%u: rc = %d\n", obd->obd_name,
                               tmt->tmt_batchid,
-                              POSTID(&cookie->lgc_lgl.lgl_oi),
+                              PFID(&cookie->lgc_lgl.lgl_oi.oi_fid),
                               cookie->lgc_index, rc);
                }
 
@@ -1420,6 +1416,7 @@ distribute_txn_commit_batchid_update(const struct lu_env *env,
 
        th = dt_trans_create(env, tdtd->tdtd_lut->lut_bottom);
        if (IS_ERR(th)) {
+               atomic_dec(&tdtd->tdtd_refcount);
                OBD_FREE_PTR(dtbd);
                RETURN(PTR_ERR(th));
        }
@@ -1450,8 +1447,10 @@ distribute_txn_commit_batchid_update(const struct lu_env *env,
 
 stop:
        dt_trans_stop(env, tdtd->tdtd_lut->lut_bottom, th);
-       if (rc < 0)
+       if (rc < 0) {
+               atomic_dec(&tdtd->tdtd_refcount);
                OBD_FREE_PTR(dtbd);
+       }
        RETURN(rc);
 }
 
@@ -1708,7 +1707,7 @@ int distribute_txn_init(const struct lu_env *env,
        if (rc != 0)
                RETURN(rc);
 
-       task = kthread_run(distribute_txn_commit_thread, tdtd, "tdtd-%u",
+       task = kthread_run(distribute_txn_commit_thread, tdtd, "dist_txn-%u",
                           index);
        if (IS_ERR(task))
                RETURN(PTR_ERR(task));