Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
ipipe
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xenomai
ipipe
Commits
2903ff01
Commit
2903ff01
authored
Aug 28, 2012
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
switch simple cases of fget_light to fdget
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
a5b470ba
Changes
44
Hide whitespace changes
Inline
Side-by-side
Showing
44 changed files
with
633 additions
and
763 deletions
+633
-763
arch/alpha/kernel/osf_sys.c
arch/alpha/kernel/osf_sys.c
+6
-9
arch/ia64/kernel/perfmon.c
arch/ia64/kernel/perfmon.c
+7
-8
arch/parisc/hpux/fs.c
arch/parisc/hpux/fs.c
+8
-9
arch/powerpc/platforms/cell/spu_syscalls.c
arch/powerpc/platforms/cell/spu_syscalls.c
+9
-12
drivers/infiniband/core/ucma.c
drivers/infiniband/core/ucma.c
+6
-6
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_cmd.c
+9
-9
drivers/infiniband/core/uverbs_main.c
drivers/infiniband/core/uverbs_main.c
+5
-7
drivers/vfio/vfio.c
drivers/vfio/vfio.c
+8
-9
drivers/video/msm/mdp.c
drivers/video/msm/mdp.c
+5
-7
fs/btrfs/ioctl.c
fs/btrfs/ioctl.c
+12
-14
fs/coda/inode.c
fs/coda/inode.c
+7
-7
fs/compat.c
fs/compat.c
+40
-50
fs/compat_ioctl.c
fs/compat_ioctl.c
+12
-15
fs/eventpoll.c
fs/eventpoll.c
+10
-15
fs/ext4/ioctl.c
fs/ext4/ioctl.c
+7
-7
fs/fcntl.c
fs/fcntl.c
+14
-18
fs/fhandle.c
fs/fhandle.c
+7
-10
fs/ioctl.c
fs/ioctl.c
+9
-16
fs/locks.c
fs/locks.c
+9
-11
fs/namei.c
fs/namei.c
+17
-22
fs/notify/fanotify/fanotify_user.c
fs/notify/fanotify/fanotify_user.c
+13
-15
fs/notify/inotify/inotify_user.c
fs/notify/inotify/inotify_user.c
+14
-14
fs/ocfs2/cluster/heartbeat.c
fs/ocfs2/cluster/heartbeat.c
+19
-20
fs/open.c
fs/open.c
+30
-34
fs/read_write.c
fs/read_write.c
+77
-99
fs/readdir.c
fs/readdir.c
+16
-20
fs/select.c
fs/select.c
+12
-16
fs/signalfd.c
fs/signalfd.c
+6
-7
fs/splice.c
fs/splice.c
+32
-37
fs/stat.c
fs/stat.c
+5
-5
fs/statfs.c
fs/statfs.c
+4
-5
fs/sync.c
fs/sync.c
+14
-19
fs/timerfd.c
fs/timerfd.c
+22
-26
fs/utimes.c
fs/utimes.c
+5
-6
fs/xattr.c
fs/xattr.c
+22
-30
fs/xfs/xfs_dfrag.c
fs/xfs/xfs_dfrag.c
+18
-18
fs/xfs/xfs_ioctl.c
fs/xfs/xfs_ioctl.c
+6
-6
include/linux/file.h
include/linux/file.h
+3
-2
ipc/mqueue.c
ipc/mqueue.c
+41
-43
kernel/events/core.c
kernel/events/core.c
+30
-40
kernel/sys.c
kernel/sys.c
+8
-8
kernel/taskstats.c
kernel/taskstats.c
+5
-6
mm/fadvise.c
mm/fadvise.c
+17
-18
mm/readahead.c
mm/readahead.c
+7
-8
No files found.
arch/alpha/kernel/osf_sys.c
View file @
2903ff01
...
...
@@ -144,28 +144,25 @@ SYSCALL_DEFINE4(osf_getdirentries, unsigned int, fd,
struct
osf_dirent
__user
*
,
dirent
,
unsigned
int
,
count
,
long
__user
*
,
basep
)
{
int
error
,
fput_needed
;
struct
f
ile
*
file
;
int
error
;
struct
f
d
arg
=
fdget
(
fd
)
;
struct
osf_dirent_callback
buf
;
error
=
-
EBADF
;
file
=
fget_light
(
fd
,
&
fput_needed
);
if
(
!
file
)
goto
out
;
if
(
!
arg
.
file
)
return
-
EBADF
;
buf
.
dirent
=
dirent
;
buf
.
basep
=
basep
;
buf
.
count
=
count
;
buf
.
error
=
0
;
error
=
vfs_readdir
(
file
,
osf_filldir
,
&
buf
);
error
=
vfs_readdir
(
arg
.
file
,
osf_filldir
,
&
buf
);
if
(
error
>=
0
)
error
=
buf
.
error
;
if
(
count
!=
buf
.
count
)
error
=
count
-
buf
.
count
;
fput_light
(
file
,
fput_needed
);
out:
fdput
(
arg
);
return
error
;
}
...
...
arch/ia64/kernel/perfmon.c
View file @
2903ff01
...
...
@@ -4780,7 +4780,7 @@ recheck:
asmlinkage
long
sys_perfmonctl
(
int
fd
,
int
cmd
,
void
__user
*
arg
,
int
count
)
{
struct
f
ile
*
file
=
NULL
;
struct
f
d
f
=
{
NULL
,
0
}
;
pfm_context_t
*
ctx
=
NULL
;
unsigned
long
flags
=
0UL
;
void
*
args_k
=
NULL
;
...
...
@@ -4789,7 +4789,6 @@ sys_perfmonctl (int fd, int cmd, void __user *arg, int count)
int
narg
,
completed_args
=
0
,
call_made
=
0
,
cmd_flags
;
int
(
*
func
)(
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
struct
pt_regs
*
regs
);
int
(
*
getsize
)(
void
*
arg
,
size_t
*
sz
);
int
fput_needed
;
#define PFM_MAX_ARGSIZE 4096
/*
...
...
@@ -4878,17 +4877,17 @@ restart_args:
ret
=
-
EBADF
;
f
ile
=
fget_light
(
fd
,
&
fput_neede
d
);
if
(
unlikely
(
file
==
NULL
))
{
f
=
fdget
(
f
d
);
if
(
unlikely
(
f
.
f
ile
==
NULL
))
{
DPRINT
((
"invalid fd %d
\n
"
,
fd
));
goto
error_args
;
}
if
(
unlikely
(
PFM_IS_FILE
(
file
)
==
0
))
{
if
(
unlikely
(
PFM_IS_FILE
(
f
.
f
ile
)
==
0
))
{
DPRINT
((
"fd %d not related to perfmon
\n
"
,
fd
));
goto
error_args
;
}
ctx
=
file
->
private_data
;
ctx
=
f
.
f
ile
->
private_data
;
if
(
unlikely
(
ctx
==
NULL
))
{
DPRINT
((
"no context for fd %d
\n
"
,
fd
));
goto
error_args
;
...
...
@@ -4918,8 +4917,8 @@ abort_locked:
if
(
call_made
&&
PFM_CMD_RW_ARG
(
cmd
)
&&
copy_to_user
(
arg
,
args_k
,
base_sz
*
count
))
ret
=
-
EFAULT
;
error_args:
if
(
file
)
f
put_light
(
file
,
fput_needed
);
if
(
f
.
f
ile
)
f
dput
(
f
);
kfree
(
args_k
);
...
...
arch/parisc/hpux/fs.c
View file @
2903ff01
...
...
@@ -109,33 +109,32 @@ Efault:
int
hpux_getdents
(
unsigned
int
fd
,
struct
hpux_dirent
__user
*
dirent
,
unsigned
int
count
)
{
struct
f
ile
*
file
;
struct
f
d
arg
;
struct
hpux_dirent
__user
*
lastdirent
;
struct
getdents_callback
buf
;
int
error
=
-
EBADF
,
fput_needed
;
int
error
;
file
=
fget_light
(
fd
,
&
fput_neede
d
);
if
(
!
file
)
goto
out
;
arg
=
fdget
(
f
d
);
if
(
!
arg
.
file
)
return
-
EBADF
;
buf
.
current_dir
=
dirent
;
buf
.
previous
=
NULL
;
buf
.
count
=
count
;
buf
.
error
=
0
;
error
=
vfs_readdir
(
file
,
filldir
,
&
buf
);
error
=
vfs_readdir
(
arg
.
file
,
filldir
,
&
buf
);
if
(
error
>=
0
)
error
=
buf
.
error
;
lastdirent
=
buf
.
previous
;
if
(
lastdirent
)
{
if
(
put_user
(
file
->
f_pos
,
&
lastdirent
->
d_off
))
if
(
put_user
(
arg
.
file
->
f_pos
,
&
lastdirent
->
d_off
))
error
=
-
EFAULT
;
else
error
=
count
-
buf
.
count
;
}
fput_light
(
file
,
fput_needed
);
out:
fdput
(
arg
);
return
error
;
}
...
...
arch/powerpc/platforms/cell/spu_syscalls.c
View file @
2903ff01
...
...
@@ -69,8 +69,6 @@ SYSCALL_DEFINE4(spu_create, const char __user *, name, unsigned int, flags,
umode_t
,
mode
,
int
,
neighbor_fd
)
{
long
ret
;
struct
file
*
neighbor
;
int
fput_needed
;
struct
spufs_calls
*
calls
;
calls
=
spufs_calls_get
();
...
...
@@ -78,11 +76,11 @@ SYSCALL_DEFINE4(spu_create, const char __user *, name, unsigned int, flags,
return
-
ENOSYS
;
if
(
flags
&
SPU_CREATE_AFFINITY_SPU
)
{
struct
fd
neighbor
=
fdget
(
neighbor_fd
);
ret
=
-
EBADF
;
neighbor
=
fget_light
(
neighbor_fd
,
&
fput_needed
);
if
(
neighbor
)
{
ret
=
calls
->
create_thread
(
name
,
flags
,
mode
,
neighbor
);
fput_light
(
neighbor
,
fput_needed
);
if
(
neighbor
.
file
)
{
ret
=
calls
->
create_thread
(
name
,
flags
,
mode
,
neighbor
.
file
);
fdput
(
neighbor
);
}
}
else
ret
=
calls
->
create_thread
(
name
,
flags
,
mode
,
NULL
);
...
...
@@ -94,8 +92,7 @@ SYSCALL_DEFINE4(spu_create, const char __user *, name, unsigned int, flags,
asmlinkage
long
sys_spu_run
(
int
fd
,
__u32
__user
*
unpc
,
__u32
__user
*
ustatus
)
{
long
ret
;
struct
file
*
filp
;
int
fput_needed
;
struct
fd
arg
;
struct
spufs_calls
*
calls
;
calls
=
spufs_calls_get
();
...
...
@@ -103,10 +100,10 @@ asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, __u32 __user *ustatus)
return
-
ENOSYS
;
ret
=
-
EBADF
;
filp
=
fget_light
(
fd
,
&
fput_neede
d
);
if
(
filp
)
{
ret
=
calls
->
spu_run
(
filp
,
unpc
,
ustatus
);
f
put_light
(
filp
,
fput_needed
);
arg
=
fdget
(
f
d
);
if
(
arg
.
file
)
{
ret
=
calls
->
spu_run
(
arg
.
file
,
unpc
,
ustatus
);
f
dput
(
arg
);
}
spufs_calls_put
(
calls
);
...
...
drivers/infiniband/core/ucma.c
View file @
2903ff01
...
...
@@ -1184,20 +1184,20 @@ static ssize_t ucma_migrate_id(struct ucma_file *new_file,
struct
rdma_ucm_migrate_id
cmd
;
struct
rdma_ucm_migrate_resp
resp
;
struct
ucma_context
*
ctx
;
struct
f
ile
*
filp
;
struct
f
d
f
;
struct
ucma_file
*
cur_file
;
int
ret
=
0
,
fput_needed
;
int
ret
=
0
;
if
(
copy_from_user
(
&
cmd
,
inbuf
,
sizeof
(
cmd
)))
return
-
EFAULT
;
/* Get current fd to protect against it being closed */
f
ilp
=
fget_light
(
cmd
.
fd
,
&
fput_neede
d
);
if
(
!
f
ilp
)
f
=
fdget
(
cmd
.
f
d
);
if
(
!
f
.
file
)
return
-
ENOENT
;
/* Validate current fd and prevent destruction of id. */
ctx
=
ucma_get_ctx
(
f
ilp
->
private_data
,
cmd
.
id
);
ctx
=
ucma_get_ctx
(
f
.
file
->
private_data
,
cmd
.
id
);
if
(
IS_ERR
(
ctx
))
{
ret
=
PTR_ERR
(
ctx
);
goto
file_put
;
...
...
@@ -1231,7 +1231,7 @@ response:
ucma_put_ctx
(
ctx
);
file_put:
f
put_light
(
filp
,
fput_needed
);
f
dput
(
f
);
return
ret
;
}
...
...
drivers/infiniband/core/uverbs_cmd.c
View file @
2903ff01
...
...
@@ -705,9 +705,9 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
struct
ib_udata
udata
;
struct
ib_uxrcd_object
*
obj
;
struct
ib_xrcd
*
xrcd
=
NULL
;
struct
f
ile
*
f
=
NULL
;
struct
f
d
f
=
{
NULL
,
0
}
;
struct
inode
*
inode
=
NULL
;
int
ret
=
0
,
fput_needed
;
int
ret
=
0
;
int
new_xrcd
=
0
;
if
(
out_len
<
sizeof
resp
)
...
...
@@ -724,13 +724,13 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
if
(
cmd
.
fd
!=
-
1
)
{
/* search for file descriptor */
f
=
f
get_light
(
cmd
.
fd
,
&
fput_neede
d
);
if
(
!
f
)
{
f
=
f
dget
(
cmd
.
f
d
);
if
(
!
f
.
file
)
{
ret
=
-
EBADF
;
goto
err_tree_mutex_unlock
;
}
inode
=
f
->
f_
dentry
->
d_inode
;
inode
=
f
.
file
->
f_path
.
dentry
->
d_inode
;
xrcd
=
find_xrcd
(
file
->
device
,
inode
);
if
(
!
xrcd
&&
!
(
cmd
.
oflags
&
O_CREAT
))
{
/* no file descriptor. Need CREATE flag */
...
...
@@ -795,8 +795,8 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
goto
err_copy
;
}
if
(
f
)
f
put_light
(
f
,
fput_needed
);
if
(
f
.
file
)
f
dput
(
f
);
mutex_lock
(
&
file
->
mutex
);
list_add_tail
(
&
obj
->
uobject
.
list
,
&
file
->
ucontext
->
xrcd_list
);
...
...
@@ -825,8 +825,8 @@ err:
put_uobj_write
(
&
obj
->
uobject
);
err_tree_mutex_unlock:
if
(
f
)
f
put_light
(
f
,
fput_needed
);
if
(
f
.
file
)
f
dput
(
f
);
mutex_unlock
(
&
file
->
device
->
xrcd_tree_mutex
);
...
...
drivers/infiniband/core/uverbs_main.c
View file @
2903ff01
...
...
@@ -541,17 +541,15 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file,
struct
ib_uverbs_event_file
*
ib_uverbs_lookup_comp_file
(
int
fd
)
{
struct
ib_uverbs_event_file
*
ev_file
=
NULL
;
struct
file
*
filp
;
int
fput_needed
;
struct
fd
f
=
fdget
(
fd
);
filp
=
fget_light
(
fd
,
&
fput_needed
);
if
(
!
filp
)
if
(
!
f
.
file
)
return
NULL
;
if
(
f
ilp
->
f_op
!=
&
uverbs_event_fops
)
if
(
f
.
file
->
f_op
!=
&
uverbs_event_fops
)
goto
out
;
ev_file
=
f
ilp
->
private_data
;
ev_file
=
f
.
file
->
private_data
;
if
(
ev_file
->
is_async
)
{
ev_file
=
NULL
;
goto
out
;
...
...
@@ -560,7 +558,7 @@ struct ib_uverbs_event_file *ib_uverbs_lookup_comp_file(int fd)
kref_get
(
&
ev_file
->
ref
);
out:
f
put_light
(
filp
,
fput_needed
);
f
dput
(
f
);
return
ev_file
;
}
...
...
drivers/vfio/vfio.c
View file @
2903ff01
...
...
@@ -1014,25 +1014,25 @@ static void vfio_group_try_dissolve_container(struct vfio_group *group)
static
int
vfio_group_set_container
(
struct
vfio_group
*
group
,
int
container_fd
)
{
struct
f
ile
*
filep
;
struct
f
d
f
;
struct
vfio_container
*
container
;
struct
vfio_iommu_driver
*
driver
;
int
ret
=
0
,
fput_needed
;
int
ret
=
0
;
if
(
atomic_read
(
&
group
->
container_users
))
return
-
EINVAL
;
f
ilep
=
fget_light
(
container_fd
,
&
fput_neede
d
);
if
(
!
f
ilep
)
f
=
fdget
(
container_f
d
);
if
(
!
f
.
file
)
return
-
EBADF
;
/* Sanity check, is this really our fd? */
if
(
f
ilep
->
f_op
!=
&
vfio_fops
)
{
f
put_light
(
filep
,
fput_needed
);
if
(
f
.
file
->
f_op
!=
&
vfio_fops
)
{
f
dput
(
f
);
return
-
EINVAL
;
}
container
=
f
ilep
->
private_data
;
container
=
f
.
file
->
private_data
;
WARN_ON
(
!
container
);
/* fget ensures we don't race vfio_release */
mutex_lock
(
&
container
->
group_lock
);
...
...
@@ -1054,8 +1054,7 @@ static int vfio_group_set_container(struct vfio_group *group, int container_fd)
unlock_out:
mutex_unlock
(
&
container
->
group_lock
);
fput_light
(
filep
,
fput_needed
);
fdput
(
f
);
return
ret
;
}
...
...
drivers/video/msm/mdp.c
View file @
2903ff01
...
...
@@ -257,19 +257,17 @@ int get_img(struct mdp_img *img, struct fb_info *info,
unsigned
long
*
start
,
unsigned
long
*
len
,
struct
file
**
filep
)
{
int
put_needed
,
ret
=
0
;
struct
file
*
file
;
file
=
fget_light
(
img
->
memory_id
,
&
put_needed
);
if
(
file
==
NULL
)
int
ret
=
0
;
struct
fd
f
=
fdget
(
img
->
memory_id
);
if
(
f
.
file
==
NULL
)
return
-
1
;
if
(
MAJOR
(
file
->
f_dentry
->
d_inode
->
i_rdev
)
==
FB_MAJOR
)
{
if
(
MAJOR
(
f
.
f
ile
->
f_dentry
->
d_inode
->
i_rdev
)
==
FB_MAJOR
)
{
*
start
=
info
->
fix
.
smem_start
;
*
len
=
info
->
fix
.
smem_len
;
}
else
ret
=
-
1
;
f
put_light
(
file
,
put_needed
);
f
dput
(
f
);
return
ret
;
}
...
...
fs/btrfs/ioctl.c
View file @
2903ff01
...
...
@@ -1397,7 +1397,6 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
u64
*
transid
,
bool
readonly
,
struct
btrfs_qgroup_inherit
**
inherit
)
{
struct
file
*
src_file
;
int
namelen
;
int
ret
=
0
;
...
...
@@ -1421,15 +1420,14 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
ret
=
btrfs_mksubvol
(
&
file
->
f_path
,
name
,
namelen
,
NULL
,
transid
,
readonly
,
inherit
);
}
else
{
struct
fd
src
=
fdget
(
fd
);
struct
inode
*
src_inode
;
int
fput_needed
;
src_file
=
fget_light
(
fd
,
&
fput_needed
);
if
(
!
src_file
)
{
if
(
!
src
.
file
)
{
ret
=
-
EINVAL
;
goto
out_drop_write
;
}
src_inode
=
src
_
file
->
f_path
.
dentry
->
d_inode
;
src_inode
=
src
.
file
->
f_path
.
dentry
->
d_inode
;
if
(
src_inode
->
i_sb
!=
file
->
f_path
.
dentry
->
d_inode
->
i_sb
)
{
printk
(
KERN_INFO
"btrfs: Snapshot src from "
"another FS
\n
"
);
...
...
@@ -1439,7 +1437,7 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
BTRFS_I
(
src_inode
)
->
root
,
transid
,
readonly
,
inherit
);
}
f
put_light
(
src_file
,
fput_needed
);
f
dput
(
src
);
}
out_drop_write:
mnt_drop_write_file
(
file
);
...
...
@@ -2341,7 +2339,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
{
struct
inode
*
inode
=
fdentry
(
file
)
->
d_inode
;
struct
btrfs_root
*
root
=
BTRFS_I
(
inode
)
->
root
;
struct
f
ile
*
src_file
;
struct
f
d
src_file
;
struct
inode
*
src
;
struct
btrfs_trans_handle
*
trans
;
struct
btrfs_path
*
path
;
...
...
@@ -2350,7 +2348,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
struct
btrfs_key
key
;
u32
nritems
;
int
slot
;
int
ret
,
fput_needed
;
int
ret
;
u64
len
=
olen
;
u64
bs
=
root
->
fs_info
->
sb
->
s_blocksize
;
u64
hint_byte
;
...
...
@@ -2376,24 +2374,24 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
if
(
ret
)
return
ret
;
src_file
=
f
get_light
(
srcfd
,
&
fput_neede
d
);
if
(
!
src_file
)
{
src_file
=
f
dget
(
srcf
d
);
if
(
!
src_file
.
file
)
{
ret
=
-
EBADF
;
goto
out_drop_write
;
}
ret
=
-
EXDEV
;
if
(
src_file
->
f_path
.
mnt
!=
file
->
f_path
.
mnt
)
if
(
src_file
.
file
->
f_path
.
mnt
!=
file
->
f_path
.
mnt
)
goto
out_fput
;
src
=
src_file
->
f_dentry
->
d_inode
;
src
=
src_file
.
file
->
f_dentry
->
d_inode
;
ret
=
-
EINVAL
;
if
(
src
==
inode
)
goto
out_fput
;
/* the src must be open for reading */
if
(
!
(
src_file
->
f_mode
&
FMODE_READ
))
if
(
!
(
src_file
.
file
->
f_mode
&
FMODE_READ
))
goto
out_fput
;
/* don't make the dst file partly checksummed */
...
...
@@ -2724,7 +2722,7 @@ out_unlock:
vfree
(
buf
);
btrfs_free_path
(
path
);
out_fput:
f
put_light
(
src_file
,
fput_needed
);
f
dput
(
src_file
);
out_drop_write:
mnt_drop_write_file
(
file
);
return
ret
;
...
...
fs/coda/inode.c
View file @
2903ff01
...
...
@@ -107,9 +107,9 @@ static const struct super_operations coda_super_operations =
static
int
get_device_index
(
struct
coda_mount_data
*
data
)
{
struct
f
ile
*
file
;
struct
f
d
f
;
struct
inode
*
inode
;
int
idx
,
fput_needed
;
int
idx
;
if
(
data
==
NULL
)
{
printk
(
"coda_read_super: Bad mount data
\n
"
);
...
...
@@ -121,17 +121,17 @@ static int get_device_index(struct coda_mount_data *data)
return
-
1
;
}
f
ile
=
fget_light
(
data
->
fd
,
&
fput_neede
d
);
if
(
!
file
)
f
=
fdget
(
data
->
f
d
);
if
(
!
f
.
f
ile
)
goto
Ebadf
;
inode
=
file
->
f_path
.
dentry
->
d_inode
;
inode
=
f
.
f
ile
->
f_path
.
dentry
->
d_inode
;
if
(
!
S_ISCHR
(
inode
->
i_mode
)
||
imajor
(
inode
)
!=
CODA_PSDEV_MAJOR
)
{
f
put_light
(
file
,
fput_needed
);
f
dput
(
f
);
goto
Ebadf
;
}
idx
=
iminor
(
inode
);
f
put_light
(
file
,
fput_needed
);
f
dput
(
f
);
if
(
idx
<
0
||
idx
>=
MAX_CODADEVS
)
{
printk
(
"coda_read_super: Bad minor number
\n
"
);
...
...
fs/compat.c
View file @
2903ff01
...
...
@@ -870,22 +870,20 @@ asmlinkage long compat_sys_old_readdir(unsigned int fd,
struct
compat_old_linux_dirent
__user
*
dirent
,
unsigned
int
count
)
{
int
error
;
struct
file
*
file
;
int
fput_needed
;
struct
fd
f
=
fdget
(
fd
);
struct
compat_readdir_callback
buf
;
file
=
fget_light
(
fd
,
&
fput_needed
);
if
(
!
file
)
if
(
!
f
.
file
)
return
-
EBADF
;
buf
.
result
=
0
;
buf
.
dirent
=
dirent
;
error
=
vfs_readdir
(
file
,
compat_fillonedir
,
&
buf
);
error
=
vfs_readdir
(
f
.
f
ile
,
compat_fillonedir
,
&
buf
);
if
(
buf
.
result
)
error
=
buf
.
result
;
f
put_light
(
file
,
fput_needed
);
f
dput
(
f
);
return
error
;
}
...
...
@@ -949,17 +947,16 @@ efault:
asmlinkage
long
compat_sys_getdents
(
unsigned
int
fd
,
struct
compat_linux_dirent
__user
*
dirent
,
unsigned
int
count
)
{
struct
f
ile
*
file
;
struct
f
d
f
;
struct
compat_linux_dirent
__user
*
lastdirent
;
struct
compat_getdents_callback
buf
;
int
fput_needed
;
int
error
;
if
(
!
access_ok
(
VERIFY_WRITE
,
dirent
,
count
))
return
-
EFAULT
;
f
ile
=
fget_light
(
fd
,
&
fput_neede
d
);
if
(
!
file
)
f
=
fdget
(
f
d
);
if
(
!
f
.
f
ile
)
return
-
EBADF
;
buf
.
current_dir
=
dirent
;
...
...
@@ -967,17 +964,17 @@ asmlinkage long compat_sys_getdents(unsigned int fd,
buf
.
count
=
count
;
buf
.
error
=
0
;
error
=
vfs_readdir
(
file
,
compat_filldir
,
&
buf
);
error
=
vfs_readdir
(
f
.
f
ile
,
compat_filldir
,
&
buf
);
if
(
error
>=
0
)
error
=
buf
.
error
;
lastdirent
=
buf
.
previous
;
if
(
lastdirent
)
{
if
(
put_user
(
file
->
f_pos
,
&
lastdirent
->
d_off
))
if
(
put_user
(
f
.
f
ile
->
f_pos
,
&
lastdirent
->
d_off
))
error
=
-
EFAULT
;
else
error
=
count
-
buf
.
count
;
}
f
put_light
(
file
,
fput_needed
);
f
dput
(
f
);
return
error
;
}
...
...
@@ -1035,17 +1032,16 @@ efault:
asmlinkage
long
compat_sys_getdents64
(
unsigned
int
fd
,
struct
linux_dirent64
__user
*
dirent
,
unsigned
int
count
)
{
struct
f
ile
*
file
;
struct
f
d
f
;
struct
linux_dirent64
__user
*
lastdirent
;
struct
compat_getdents_callback64
buf
;
int
fput_needed
;
int
error
;
if
(
!
access_ok
(
VERIFY_WRITE
,
dirent
,
count
))
return
-
EFAULT
;
f
ile
=
fget_light
(
fd
,
&
fput_neede
d
);
if
(
!
file
)
f
=
fdget
(
f
d
);
if
(
!
f
.
f
ile
)
return
-
EBADF
;
buf
.
current_dir
=
dirent
;
...
...
@@ -1053,18 +1049,18 @@ asmlinkage long compat_sys_getdents64(unsigned int fd,
buf
.
count
=
count
;
buf
.
error
=
0
;
error
=
vfs_readdir
(
file
,
compat_filldir64
,
&
buf
);
error
=
vfs_readdir
(
f
.
f
ile
,
compat_filldir64
,
&
buf
);
if
(
error
>=
0
)
error
=
buf
.
error
;
lastdirent
=
buf
.
previous
;
if
(
lastdirent
)
{
typeof
(
lastdirent
->
d_off
)
d_off
=
file
->
f_pos
;
typeof
(
lastdirent
->
d_off
)
d_off
=
f
.
f
ile
->
f_pos
;
if
(
__put_user_unaligned
(
d_off
,
&
lastdirent
->
d_off
))
error
=
-
EFAULT
;
else
error
=
count
-
buf
.
count
;
}
f
put_light
(
file
,
fput_needed
);
f
dput
(
f
);
return
error
;
}
#endif
/* ! __ARCH_OMIT_COMPAT_SYS_GETDENTS64 */
...
...
@@ -1152,18 +1148,16 @@ asmlinkage ssize_t
compat_sys_readv
(
unsigned
long
fd
,
const
struct
compat_iovec
__user
*
vec
,
unsigned
long
vlen
)
{
struct
file
*
file
;
int
fput_needed
;
struct
fd
f
=
fdget
(
fd
);
ssize_t
ret
;
loff_t
pos
;
file
=
fget_light
(
fd
,
&
fput_needed
);
if
(
!
file
)
if
(
!
f
.
file
)
return
-
EBADF
;
pos
=
file
->
f_pos
;
ret
=
compat_readv
(
file
,
vec
,
vlen
,
&
pos
);
file
->
f_pos
=
pos
;
f
put_light
(
file
,
fput_needed
);
pos
=
f
.
f
ile
->
f_pos
;
ret
=
compat_readv
(
f
.
f
ile
,
vec
,
vlen
,
&
pos
);
f
.
f
ile
->
f_pos
=
pos
;
f
dput
(
f
);
return
ret
;
}
...
...
@@ -1171,19 +1165,18 @@ asmlinkage ssize_t
compat_sys_preadv64
(
unsigned
long
fd
,
const
struct
compat_iovec
__user
*
vec
,
unsigned
long
vlen
,
loff_t
pos
)