Whamcloud - gitweb
LU-9019 mdt: use ktime_t for calculating elapsed time
[fs/lustre-release.git] / lustre / mdt / mdt_identity.c
index 9e44e90..e8ec709 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * GPL HEADER END
  */
@@ -27,7 +23,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2016, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -57,7 +53,6 @@
 #include <linux/slab.h>
 
 #include <libcfs/libcfs.h>
-#include <libcfs/lucache.h>
 #include <obd.h>
 #include <obd_class.h>
 #include <obd_support.h>
@@ -107,14 +102,14 @@ static int mdt_identity_do_upcall(struct upcall_cache *cache,
                   [1] = "PATH=/sbin:/usr/sbin",
                   [2] = NULL
         };
-        struct timeval start, end;
+       ktime_t start, end;
         int rc;
         ENTRY;
 
         /* There is race condition:
          * "uc_upcall" was changed just after "is_identity_get_disabled" check.
          */
-       read_lock(&cache->uc_upcall_rwlock);
+       down_read(&cache->uc_upcall_rwsem);
         CDEBUG(D_INFO, "The upcall is: '%s'\n", cache->uc_upcall);
 
         if (unlikely(!strcmp(cache->uc_upcall, "NONE"))) {
@@ -122,28 +117,26 @@ static int mdt_identity_do_upcall(struct upcall_cache *cache,
                 GOTO(out, rc = -EREMCHG);
         }
 
-        argv[0] = cache->uc_upcall;
-        snprintf(keystr, sizeof(keystr), LPU64, entry->ue_key);
+       argv[0] = cache->uc_upcall;
+       snprintf(keystr, sizeof(keystr), "%llu", entry->ue_key);
 
-       do_gettimeofday(&start);
-       rc = call_usermodehelper(argv[0], argv, envp, 1);
-       do_gettimeofday(&end);
+       start = ktime_get();
+       rc = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
+       end = ktime_get();
        if (rc < 0) {
-                CERROR("%s: error invoking upcall %s %s %s: rc %d; "
-                       "check /proc/fs/lustre/mdt/%s/identity_upcall, "
-                       "time %ldus\n",
-                       cache->uc_name, argv[0], argv[1], argv[2], rc,
-                       cache->uc_name, cfs_timeval_sub(&end, &start, NULL));
-        } else {
-                CDEBUG(D_HA, "%s: invoked upcall %s %s %s, time %ldus\n",
-                       cache->uc_name, argv[0], argv[1], argv[2],
-                       cfs_timeval_sub(&end, &start, NULL));
-                rc = 0;
-        }
-        EXIT;
+               CERROR("%s: error invoking upcall %s %s %s: rc %d; check /proc/fs/lustre/mdt/%s/identity_upcall, time %ldus\n",
+                      cache->uc_name, argv[0], argv[1], argv[2], rc,
+                      cache->uc_name, (long)ktime_us_delta(end, start));
+       } else {
+               CDEBUG(D_HA, "%s: invoked upcall %s %s %s, time %ldus\n",
+                      cache->uc_name, argv[0], argv[1], argv[2],
+                      (long)ktime_us_delta(end, start));
+               rc = 0;
+       }
+       EXIT;
 out:
-       read_unlock(&cache->uc_upcall_rwlock);
-        return rc;
+       up_read(&cache->uc_upcall_rwsem);
+       return rc;
 }
 
 static int mdt_identity_parse_downcall(struct upcall_cache *cache,
@@ -246,16 +239,14 @@ void mdt_flush_identity(struct upcall_cache *cache, int uid)
  * If there is LNET_NID_ANY in perm[i].mp_nid,
  * it must be perm[0].mp_nid, and act as default perm.
  */
-__u32 mdt_identity_get_perm(struct md_identity *identity,
-                            __u32 is_rmtclient, lnet_nid_t nid)
+__u32 mdt_identity_get_perm(struct md_identity *identity, lnet_nid_t nid)
 {
-        struct md_perm *perm;
-        int i;
 
-        if (!identity) {
-                LASSERT(is_rmtclient == 0);
-                return CFS_SETGRP_PERM;
-        }
+       struct md_perm *perm;
+       int i;
+
+       if (!identity)
+               return CFS_SETGRP_PERM;
 
         perm = identity->mi_perms;
         /* check exactly matched nid first */
@@ -271,39 +262,5 @@ __u32 mdt_identity_get_perm(struct md_identity *identity,
                 return perm[0].mp_perm;
 
         /* return default last */
-        return is_rmtclient ? 0 : CFS_SETGRP_PERM;
-}
-
-int mdt_pack_remote_perm(struct mdt_thread_info *info, struct mdt_object *o,
-                         void *buf)
-{
-       struct lu_ucred         *uc = mdt_ucred_check(info);
-        struct md_object        *next = mdt_object_child(o);
-        struct mdt_remote_perm  *perm = buf;
-
-        ENTRY;
-
-        /* remote client request always pack ptlrpc_user_desc! */
-        LASSERT(perm);
-
-        if (!exp_connect_rmtclient(info->mti_exp))
-                RETURN(-EBADE);
-
-       if (uc == NULL)
-               RETURN(-EINVAL);
-
-       perm->rp_uid = uc->uc_o_uid;
-       perm->rp_gid = uc->uc_o_gid;
-       perm->rp_fsuid = uc->uc_o_fsuid;
-       perm->rp_fsgid = uc->uc_o_fsgid;
-
-        perm->rp_access_perm = 0;
-        if (mo_permission(info->mti_env, NULL, next, NULL, MAY_READ) == 0)
-                perm->rp_access_perm |= MAY_READ;
-        if (mo_permission(info->mti_env, NULL, next, NULL, MAY_WRITE) == 0)
-                perm->rp_access_perm |= MAY_WRITE;
-        if (mo_permission(info->mti_env, NULL, next, NULL, MAY_EXEC) == 0)
-                perm->rp_access_perm |= MAY_EXEC;
-
-        RETURN(0);
+       return CFS_SETGRP_PERM;
 }