Whamcloud - gitweb
LU-8626 hsm: count the number of started requests of each type
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_requests.c
index 4ab3db1..29a638d 100644 (file)
@@ -304,7 +304,7 @@ struct cdt_agent_req *mdt_cdt_alloc_request(__u64 compound_id, __u32 archive_id,
        car->car_archive_id = archive_id;
        car->car_flags = flags;
        car->car_canceled = 0;
-       car->car_req_start = cfs_time_current_sec();
+       car->car_req_start = ktime_get_real_seconds();
        car->car_req_update = car->car_req_start;
        car->car_uuid = *uuid;
        OBD_ALLOC(car->car_hai, hai->hai_len);
@@ -382,6 +382,17 @@ int mdt_cdt_add_request(struct coordinator *cdt, struct cdt_agent_req *car)
 
        mdt_hsm_agent_update_statistics(cdt, 0, 0, 1, &car->car_uuid);
 
+       switch (car->car_hai->hai_action) {
+       case HSMA_ARCHIVE:
+               atomic_inc(&cdt->cdt_archive_count);
+               break;
+       case HSMA_RESTORE:
+               atomic_inc(&cdt->cdt_restore_count);
+               break;
+       case HSMA_REMOVE:
+               atomic_inc(&cdt->cdt_remove_count);
+               break;
+       }
        atomic_inc(&cdt->cdt_request_count);
 
        RETURN(0);
@@ -427,11 +438,27 @@ int mdt_cdt_remove_request(struct coordinator *cdt, __u64 cookie)
        list_del(&car->car_request_list);
        up_write(&cdt->cdt_request_lock);
 
+       switch (car->car_hai->hai_action) {
+       case HSMA_ARCHIVE:
+               atomic_dec(&cdt->cdt_archive_count);
+               break;
+       case HSMA_RESTORE:
+               atomic_dec(&cdt->cdt_restore_count);
+               break;
+       case HSMA_REMOVE:
+               atomic_dec(&cdt->cdt_remove_count);
+               break;
+       }
+
        /* Drop reference from cdt_request_list. */
        mdt_cdt_put_request(car);
 
        LASSERT(atomic_read(&cdt->cdt_request_count) >= 1);
-       atomic_dec(&cdt->cdt_request_count);
+       if (atomic_dec_and_test(&cdt->cdt_request_count)) {
+               /* request count is empty, nudge coordinator for more work */
+               cdt->cdt_wakeup_coordinator = true;
+               wake_up_interruptible(&cdt->cdt_waitq);
+       }
 
        RETURN(0);
 }
@@ -455,7 +482,7 @@ struct cdt_agent_req *mdt_cdt_update_request(struct coordinator *cdt,
        if (car == NULL)
                RETURN(ERR_PTR(-ENOENT));
 
-       car->car_req_update = cfs_time_current_sec();
+       car->car_req_update = ktime_get_real_seconds();
 
        /* update data move progress done by copy tool */
        if (car->car_hai->hai_action != HSMA_REMOVE && pgs->hpk_errval == 0 &&