Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
coda
pioctl.c
Go to the documentation of this file.
1
/*
2
* Pioctl operations for Coda.
3
* Original version: (C) 1996 Peter Braam
4
* Rewritten for Linux 2.1: (C) 1997 Carnegie Mellon University
5
*
6
* Carnegie Mellon encourages users of this code to contribute improvements
7
* to the Coda project. Contact Peter Braam <
[email protected]
>.
8
*/
9
10
#include <linux/types.h>
11
#include <linux/kernel.h>
12
#include <linux/time.h>
13
#include <linux/fs.h>
14
#include <linux/stat.h>
15
#include <linux/errno.h>
16
#include <linux/string.h>
17
#include <
linux/namei.h
>
18
#include <linux/module.h>
19
#include <asm/uaccess.h>
20
21
#include <linux/coda.h>
22
#include <linux/coda_psdev.h>
23
24
#include "
coda_linux.h
"
25
26
/* pioctl ops */
27
static
int
coda_ioctl_permission(
struct
inode
*
inode
,
int
mask
);
28
static
long
coda_pioctl(
struct
file
*filp,
unsigned
int
cmd
,
29
unsigned
long
user_data
);
30
31
/* exported from this file */
32
const
struct
inode_operations
coda_ioctl_inode_operations
= {
33
.permission = coda_ioctl_permission,
34
.setattr =
coda_setattr
,
35
};
36
37
const
struct
file_operations
coda_ioctl_operations
= {
38
.owner =
THIS_MODULE
,
39
.unlocked_ioctl = coda_pioctl,
40
.llseek =
noop_llseek
,
41
};
42
43
/* the coda pioctl inode ops */
44
static
int
coda_ioctl_permission(
struct
inode
*
inode
,
int
mask
)
45
{
46
return
(mask &
MAY_EXEC
) ? -
EACCES
: 0;
47
}
48
49
static
long
coda_pioctl(
struct
file
*filp,
unsigned
int
cmd
,
50
unsigned
long
user_data
)
51
{
52
struct
path
path
;
53
int
error
;
54
struct
PioctlData
data
;
55
struct
inode *inode = filp->f_dentry->d_inode;
56
struct
inode *target_inode =
NULL
;
57
struct
coda_inode_info
*cnp;
58
59
/* get the Pioctl data arguments from user space */
60
if
(
copy_from_user
(&
data
, (
void
__user *)user_data,
sizeof
(
data
)))
61
return
-
EINVAL
;
62
63
/*
64
* Look up the pathname. Note that the pathname is in
65
* user memory, and namei takes care of this
66
*/
67
if
(
data
.follow)
68
error =
user_path
(
data
.path, &
path
);
69
else
70
error =
user_lpath
(
data
.path, &
path
);
71
72
if
(error)
73
return
error
;
74
75
target_inode =
path
.
dentry
->d_inode;
76
77
/* return if it is not a Coda inode */
78
if
(target_inode->
i_sb
!= inode->
i_sb
) {
79
error = -
EINVAL
;
80
goto
out
;
81
}
82
83
/* now proceed to make the upcall */
84
cnp = ITOC(target_inode);
85
86
error =
venus_pioctl
(inode->
i_sb
, &(cnp->
c_fid
), cmd, &
data
);
87
out
:
88
path_put
(&
path
);
89
return
error
;
90
}
Generated on Thu Jan 10 2013 14:46:15 for Linux Kernel by
1.8.2