Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
72c2d531
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
72c2d531
编写于
9月 22, 2013
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
file->f_op is never NULL...
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
22bd002e
变更
29
显示空白变更内容
内联
并排
Showing
29 changed file
with
74 addition
and
97 deletion
+74
-97
drivers/mtd/nand/nandsim.c
drivers/mtd/nand/nandsim.c
+1
-1
drivers/staging/comedi/comedi_compat32.c
drivers/staging/comedi/comedi_compat32.c
+0
-3
fs/autofs4/autofs_i.h
fs/autofs4/autofs_i.h
+1
-1
fs/autofs4/dev-ioctl.c
fs/autofs4/dev-ioctl.c
+0
-6
fs/binfmt_aout.c
fs/binfmt_aout.c
+2
-2
fs/binfmt_elf.c
fs/binfmt_elf.c
+3
-3
fs/binfmt_elf_fdpic.c
fs/binfmt_elf_fdpic.c
+1
-1
fs/binfmt_em86.c
fs/binfmt_em86.c
+1
-1
fs/coda/dir.c
fs/coda/dir.c
+0
-3
fs/coda/file.c
fs/coda/file.c
+3
-3
fs/compat_ioctl.c
fs/compat_ioctl.c
+2
-2
fs/coredump.c
fs/coredump.c
+1
-1
fs/ecryptfs/file.c
fs/ecryptfs/file.c
+4
-4
fs/eventpoll.c
fs/eventpoll.c
+1
-1
fs/exec.c
fs/exec.c
+15
-20
fs/fcntl.c
fs/fcntl.c
+2
-3
fs/file_table.c
fs/file_table.c
+2
-2
fs/ioctl.c
fs/ioctl.c
+2
-2
fs/locks.c
fs/locks.c
+6
-6
fs/open.c
fs/open.c
+6
-2
fs/read_write.c
fs/read_write.c
+8
-17
fs/readdir.c
fs/readdir.c
+1
-1
fs/select.c
fs/select.c
+2
-2
fs/splice.c
fs/splice.c
+3
-3
fs/sync.c
fs/sync.c
+1
-1
mm/memory.c
mm/memory.c
+1
-1
mm/mmap.c
mm/mmap.c
+2
-2
mm/nommu.c
mm/nommu.c
+1
-1
net/9p/trans_fd.c
net/9p/trans_fd.c
+2
-2
未找到文件。
drivers/mtd/nand/nandsim.c
浏览文件 @
72c2d531
...
...
@@ -575,7 +575,7 @@ static int alloc_device(struct nandsim *ns)
cfile
=
filp_open
(
cache_file
,
O_CREAT
|
O_RDWR
|
O_LARGEFILE
,
0600
);
if
(
IS_ERR
(
cfile
))
return
PTR_ERR
(
cfile
);
if
(
!
cfile
->
f_op
||
(
!
cfile
->
f_op
->
read
&&
!
cfile
->
f_op
->
aio_read
)
)
{
if
(
!
cfile
->
f_op
->
read
&&
!
cfile
->
f_op
->
aio_read
)
{
NS_ERR
(
"alloc_device: cache file not readable
\n
"
);
err
=
-
EINVAL
;
goto
err_close
;
...
...
drivers/staging/comedi/comedi_compat32.c
浏览文件 @
72c2d531
...
...
@@ -86,9 +86,6 @@ struct comedi32_insnlist_struct {
static
int
translated_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
if
(
!
file
->
f_op
)
return
-
ENOTTY
;
if
(
file
->
f_op
->
unlocked_ioctl
)
return
file
->
f_op
->
unlocked_ioctl
(
file
,
cmd
,
arg
);
...
...
fs/autofs4/autofs_i.h
浏览文件 @
72c2d531
...
...
@@ -271,7 +271,7 @@ void autofs4_clean_ino(struct autofs_info *);
static
inline
int
autofs_prepare_pipe
(
struct
file
*
pipe
)
{
if
(
!
pipe
->
f_op
||
!
pipe
->
f_op
->
write
)
if
(
!
pipe
->
f_op
->
write
)
return
-
EINVAL
;
if
(
!
S_ISFIFO
(
file_inode
(
pipe
)
->
i_mode
))
return
-
EINVAL
;
...
...
fs/autofs4/dev-ioctl.c
浏览文件 @
72c2d531
...
...
@@ -658,12 +658,6 @@ static int _autofs_dev_ioctl(unsigned int command, struct autofs_dev_ioctl __use
goto
out
;
}
if
(
!
fp
->
f_op
)
{
err
=
-
ENOTTY
;
fput
(
fp
);
goto
out
;
}
sbi
=
autofs_dev_ioctl_sbi
(
fp
);
if
(
!
sbi
||
sbi
->
magic
!=
AUTOFS_SBI_MAGIC
)
{
err
=
-
EINVAL
;
...
...
fs/binfmt_aout.c
浏览文件 @
72c2d531
...
...
@@ -221,7 +221,7 @@ static int load_aout_binary(struct linux_binprm * bprm)
* Requires a mmap handler. This prevents people from using a.out
* as part of an exploit attack against /proc-related vulnerabilities.
*/
if
(
!
bprm
->
file
->
f_op
||
!
bprm
->
file
->
f_op
->
mmap
)
if
(
!
bprm
->
file
->
f_op
->
mmap
)
return
-
ENOEXEC
;
fd_offset
=
N_TXTOFF
(
ex
);
...
...
@@ -374,7 +374,7 @@ static int load_aout_library(struct file *file)
* Requires a mmap handler. This prevents people from using a.out
* as part of an exploit attack against /proc-related vulnerabilities.
*/
if
(
!
file
->
f_op
||
!
file
->
f_op
->
mmap
)
if
(
!
file
->
f_op
->
mmap
)
goto
out
;
if
(
N_FLAGS
(
ex
))
...
...
fs/binfmt_elf.c
浏览文件 @
72c2d531
...
...
@@ -406,7 +406,7 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
goto
out
;
if
(
!
elf_check_arch
(
interp_elf_ex
))
goto
out
;
if
(
!
interpreter
->
f_op
||
!
interpreter
->
f_op
->
mmap
)
if
(
!
interpreter
->
f_op
->
mmap
)
goto
out
;
/*
...
...
@@ -607,7 +607,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
goto
out
;
if
(
!
elf_check_arch
(
&
loc
->
elf_ex
))
goto
out
;
if
(
!
bprm
->
file
->
f_op
||
!
bprm
->
file
->
f_op
->
mmap
)
if
(
!
bprm
->
file
->
f_op
->
mmap
)
goto
out
;
/* Now read in all of the header information */
...
...
@@ -1028,7 +1028,7 @@ static int load_elf_library(struct file *file)
/* First of all, some simple consistency checks */
if
(
elf_ex
.
e_type
!=
ET_EXEC
||
elf_ex
.
e_phnum
>
2
||
!
elf_check_arch
(
&
elf_ex
)
||
!
file
->
f_op
||
!
file
->
f_op
->
mmap
)
!
elf_check_arch
(
&
elf_ex
)
||
!
file
->
f_op
->
mmap
)
goto
out
;
/* Now read in all of the header information */
...
...
fs/binfmt_elf_fdpic.c
浏览文件 @
72c2d531
...
...
@@ -111,7 +111,7 @@ static int is_elf_fdpic(struct elfhdr *hdr, struct file *file)
return
0
;
if
(
!
elf_check_arch
(
hdr
)
||
!
elf_check_fdpic
(
hdr
))
return
0
;
if
(
!
file
->
f_op
||
!
file
->
f_op
->
mmap
)
if
(
!
file
->
f_op
->
mmap
)
return
0
;
return
1
;
}
...
...
fs/binfmt_em86.c
浏览文件 @
72c2d531
...
...
@@ -38,7 +38,7 @@ static int load_em86(struct linux_binprm *bprm)
/* First of all, some simple consistency checks */
if
((
elf_ex
.
e_type
!=
ET_EXEC
&&
elf_ex
.
e_type
!=
ET_DYN
)
||
(
!
((
elf_ex
.
e_machine
==
EM_386
)
||
(
elf_ex
.
e_machine
==
EM_486
)))
||
(
!
bprm
->
file
->
f_op
||
!
bprm
->
file
->
f_op
->
mmap
)
)
{
!
bprm
->
file
->
f_op
->
mmap
)
{
return
-
ENOEXEC
;
}
...
...
fs/coda/dir.c
浏览文件 @
72c2d531
...
...
@@ -387,9 +387,6 @@ static int coda_readdir(struct file *coda_file, struct dir_context *ctx)
BUG_ON
(
!
cfi
||
cfi
->
cfi_magic
!=
CODA_MAGIC
);
host_file
=
cfi
->
cfi_container
;
if
(
!
host_file
->
f_op
)
return
-
ENOTDIR
;
if
(
host_file
->
f_op
->
iterate
)
{
struct
inode
*
host_inode
=
file_inode
(
host_file
);
mutex_lock
(
&
host_inode
->
i_mutex
);
...
...
fs/coda/file.c
浏览文件 @
72c2d531
...
...
@@ -36,7 +36,7 @@ coda_file_read(struct file *coda_file, char __user *buf, size_t count, loff_t *p
BUG_ON
(
!
cfi
||
cfi
->
cfi_magic
!=
CODA_MAGIC
);
host_file
=
cfi
->
cfi_container
;
if
(
!
host_file
->
f_op
||
!
host_file
->
f_op
->
read
)
if
(
!
host_file
->
f_op
->
read
)
return
-
EINVAL
;
return
host_file
->
f_op
->
read
(
host_file
,
buf
,
count
,
ppos
);
...
...
@@ -75,7 +75,7 @@ coda_file_write(struct file *coda_file, const char __user *buf, size_t count, lo
BUG_ON
(
!
cfi
||
cfi
->
cfi_magic
!=
CODA_MAGIC
);
host_file
=
cfi
->
cfi_container
;
if
(
!
host_file
->
f_op
||
!
host_file
->
f_op
->
write
)
if
(
!
host_file
->
f_op
->
write
)
return
-
EINVAL
;
host_inode
=
file_inode
(
host_file
);
...
...
@@ -105,7 +105,7 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
BUG_ON
(
!
cfi
||
cfi
->
cfi_magic
!=
CODA_MAGIC
);
host_file
=
cfi
->
cfi_container
;
if
(
!
host_file
->
f_op
||
!
host_file
->
f_op
->
mmap
)
if
(
!
host_file
->
f_op
->
mmap
)
return
-
ENODEV
;
coda_inode
=
file_inode
(
coda_file
);
...
...
fs/compat_ioctl.c
浏览文件 @
72c2d531
...
...
@@ -1583,13 +1583,13 @@ asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
/*FALL THROUGH*/
default:
if
(
f
.
file
->
f_op
&&
f
.
file
->
f_op
->
compat_ioctl
)
{
if
(
f
.
file
->
f_op
->
compat_ioctl
)
{
error
=
f
.
file
->
f_op
->
compat_ioctl
(
f
.
file
,
cmd
,
arg
);
if
(
error
!=
-
ENOIOCTLCMD
)
goto
out_fput
;
}
if
(
!
f
.
file
->
f_op
||
!
f
.
file
->
f_op
->
unlocked_ioctl
)
if
(
!
f
.
file
->
f_op
->
unlocked_ioctl
)
goto
do_ioctl
;
break
;
}
...
...
fs/coredump.c
浏览文件 @
72c2d531
...
...
@@ -645,7 +645,7 @@ void do_coredump(siginfo_t *siginfo)
*/
if
(
!
uid_eq
(
inode
->
i_uid
,
current_fsuid
()))
goto
close_fail
;
if
(
!
cprm
.
file
->
f_op
||
!
cprm
.
file
->
f_op
->
write
)
if
(
!
cprm
.
file
->
f_op
->
write
)
goto
close_fail
;
if
(
do_truncate
(
cprm
.
file
->
f_path
.
dentry
,
0
,
0
,
cprm
.
file
))
goto
close_fail
;
...
...
fs/ecryptfs/file.c
浏览文件 @
72c2d531
...
...
@@ -271,7 +271,7 @@ static int ecryptfs_flush(struct file *file, fl_owner_t td)
{
struct
file
*
lower_file
=
ecryptfs_file_to_lower
(
file
);
if
(
lower_file
->
f_op
&&
lower_file
->
f_op
->
flush
)
{
if
(
lower_file
->
f_op
->
flush
)
{
filemap_write_and_wait
(
file
->
f_mapping
);
return
lower_file
->
f_op
->
flush
(
lower_file
,
td
);
}
...
...
@@ -305,7 +305,7 @@ static int ecryptfs_fasync(int fd, struct file *file, int flag)
struct
file
*
lower_file
=
NULL
;
lower_file
=
ecryptfs_file_to_lower
(
file
);
if
(
lower_file
->
f_op
&&
lower_file
->
f_op
->
fasync
)
if
(
lower_file
->
f_op
->
fasync
)
rc
=
lower_file
->
f_op
->
fasync
(
fd
,
lower_file
,
flag
);
return
rc
;
}
...
...
@@ -318,7 +318,7 @@ ecryptfs_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
if
(
ecryptfs_file_to_private
(
file
))
lower_file
=
ecryptfs_file_to_lower
(
file
);
if
(
lower_file
&&
lower_file
->
f_op
&&
lower_file
->
f_op
->
unlocked_ioctl
)
if
(
lower_file
->
f_op
&&
lower_file
->
f_op
->
unlocked_ioctl
)
rc
=
lower_file
->
f_op
->
unlocked_ioctl
(
lower_file
,
cmd
,
arg
);
return
rc
;
}
...
...
@@ -332,7 +332,7 @@ ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
if
(
ecryptfs_file_to_private
(
file
))
lower_file
=
ecryptfs_file_to_lower
(
file
);
if
(
lower_file
&&
lower_file
->
f_op
&&
lower_file
->
f_op
->
compat_ioctl
)
if
(
lower_file
->
f_op
&&
lower_file
->
f_op
->
compat_ioctl
)
rc
=
lower_file
->
f_op
->
compat_ioctl
(
lower_file
,
cmd
,
arg
);
return
rc
;
}
...
...
fs/eventpoll.c
浏览文件 @
72c2d531
...
...
@@ -1816,7 +1816,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
/* The target file descriptor must support poll */
error
=
-
EPERM
;
if
(
!
tf
.
file
->
f_op
||
!
tf
.
file
->
f_op
->
poll
)
if
(
!
tf
.
file
->
f_op
->
poll
)
goto
error_tgt_fput
;
/* Check if EPOLLWAKEUP is allowed */
...
...
fs/exec.c
浏览文件 @
72c2d531
...
...
@@ -106,6 +106,7 @@ static inline void put_binfmt(struct linux_binfmt * fmt)
*/
SYSCALL_DEFINE1
(
uselib
,
const
char
__user
*
,
library
)
{
struct
linux_binfmt
*
fmt
;
struct
file
*
file
;
struct
filename
*
tmp
=
getname
(
library
);
int
error
=
PTR_ERR
(
tmp
);
...
...
@@ -136,8 +137,6 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)
fsnotify_open
(
file
);
error
=
-
ENOEXEC
;
if
(
file
->
f_op
)
{
struct
linux_binfmt
*
fmt
;
read_lock
(
&
binfmt_lock
);
list_for_each_entry
(
fmt
,
&
formats
,
lh
)
{
...
...
@@ -153,7 +152,6 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)
break
;
}
read_unlock
(
&
binfmt_lock
);
}
exit:
fput
(
file
);
out:
...
...
@@ -1277,13 +1275,10 @@ static int check_unsafe_exec(struct linux_binprm *bprm)
*/
int
prepare_binprm
(
struct
linux_binprm
*
bprm
)
{
umode_t
mode
;
struct
inode
*
inode
=
file_inode
(
bprm
->
file
)
;
struct
inode
*
inode
=
file_inode
(
bprm
->
file
)
;
umode_t
mode
=
inode
->
i_mode
;
int
retval
;
mode
=
inode
->
i_mode
;
if
(
bprm
->
file
->
f_op
==
NULL
)
return
-
EACCES
;
/* clear any previous set[ug]id data from a previous binary */
bprm
->
cred
->
euid
=
current_euid
();
...
...
fs/fcntl.c
浏览文件 @
72c2d531
...
...
@@ -56,7 +56,7 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
return
-
EINVAL
;
}
if
(
filp
->
f_op
&&
filp
->
f_op
->
check_flags
)
if
(
filp
->
f_op
->
check_flags
)
error
=
filp
->
f_op
->
check_flags
(
arg
);
if
(
error
)
return
error
;
...
...
@@ -64,8 +64,7 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
/*
* ->fasync() is responsible for setting the FASYNC bit.
*/
if
(((
arg
^
filp
->
f_flags
)
&
FASYNC
)
&&
filp
->
f_op
&&
filp
->
f_op
->
fasync
)
{
if
(((
arg
^
filp
->
f_flags
)
&
FASYNC
)
&&
filp
->
f_op
->
fasync
)
{
error
=
filp
->
f_op
->
fasync
(
fd
,
filp
,
(
arg
&
FASYNC
)
!=
0
);
if
(
error
<
0
)
goto
out
;
...
...
fs/file_table.c
浏览文件 @
72c2d531
...
...
@@ -240,11 +240,11 @@ static void __fput(struct file *file)
locks_remove_flock
(
file
);
if
(
unlikely
(
file
->
f_flags
&
FASYNC
))
{
if
(
file
->
f_op
&&
file
->
f_op
->
fasync
)
if
(
file
->
f_op
->
fasync
)
file
->
f_op
->
fasync
(
-
1
,
file
,
0
);
}
ima_file_free
(
file
);
if
(
file
->
f_op
&&
file
->
f_op
->
release
)
if
(
file
->
f_op
->
release
)
file
->
f_op
->
release
(
inode
,
file
);
security_file_free
(
file
);
if
(
unlikely
(
S_ISCHR
(
inode
->
i_mode
)
&&
inode
->
i_cdev
!=
NULL
&&
...
...
fs/ioctl.c
浏览文件 @
72c2d531
...
...
@@ -37,7 +37,7 @@ static long vfs_ioctl(struct file *filp, unsigned int cmd,
{
int
error
=
-
ENOTTY
;
if
(
!
filp
->
f_op
||
!
filp
->
f_op
->
unlocked_ioctl
)
if
(
!
filp
->
f_op
->
unlocked_ioctl
)
goto
out
;
error
=
filp
->
f_op
->
unlocked_ioctl
(
filp
,
cmd
,
arg
);
...
...
@@ -501,7 +501,7 @@ static int ioctl_fioasync(unsigned int fd, struct file *filp,
/* Did FASYNC state change ? */
if
((
flag
^
filp
->
f_flags
)
&
FASYNC
)
{
if
(
filp
->
f_op
&&
filp
->
f_op
->
fasync
)
if
(
filp
->
f_op
->
fasync
)
/* fasync() adjusts filp->f_flags */
error
=
filp
->
f_op
->
fasync
(
fd
,
filp
,
on
);
else
...
...
fs/locks.c
浏览文件 @
72c2d531
...
...
@@ -1579,7 +1579,7 @@ EXPORT_SYMBOL(generic_setlease);
static
int
__vfs_setlease
(
struct
file
*
filp
,
long
arg
,
struct
file_lock
**
lease
)
{
if
(
filp
->
f_op
&&
filp
->
f_op
->
setlease
)
if
(
filp
->
f_op
->
setlease
)
return
filp
->
f_op
->
setlease
(
filp
,
arg
,
lease
);
else
return
generic_setlease
(
filp
,
arg
,
lease
);
...
...
@@ -1771,7 +1771,7 @@ SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd)
if
(
error
)
goto
out_free
;
if
(
f
.
file
->
f_op
&&
f
.
file
->
f_op
->
flock
)
if
(
f
.
file
->
f_op
->
flock
)
error
=
f
.
file
->
f_op
->
flock
(
f
.
file
,
(
can_sleep
)
?
F_SETLKW
:
F_SETLK
,
lock
);
...
...
@@ -1797,7 +1797,7 @@ SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd)
*/
int
vfs_test_lock
(
struct
file
*
filp
,
struct
file_lock
*
fl
)
{
if
(
filp
->
f_op
&&
filp
->
f_op
->
lock
)
if
(
filp
->
f_op
->
lock
)
return
filp
->
f_op
->
lock
(
filp
,
F_GETLK
,
fl
);
posix_test_lock
(
filp
,
fl
);
return
0
;
...
...
@@ -1909,7 +1909,7 @@ int fcntl_getlk(struct file *filp, struct flock __user *l)
*/
int
vfs_lock_file
(
struct
file
*
filp
,
unsigned
int
cmd
,
struct
file_lock
*
fl
,
struct
file_lock
*
conf
)
{
if
(
filp
->
f_op
&&
filp
->
f_op
->
lock
)
if
(
filp
->
f_op
->
lock
)
return
filp
->
f_op
->
lock
(
filp
,
cmd
,
fl
);
else
return
posix_lock_file
(
filp
,
fl
,
conf
);
...
...
@@ -2182,7 +2182,7 @@ void locks_remove_flock(struct file *filp)
if
(
!
inode
->
i_flock
)
return
;
if
(
filp
->
f_op
&&
filp
->
f_op
->
flock
)
{
if
(
filp
->
f_op
->
flock
)
{
struct
file_lock
fl
=
{
.
fl_pid
=
current
->
tgid
,
.
fl_file
=
filp
,
...
...
@@ -2246,7 +2246,7 @@ EXPORT_SYMBOL(posix_unblock_lock);
*/
int
vfs_cancel_lock
(
struct
file
*
filp
,
struct
file_lock
*
fl
)
{
if
(
filp
->
f_op
&&
filp
->
f_op
->
lock
)
if
(
filp
->
f_op
->
lock
)
return
filp
->
f_op
->
lock
(
filp
,
F_CANCELLK
,
fl
);
return
0
;
}
...
...
fs/open.c
浏览文件 @
72c2d531
...
...
@@ -693,6 +693,10 @@ static int do_dentry_open(struct file *f,
}
f
->
f_op
=
fops_get
(
inode
->
i_fop
);
if
(
unlikely
(
WARN_ON
(
!
f
->
f_op
)))
{
error
=
-
ENODEV
;
goto
cleanup_all
;
}
error
=
security_file_open
(
f
,
cred
);
if
(
error
)
...
...
@@ -702,7 +706,7 @@ static int do_dentry_open(struct file *f,
if
(
error
)
goto
cleanup_all
;
if
(
!
open
&&
f
->
f_op
)
if
(
!
open
)
open
=
f
->
f_op
->
open
;
if
(
open
)
{
error
=
open
(
inode
,
f
);
...
...
@@ -1023,7 +1027,7 @@ int filp_close(struct file *filp, fl_owner_t id)
return
0
;
}
if
(
filp
->
f_op
&&
filp
->
f_op
->
flush
)
if
(
filp
->
f_op
->
flush
)
retval
=
filp
->
f_op
->
flush
(
filp
,
id
);
if
(
likely
(
!
(
filp
->
f_mode
&
FMODE_PATH
)))
{
...
...
fs/read_write.c
浏览文件 @
72c2d531
...
...
@@ -257,7 +257,7 @@ loff_t vfs_llseek(struct file *file, loff_t offset, int whence)
fn
=
no_llseek
;
if
(
file
->
f_mode
&
FMODE_LSEEK
)
{
if
(
file
->
f_op
&&
file
->
f_op
->
llseek
)
if
(
file
->
f_op
->
llseek
)
fn
=
file
->
f_op
->
llseek
;
}
return
fn
(
file
,
offset
,
whence
);
...
...
@@ -384,7 +384,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
if
(
!
(
file
->
f_mode
&
FMODE_READ
))
return
-
EBADF
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
read
&&
!
file
->
f_op
->
aio_read
)
)
if
(
!
file
->
f_op
->
read
&&
!
file
->
f_op
->
aio_read
)
return
-
EINVAL
;
if
(
unlikely
(
!
access_ok
(
VERIFY_WRITE
,
buf
,
count
)))
return
-
EFAULT
;
...
...
@@ -433,7 +433,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
const
char
__user
*
p
;
ssize_t
ret
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
write
&&
!
file
->
f_op
->
aio_write
)
)
if
(
!
file
->
f_op
->
write
&&
!
file
->
f_op
->
aio_write
)
return
-
EINVAL
;
old_fs
=
get_fs
();
...
...
@@ -460,7 +460,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
if
(
!
(
file
->
f_mode
&
FMODE_WRITE
))
return
-
EBADF
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
write
&&
!
file
->
f_op
->
aio_write
)
)
if
(
!
file
->
f_op
->
write
&&
!
file
->
f_op
->
aio_write
)
return
-
EINVAL
;
if
(
unlikely
(
!
access_ok
(
VERIFY_READ
,
buf
,
count
)))
return
-
EFAULT
;
...
...
@@ -727,11 +727,6 @@ static ssize_t do_readv_writev(int type, struct file *file,
io_fn_t
fn
;
iov_fn_t
fnv
;
if
(
!
file
->
f_op
)
{
ret
=
-
EINVAL
;
goto
out
;
}
ret
=
rw_copy_check_uvector
(
type
,
uvector
,
nr_segs
,
ARRAY_SIZE
(
iovstack
),
iovstack
,
&
iov
);
if
(
ret
<=
0
)
...
...
@@ -778,7 +773,7 @@ ssize_t vfs_readv(struct file *file, const struct iovec __user *vec,
{
if
(
!
(
file
->
f_mode
&
FMODE_READ
))
return
-
EBADF
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
aio_read
&&
!
file
->
f_op
->
read
)
)
if
(
!
file
->
f_op
->
aio_read
&&
!
file
->
f_op
->
read
)
return
-
EINVAL
;
return
do_readv_writev
(
READ
,
file
,
vec
,
vlen
,
pos
);
...
...
@@ -791,7 +786,7 @@ ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
{
if
(
!
(
file
->
f_mode
&
FMODE_WRITE
))
return
-
EBADF
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
aio_write
&&
!
file
->
f_op
->
write
)
)
if
(
!
file
->
f_op
->
aio_write
&&
!
file
->
f_op
->
write
)
return
-
EINVAL
;
return
do_readv_writev
(
WRITE
,
file
,
vec
,
vlen
,
pos
);
...
...
@@ -906,10 +901,6 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
io_fn_t
fn
;
iov_fn_t
fnv
;
ret
=
-
EINVAL
;
if
(
!
file
->
f_op
)
goto
out
;
ret
=
-
EFAULT
;
if
(
!
access_ok
(
VERIFY_READ
,
uvector
,
nr_segs
*
sizeof
(
*
uvector
)))
goto
out
;
...
...
@@ -965,7 +956,7 @@ static size_t compat_readv(struct file *file,
goto
out
;
ret
=
-
EINVAL
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
aio_read
&&
!
file
->
f_op
->
read
)
)
if
(
!
file
->
f_op
->
aio_read
&&
!
file
->
f_op
->
read
)
goto
out
;
ret
=
compat_do_readv_writev
(
READ
,
file
,
vec
,
vlen
,
pos
);
...
...
@@ -1032,7 +1023,7 @@ static size_t compat_writev(struct file *file,
goto
out
;
ret
=
-
EINVAL
;
if
(
!
file
->
f_op
||
(
!
file
->
f_op
->
aio_write
&&
!
file
->
f_op
->
write
)
)
if
(
!
file
->
f_op
->
aio_write
&&
!
file
->
f_op
->
write
)
goto
out
;
ret
=
compat_do_readv_writev
(
WRITE
,
file
,
vec
,
vlen
,
pos
);
...
...
fs/readdir.c
浏览文件 @
72c2d531
...
...
@@ -24,7 +24,7 @@ int iterate_dir(struct file *file, struct dir_context *ctx)
{
struct
inode
*
inode
=
file_inode
(
file
);
int
res
=
-
ENOTDIR
;
if
(
!
file
->
f_op
||
!
file
->
f_op
->
iterate
)
if
(
!
file
->
f_op
->
iterate
)
goto
out
;
res
=
security_file_permission
(
file
,
MAY_READ
);
...
...
fs/select.c
浏览文件 @
72c2d531
...
...
@@ -455,7 +455,7 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)
const
struct
file_operations
*
f_op
;
f_op
=
f
.
file
->
f_op
;
mask
=
DEFAULT_POLLMASK
;
if
(
f_op
&&
f_op
->
poll
)
{
if
(
f_op
->
poll
)
{
wait_key_set
(
wait
,
in
,
out
,
bit
,
busy_flag
);
mask
=
(
*
f_op
->
poll
)(
f
.
file
,
wait
);
...
...
@@ -762,7 +762,7 @@ static inline unsigned int do_pollfd(struct pollfd *pollfd, poll_table *pwait,
mask
=
POLLNVAL
;
if
(
f
.
file
)
{
mask
=
DEFAULT_POLLMASK
;
if
(
f
.
file
->
f_op
&&
f
.
file
->
f_op
->
poll
)
{
if
(
f
.
file
->
f_op
->
poll
)
{
pwait
->
_key
=
pollfd
->
events
|
POLLERR
|
POLLHUP
;
pwait
->
_key
|=
busy_flag
;
mask
=
f
.
file
->
f_op
->
poll
(
f
.
file
,
pwait
);
...
...
fs/splice.c
浏览文件 @
72c2d531
...
...
@@ -695,7 +695,7 @@ static int pipe_to_sendpage(struct pipe_inode_info *pipe,
loff_t
pos
=
sd
->
pos
;
int
more
;
if
(
!
likely
(
file
->
f_op
&&
file
->
f_op
->
sendpage
))
if
(
!
likely
(
file
->
f_op
->
sendpage
))
return
-
EINVAL
;
more
=
(
sd
->
flags
&
SPLICE_F_MORE
)
?
MSG_MORE
:
0
;
...
...
@@ -1099,7 +1099,7 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
ssize_t
(
*
splice_write
)(
struct
pipe_inode_info
*
,
struct
file
*
,
loff_t
*
,
size_t
,
unsigned
int
);
if
(
out
->
f_op
&&
out
->
f_op
->
splice_write
)
if
(
out
->
f_op
->
splice_write
)
splice_write
=
out
->
f_op
->
splice_write
;
else
splice_write
=
default_file_splice_write
;
...
...
@@ -1125,7 +1125,7 @@ static long do_splice_to(struct file *in, loff_t *ppos,
if
(
unlikely
(
ret
<
0
))
return
ret
;
if
(
in
->
f_op
&&
in
->
f_op
->
splice_read
)
if
(
in
->
f_op
->
splice_read
)
splice_read
=
in
->
f_op
->
splice_read
;
else
splice_read
=
default_file_splice_read
;
...
...
fs/sync.c
浏览文件 @
72c2d531
...
...
@@ -177,7 +177,7 @@ SYSCALL_DEFINE1(syncfs, int, fd)
*/
int
vfs_fsync_range
(
struct
file
*
file
,
loff_t
start
,
loff_t
end
,
int
datasync
)
{
if
(
!
file
->
f_op
||
!
file
->
f_op
->
fsync
)
if
(
!
file
->
f_op
->
fsync
)
return
-
EINVAL
;
return
file
->
f_op
->
fsync
(
file
,
start
,
end
,
datasync
);
}
...
...
mm/memory.c
浏览文件 @
72c2d531
...
...
@@ -681,7 +681,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
if
(
vma
->
vm_ops
)
printk
(
KERN_ALERT
"vma->vm_ops->fault: %pSR
\n
"
,
vma
->
vm_ops
->
fault
);
if
(
vma
->
vm_file
&&
vma
->
vm_file
->
f_op
)
if
(
vma
->
vm_file
)
printk
(
KERN_ALERT
"vma->vm_file->f_op->mmap: %pSR
\n
"
,
vma
->
vm_file
->
f_op
->
mmap
);
dump_stack
();
...
...
mm/mmap.c
浏览文件 @
72c2d531
...
...
@@ -1299,7 +1299,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
vm_flags
&=
~
VM_MAYEXEC
;
}
if
(
!
file
->
f_op
||
!
file
->
f_op
->
mmap
)
if
(
!
file
->
f_op
->
mmap
)
return
-
ENODEV
;
if
(
vm_flags
&
(
VM_GROWSDOWN
|
VM_GROWSUP
))
return
-
EINVAL
;
...
...
@@ -1951,7 +1951,7 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
return
-
ENOMEM
;
get_area
=
current
->
mm
->
get_unmapped_area
;
if
(
file
&&
file
->
f_op
&&
file
->
f_op
->
get_unmapped_area
)
if
(
file
&&
file
->
f_op
->
get_unmapped_area
)
get_area
=
file
->
f_op
->
get_unmapped_area
;
addr
=
get_area
(
file
,
addr
,
len
,
pgoff
,
flags
);
if
(
IS_ERR_VALUE
(
addr
))
...
...
mm/nommu.c
浏览文件 @
72c2d531
...
...
@@ -937,7 +937,7 @@ static int validate_mmap_request(struct file *file,
struct
address_space
*
mapping
;
/* files must support mmap */
if
(
!
file
->
f_op
||
!
file
->
f_op
->
mmap
)
if
(
!
file
->
f_op
->
mmap
)
return
-
ENODEV
;
/* work out if what we've got could possibly be shared
...
...
net/9p/trans_fd.c
浏览文件 @
72c2d531
...
...
@@ -244,10 +244,10 @@ p9_fd_poll(struct p9_client *client, struct poll_table_struct *pt)
if
(
!
ts
)
return
-
EREMOTEIO
;
if
(
!
ts
->
rd
->
f_op
||
!
ts
->
rd
->
f_op
->
poll
)
if
(
!
ts
->
rd
->
f_op
->
poll
)
return
-
EIO
;
if
(
!
ts
->
wr
->
f_op
||
!
ts
->
wr
->
f_op
->
poll
)
if
(
!
ts
->
wr
->
f_op
->
poll
)
return
-
EIO
;
ret
=
ts
->
rd
->
f_op
->
poll
(
ts
->
rd
,
pt
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录