Whamcloud - gitweb
LU-8592 mdt: hold mdt_device::mdt_md_root until service stop
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_requests.c
index 796cbea..0ac8135 100644 (file)
@@ -23,6 +23,7 @@
  * (C) Copyright 2012 Commissariat a l'energie atomique et aux energies
  *     alternatives
  *
+ * Copyright (c) 2014, Intel Corporation.
  */
 /*
  * lustre/mdt/mdt_hsm_cdt_requests.c
@@ -51,10 +52,10 @@ void dump_requests(char *prefix, struct coordinator *cdt)
        down_read(&cdt->cdt_request_lock);
        list_for_each_entry(car, &cdt->cdt_requests, car_request_list) {
                CDEBUG(D_HSM, "%s fid="DFID" dfid="DFID
-                      " compound/cookie="LPX64"/"LPX64
-                      " action=%s archive#=%d flags="LPX64
-                      " extent="LPX64"-"LPX64
-                      " gid="LPX64" refcount=%d canceled=%d\n",
+                      " compound/cookie=%#llx/%#llx"
+                      " action=%s archive#=%d flags=%#llx"
+                      " extent=%#llx-%#llx"
+                      " gid=%#llx refcount=%d canceled=%d\n",
                       prefix, PFID(&car->car_hai->hai_fid),
                       PFID(&car->car_hai->hai_dfid),
                       car->car_compound_id, car->car_hai->hai_cookie,
@@ -156,8 +157,13 @@ static int hsm_update_work(struct cdt_req_progress *crp,
        int                       rc, osz, nsz;
        struct interval_node    **new_vv;
        struct interval_node     *v, *node;
+       __u64                     end;
        ENTRY;
 
+       end = extent->offset + extent->length;
+       if (end <= extent->offset)
+               RETURN(-EINVAL);
+
        mutex_lock(&crp->crp_lock);
        /* new node index */
 
@@ -196,7 +202,9 @@ static int hsm_update_work(struct cdt_req_progress *crp,
 
        v = crp->crp_node[crp->crp_cnt / NODE_VECTOR_SZ];
        node = &v[crp->crp_cnt % NODE_VECTOR_SZ];
-       interval_set(node, extent->offset, extent->offset + extent->length);
+       rc = interval_set(node, extent->offset, end);
+       if (rc)
+               GOTO(out, rc);
        /* try to insert, if entry already exist ignore the new one
         * it can happen if ct sends 2 times the same progress */
        if (interval_insert(node, &crp->crp_root) == NULL)
@@ -205,7 +213,7 @@ static int hsm_update_work(struct cdt_req_progress *crp,
        rc = 0;
 out:
        mutex_unlock(&crp->crp_lock);
-       return rc;
+       RETURN(rc);
 }
 
 /**
@@ -219,7 +227,7 @@ static void mdt_cdt_init_request_tree(struct cdt_req_progress *crp)
        crp->crp_max = 0;
 }
 
-/** Allocate/init a agent request and its sub-structures.
+/** Allocate/init an agent request and its sub-structures.
  *
  * \param compound_id [IN]
  * \param archive_id [IN]
@@ -260,7 +268,7 @@ struct cdt_agent_req *mdt_cdt_alloc_request(__u64 compound_id, __u32 archive_id,
 }
 
 /**
- * Free a agent request and its sub-structures.
+ * Free an agent request and its sub-structures.
  *
  * \param car [IN]  Request to be freed.
  */
@@ -294,7 +302,7 @@ void mdt_cdt_put_request(struct cdt_agent_req *car)
 
 /**
  * find request in the list by cookie or by fid
- * lock cdt_request_lock needs to be hold by caller
+ * lock cdt_request_lock needs to be held by caller
  * \param cdt [IN] coordinator
  * \param cookie [IN] request cookie
  * \param fid [IN] fid
@@ -518,10 +526,10 @@ static int mdt_hsm_active_requests_proc_show(struct seq_file *s, void *v)
        mdt_cdt_get_work_done(car, &data_moved);
 
        seq_printf(s, "fid="DFID" dfid="DFID
-                  " compound/cookie="LPX64"/"LPX64
-                  " action=%s archive#=%d flags="LPX64
-                  " extent="LPX64"-"LPX64" gid="LPX64
-                  " data=[%s] canceled=%d uuid=%s done="LPU64"%%\n",
+                  " compound/cookie=%#llx/%#llx"
+                  " action=%s archive#=%d flags=%#llx"
+                  " extent=%#llx-%#llx gid=%#llx"
+                  " data=[%s] canceled=%d uuid=%s done=%llu\n",
                   PFID(&car->car_hai->hai_fid),
                   PFID(&car->car_hai->hai_dfid),
                   car->car_compound_id, car->car_hai->hai_cookie,
@@ -569,15 +577,12 @@ static int lprocfs_open_hsm_active_requests(struct inode *inode,
        int              rc;
        ENTRY;
 
-       if (LPROCFS_ENTRY_CHECK(PDE(inode)))
-               RETURN(-ENOENT);
-
        rc = seq_open(file, &mdt_hsm_active_requests_proc_ops);
        if (rc) {
                RETURN(rc);
        }
        s = file->private_data;
-       s->private = PDE(inode)->data;
+       s->private = PDE_DATA(inode);
 
        RETURN(rc);
 }