X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_coordinator.c;h=daf8d95bb039eb9e7cfa95e76337596a25335e43;hb=88299272c512c006ce8207affc6cc8e1514471a6;hp=2a6bb0edcb5ca31a487a49aa98ad29a550cf62d5;hpb=e49995acfd026f3ca85d05dc1b91d97a8743fe72;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c index 2a6bb0e..daf8d95 100644 --- a/lustre/mdt/mdt_coordinator.c +++ b/lustre/mdt/mdt_coordinator.c @@ -38,15 +38,17 @@ #define DEBUG_SUBSYSTEM S_MDS +#include #include #include #include #include #include #include +#include #include "mdt_internal.h" -static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[]; +static struct lprocfs_vars lprocfs_mdt_hsm_vars[]; /** * get obj and HSM attributes on a fid @@ -185,8 +187,8 @@ static int mdt_coordinator_cb(const struct lu_env *env, cdt->cdt_max_requests) break; - /* first search if the request if known in the list we have - * build and if there is room in the request vector */ + /* first search whether the request is found in the list we + * have built and if there is room in the request vector */ empty_slot = -1; found = -1; for (i = 0; i < hsd->max_requests && @@ -312,7 +314,7 @@ static int mdt_coordinator_cb(const struct lu_env *env, struct hsm_progress_kernel pgs; dump_llog_agent_req_rec("mdt_coordinator_cb(): " - "request timeouted, start " + "request timed out, start " "cleaning", larr); /* a too old cancel request just needs to be removed * this can happen, if copy tool does not support cancel @@ -330,7 +332,7 @@ static int mdt_coordinator_cb(const struct lu_env *env, */ rc = mdt_hsm_update_request_state(hsd->mti, &pgs, 0); if (rc) - CERROR("%s: Cannot cleanup timeouted request: " + CERROR("%s: Cannot cleanup timed out request: " DFID" for cookie "LPX64" action=%s\n", mdt_obd_name(mdt), PFID(&pgs.hpk_fid), pgs.hpk_cookie, @@ -401,7 +403,7 @@ int hsm_cdt_procfs_init(struct mdt_device *mdt) ENTRY; /* init /proc entries, failure is not critical */ - cdt->cdt_proc_dir = lprocfs_seq_register("hsm", + cdt->cdt_proc_dir = lprocfs_register("hsm", mdt2obd_dev(mdt)->obd_proc_entry, lprocfs_mdt_hsm_vars, mdt); if (IS_ERR(cdt->cdt_proc_dir)) { @@ -433,7 +435,7 @@ void hsm_cdt_procfs_fini(struct mdt_device *mdt) * \param none * \retval var vector */ -struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void) +struct lprocfs_vars *hsm_cdt_get_proc_vars(void) { return lprocfs_mdt_hsm_vars; } @@ -543,7 +545,7 @@ static int mdt_coordinator(void *data) CDEBUG(D_HSM, "Found %d requests to send and %d" " requests to cancel\n", hsd.request_cnt, hsd.cookie_cnt); - /* first we cancel llog records of the timeouted requests */ + /* first we cancel llog records of the timed out requests */ if (hsd.cookie_cnt > 0) { rc = mdt_agent_record_update(mti->mti_env, mdt, hsd.cookies, @@ -913,6 +915,13 @@ int mdt_hsm_cdt_init(struct mdt_device *mdt) cdt->cdt_policy = CDT_DEFAULT_POLICY; cdt->cdt_active_req_timeout = 3600; + /* Initialize cdt_compound_id here to allow its usage for + * delayed requests from RAoLU policy */ + atomic_set(&cdt->cdt_compound_id, cfs_time_current_sec()); + + /* by default do not remove archives on last unlink */ + cdt->cdt_remove_archive_on_last_unlink = false; + RETURN(0); } @@ -964,7 +973,6 @@ int mdt_hsm_cdt_start(struct mdt_device *mdt) cdt->cdt_state = CDT_INIT; - atomic_set(&cdt->cdt_compound_id, cfs_time_current_sec()); /* just need to be larger than previous one */ /* cdt_last_cookie is protected by cdt_llog_lock */ cdt->cdt_last_cookie = cfs_time_current_sec(); @@ -1270,7 +1278,7 @@ static int hsm_cdt_request_completed(struct mdt_thread_info *mti, * ENOSYS only if does not support cancel */ /* this can also happen when cdt calls it to - * for a timeouted request */ + * for a timed out request */ *status = ARS_FAILED; /* to have a cancel event in changelog */ pgs->hpk_errval = ECANCELED; @@ -1400,7 +1408,7 @@ unlock: struct cdt_restore_handle *crh; /* restore in data FID done, we swap the layouts - * only if restore is successfull */ + * only if restore is successful */ if (pgs->hpk_errval == 0) { rc = hsm_swap_layouts(mti, &car->car_hai->hai_fid, &car->car_hai->hai_dfid, &mh); @@ -1711,7 +1719,7 @@ out: } /** - * check if a request is comptaible with file status + * check if a request is compatible with file status * \param hai [IN] request description * \param hal_an [IN] request archive number (not used) * \param rq_flags [IN] request flags @@ -2204,6 +2212,36 @@ mdt_hsm_other_request_mask_seq_write(struct file *file, const char __user *buf, &cdt->cdt_other_request_mask); } +static int mdt_hsm_cdt_raolu_seq_show(struct seq_file *m, void *data) +{ + struct mdt_device *mdt = m->private; + struct coordinator *cdt = &mdt->mdt_coordinator; + ENTRY; + + seq_printf(m, "%d\n", (int)cdt->cdt_remove_archive_on_last_unlink); + RETURN(0); +} + +static ssize_t +mdt_hsm_cdt_raolu_seq_write(struct file *file, const char __user *buffer, + size_t count, loff_t *off) + +{ + struct seq_file *m = file->private_data; + struct mdt_device *mdt = m->private; + struct coordinator *cdt = &mdt->mdt_coordinator; + int val; + int rc; + ENTRY; + + rc = lprocfs_write_helper(buffer, count, &val); + if (rc < 0) + RETURN(rc); + + cdt->cdt_remove_archive_on_last_unlink = val; + RETURN(count); +} + LPROC_SEQ_FOPS(mdt_hsm_cdt_loop_period); LPROC_SEQ_FOPS(mdt_hsm_cdt_grace_delay); LPROC_SEQ_FOPS(mdt_hsm_cdt_active_req_timeout); @@ -2212,8 +2250,9 @@ LPROC_SEQ_FOPS(mdt_hsm_cdt_default_archive_id); LPROC_SEQ_FOPS(mdt_hsm_user_request_mask); LPROC_SEQ_FOPS(mdt_hsm_group_request_mask); LPROC_SEQ_FOPS(mdt_hsm_other_request_mask); +LPROC_SEQ_FOPS(mdt_hsm_cdt_raolu); -static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[] = { +static struct lprocfs_vars lprocfs_mdt_hsm_vars[] = { { .name = "agents", .fops = &mdt_hsm_agent_fops }, { .name = "actions", @@ -2239,5 +2278,7 @@ static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[] = { .fops = &mdt_hsm_group_request_mask_fops, }, { .name = "other_request_mask", .fops = &mdt_hsm_other_request_mask_fops, }, + { .name = "remove_archive_on_last_unlink", + .fops = &mdt_hsm_cdt_raolu_fops, }, { 0 } };