2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 * Linux support routines.
14 #include <afsconfig.h>
15 #include "afs/param.h"
18 #include <linux/module.h> /* early to avoid printf->printk mapping */
19 #include <linux/dcache.h>
20 #include <linux/namei.h>
21 #include <linux/kthread.h>
22 #include "afs/sysincludes.h"
23 #include "afsincludes.h"
24 #include "afs/afs_stats.h"
25 #include <linux/smp_lock.h>
27 int afs_osicred_initialized = 0;
28 AFS_UCRED afs_osi_cred;
31 afs_osi_SetTime(osi_timeval_t * tvp)
34 tv.tv_sec = tvp->tv_sec;
35 tv.tv_nsec = tvp->tv_usec * NSEC_PER_USEC;
37 AFS_STATCNT(osi_SetTime);
46 sigfillset(¤t->blocked);
47 RECALC_SIGPENDING(current);
51 /* LOOKUP_POSITIVE is becoming the default */
52 #ifndef LOOKUP_POSITIVE
53 #define LOOKUP_POSITIVE 0
55 /* Lookup name and return vnode for same. */
57 osi_lookupname_internal(char *aname, int followlink, struct vfsmount **mnt,
62 int flags = LOOKUP_POSITIVE;
66 flags |= LOOKUP_FOLLOW;
67 code = path_lookup(aname, flags, &nd);
70 #if defined(STRUCT_NAMEIDATA_HAS_PATH)
71 *dpp = dget(nd.path.dentry);
73 *mnt = mntget(nd.path.mnt);
76 *dpp = dget(nd.dentry);
78 *mnt = mntget(nd.mnt);
86 osi_lookupname(char *aname, uio_seg_t seg, int followlink,
92 if (seg == AFS_UIOUSER) {
93 tname = getname(aname);
95 return PTR_ERR(tname);
99 code = osi_lookupname_internal(tname, followlink, NULL, dpp);
100 if (seg == AFS_UIOUSER) {
106 int osi_abspath(char *aname, char *buf, int buflen,
107 int followlink, char **pathp)
109 struct dentry *dp = NULL;
110 struct vfsmount *mnt = NULL;
115 tname = getname(aname);
117 return -PTR_ERR(tname);
118 code = osi_lookupname_internal(tname, followlink, &mnt, &dp);
120 #if defined(D_PATH_TAKES_STRUCT_PATH)
121 struct path p = { mnt, dp };
122 path = d_path(&p, buf, buflen);
124 path = d_path(dp, mnt, buf, buflen);
128 code = -PTR_ERR(path);
142 /* This could use some work, and support on more platforms. */
143 int afs_thread_wrapper(void *rock)
145 void (*proc)(void) = rock;
146 __module_get(THIS_MODULE);
150 module_put(THIS_MODULE);
154 void afs_start_thread(void (*proc)(void), char *name)
156 kthread_run(afs_thread_wrapper, proc, "%s", name);