* GPL HEADER END
*/
/*
- * Copyright (c) 2012, 2013, Intel Corporation.
- * Use is subject to license terms.
* Copyright (c) 2011, 2012 Commissariat a l'energie atomique et aux energies
* alternatives
+ *
+ * Copyright (c) 2013, 2014, Intel Corporation.
+ * Use is subject to license terms.
*/
/*
* lustre/mdt/mdt_coordinator.c
#define DEBUG_SUBSYSTEM S_MDS
+#include <linux/kthread.h>
#include <obd_support.h>
#include <lustre_net.h>
#include <lustre_export.h>
#include <obd.h>
#include <lprocfs_status.h>
#include <lustre_log.h>
+#include <lustre_kernelcomm.h>
#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
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 &&
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
*/
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,
hsm_copytool_action2name(
larr->arr_hai.hai_action));
+ if (rc == -ENOENT) {
+ /* The request no longer exists, forget
+ * about it, and do not send a cancel request
+ * to the client, for which an error will be
+ * sent back, leading to an endless cycle of
+ * cancellation. */
+ RETURN(LLOG_DEL_RECORD);
+ }
+
/* add the cookie to the list of record to be
* canceled by caller */
if (hsd->max_cookie == (hsd->cookie_cnt - 1)) {
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)) {
* \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;
}
struct mdt_thread_info *mti = data;
struct mdt_device *mdt = mti->mti_mdt;
struct coordinator *cdt = &mdt->mdt_coordinator;
- struct hsm_scan_data hsd = { 0 };
+ struct hsm_scan_data hsd = { NULL };
int rc = 0;
ENTRY;
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,
* 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;
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);
}
/**
- * 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
LPROC_SEQ_FOPS(mdt_hsm_group_request_mask);
LPROC_SEQ_FOPS(mdt_hsm_other_request_mask);
-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",