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);
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);
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);
}
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 &&