Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
cadc723c
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
cadc723c
编写于
16年前
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'bkl-removal' into next
上级
e89e896d
f839c4c1
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
100 addition
and
86 deletion
+100
-86
fs/lockd/clntproc.c
fs/lockd/clntproc.c
+6
-0
fs/lockd/svc4proc.c
fs/lockd/svc4proc.c
+2
-0
fs/lockd/svclock.c
fs/lockd/svclock.c
+6
-1
fs/lockd/svcproc.c
fs/lockd/svcproc.c
+2
-0
fs/nfs/dir.c
fs/nfs/dir.c
+12
-50
fs/nfs/file.c
fs/nfs/file.c
+0
-4
fs/nfs/inode.c
fs/nfs/inode.c
+61
-10
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+0
-2
fs/nfs/nfs4state.c
fs/nfs/nfs4state.c
+0
-2
fs/nfs/super.c
fs/nfs/super.c
+0
-4
fs/nfs/write.c
fs/nfs/write.c
+10
-5
net/sunrpc/sched.c
net/sunrpc/sched.c
+1
-8
未找到文件。
fs/lockd/clntproc.c
浏览文件 @
cadc723c
...
...
@@ -224,7 +224,9 @@ void nlm_release_call(struct nlm_rqst *call)
static
void
nlmclnt_rpc_release
(
void
*
data
)
{
lock_kernel
();
nlm_release_call
(
data
);
unlock_kernel
();
}
static
int
nlm_wait_on_grace
(
wait_queue_head_t
*
queue
)
...
...
@@ -710,7 +712,9 @@ static void nlmclnt_unlock_callback(struct rpc_task *task, void *data)
die:
return
;
retry_rebind:
lock_kernel
();
nlm_rebind_host
(
req
->
a_host
);
unlock_kernel
();
retry_unlock:
rpc_restart_call
(
task
);
}
...
...
@@ -788,7 +792,9 @@ static void nlmclnt_cancel_callback(struct rpc_task *task, void *data)
/* Don't ever retry more than 3 times */
if
(
req
->
a_retries
++
>=
NLMCLNT_MAX_RETRIES
)
goto
die
;
lock_kernel
();
nlm_rebind_host
(
req
->
a_host
);
unlock_kernel
();
rpc_restart_call
(
task
);
rpc_delay
(
task
,
30
*
HZ
);
}
...
...
This diff is collapsed.
Click to expand it.
fs/lockd/svc4proc.c
浏览文件 @
cadc723c
...
...
@@ -248,7 +248,9 @@ static void nlm4svc_callback_exit(struct rpc_task *task, void *data)
static
void
nlm4svc_callback_release
(
void
*
data
)
{
lock_kernel
();
nlm_release_call
(
data
);
unlock_kernel
();
}
static
const
struct
rpc_call_ops
nlm4svc_callback_ops
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/lockd/svclock.c
浏览文件 @
cadc723c
...
...
@@ -795,6 +795,7 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
dprintk
(
"lockd: GRANT_MSG RPC callback
\n
"
);
lock_kernel
();
/* if the block is not on a list at this point then it has
* been invalidated. Don't try to requeue it.
*
...
...
@@ -804,7 +805,7 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
* for nlm_blocked?
*/
if
(
list_empty
(
&
block
->
b_list
))
return
;
goto
out
;
/* Technically, we should down the file semaphore here. Since we
* move the block towards the head of the queue only, no harm
...
...
@@ -818,13 +819,17 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
}
nlmsvc_insert_block
(
block
,
timeout
);
svc_wake_up
(
block
->
b_daemon
);
out:
unlock_kernel
();
}
static
void
nlmsvc_grant_release
(
void
*
data
)
{
struct
nlm_rqst
*
call
=
data
;
lock_kernel
();
nlmsvc_release_block
(
call
->
a_block
);
unlock_kernel
();
}
static
const
struct
rpc_call_ops
nlmsvc_grant_ops
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/lockd/svcproc.c
浏览文件 @
cadc723c
...
...
@@ -278,7 +278,9 @@ static void nlmsvc_callback_exit(struct rpc_task *task, void *data)
static
void
nlmsvc_callback_release
(
void
*
data
)
{
lock_kernel
();
nlm_release_call
(
data
);
unlock_kernel
();
}
static
const
struct
rpc_call_ops
nlmsvc_callback_ops
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/dir.c
浏览文件 @
cadc723c
...
...
@@ -139,10 +139,8 @@ nfs_opendir(struct inode *inode, struct file *filp)
nfs_inc_stats
(
inode
,
NFSIOS_VFSOPEN
);
lock_kernel
();
/* Call generic open code in order to cache credentials */
res
=
nfs_open
(
inode
,
filp
);
unlock_kernel
();
return
res
;
}
...
...
@@ -536,8 +534,6 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
(
long
long
)
filp
->
f_pos
);
nfs_inc_stats
(
inode
,
NFSIOS_VFSGETDENTS
);
lock_kernel
();
/*
* filp->f_pos points to the dirent entry number.
* *desc->dir_cookie has the cookie for the next entry. We have
...
...
@@ -595,7 +591,6 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
}
out:
nfs_unblock_sillyrename
(
dentry
);
unlock_kernel
();
if
(
res
>
0
)
res
=
0
;
dfprintk
(
FILE
,
"NFS: readdir(%s/%s) returns %ld
\n
"
,
...
...
@@ -779,7 +774,6 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
struct
nfs_fattr
fattr
;
parent
=
dget_parent
(
dentry
);
lock_kernel
();
dir
=
parent
->
d_inode
;
nfs_inc_stats
(
dir
,
NFSIOS_DENTRYREVALIDATE
);
inode
=
dentry
->
d_inode
;
...
...
@@ -817,7 +811,6 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
nfs_set_verifier
(
dentry
,
nfs_save_change_attribute
(
dir
));
out_valid:
unlock_kernel
();
dput
(
parent
);
dfprintk
(
LOOKUPCACHE
,
"NFS: %s(%s/%s) is valid
\n
"
,
__func__
,
dentry
->
d_parent
->
d_name
.
name
,
...
...
@@ -836,7 +829,6 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
shrink_dcache_parent
(
dentry
);
}
d_drop
(
dentry
);
unlock_kernel
();
dput
(
parent
);
dfprintk
(
LOOKUPCACHE
,
"NFS: %s(%s/%s) is invalid
\n
"
,
__func__
,
dentry
->
d_parent
->
d_name
.
name
,
...
...
@@ -870,6 +862,14 @@ static int nfs_dentry_delete(struct dentry *dentry)
}
static
void
nfs_drop_nlink
(
struct
inode
*
inode
)
{
spin_lock
(
&
inode
->
i_lock
);
if
(
inode
->
i_nlink
>
0
)
drop_nlink
(
inode
);
spin_unlock
(
&
inode
->
i_lock
);
}
/*
* Called when the dentry loses inode.
* We use it to clean up silly-renamed files.
...
...
@@ -881,10 +881,8 @@ static void nfs_dentry_iput(struct dentry *dentry, struct inode *inode)
NFS_I
(
inode
)
->
cache_validity
|=
NFS_INO_INVALID_DATA
;
if
(
dentry
->
d_flags
&
DCACHE_NFSFS_RENAMED
)
{
lock_kernel
();
drop_nlink
(
inode
);
nfs_complete_unlink
(
dentry
,
inode
);
unlock_kernel
();
}
iput
(
inode
);
}
...
...
@@ -915,8 +913,6 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, stru
res
=
ERR_PTR
(
-
ENOMEM
);
dentry
->
d_op
=
NFS_PROTO
(
dir
)
->
dentry_ops
;
lock_kernel
();
/*
* If we're doing an exclusive create, optimize away the lookup
* but don't hash the dentry.
...
...
@@ -924,7 +920,7 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, stru
if
(
nfs_is_exclusive_create
(
dir
,
nd
))
{
d_instantiate
(
dentry
,
NULL
);
res
=
NULL
;
goto
out
_unlock
;
goto
out
;
}
parent
=
dentry
->
d_parent
;
...
...
@@ -952,8 +948,6 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, stru
nfs_set_verifier
(
dentry
,
nfs_save_change_attribute
(
dir
));
out_unblock_sillyrename:
nfs_unblock_sillyrename
(
parent
);
out_unlock:
unlock_kernel
();
out:
return
res
;
}
...
...
@@ -1011,9 +1005,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
}
/* Open the file on the server */
lock_kernel
();
res
=
nfs4_atomic_open
(
dir
,
dentry
,
nd
);
unlock_kernel
();
if
(
IS_ERR
(
res
))
{
error
=
PTR_ERR
(
res
);
switch
(
error
)
{
...
...
@@ -1075,9 +1067,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
* operations that change the directory. We therefore save the
* change attribute *before* we do the RPC call.
*/
lock_kernel
();
ret
=
nfs4_open_revalidate
(
dir
,
dentry
,
openflags
,
nd
);
unlock_kernel
();
out:
dput
(
parent
);
if
(
!
ret
)
...
...
@@ -1230,14 +1220,11 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode,
if
((
nd
->
flags
&
LOOKUP_CREATE
)
!=
0
)
open_flags
=
nd
->
intent
.
open
.
flags
;
lock_kernel
();
error
=
NFS_PROTO
(
dir
)
->
create
(
dir
,
dentry
,
&
attr
,
open_flags
,
nd
);
if
(
error
!=
0
)
goto
out_err
;
unlock_kernel
();
return
0
;
out_err:
unlock_kernel
();
d_drop
(
dentry
);
return
error
;
}
...
...
@@ -1260,14 +1247,11 @@ nfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
attr
.
ia_mode
=
mode
;
attr
.
ia_valid
=
ATTR_MODE
;
lock_kernel
();
status
=
NFS_PROTO
(
dir
)
->
mknod
(
dir
,
dentry
,
&
attr
,
rdev
);
if
(
status
!=
0
)
goto
out_err
;
unlock_kernel
();
return
0
;
out_err:
unlock_kernel
();
d_drop
(
dentry
);
return
status
;
}
...
...
@@ -1286,15 +1270,12 @@ static int nfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
attr
.
ia_valid
=
ATTR_MODE
;
attr
.
ia_mode
=
mode
|
S_IFDIR
;
lock_kernel
();
error
=
NFS_PROTO
(
dir
)
->
mkdir
(
dir
,
dentry
,
&
attr
);
if
(
error
!=
0
)
goto
out_err
;
unlock_kernel
();
return
0
;
out_err:
d_drop
(
dentry
);
unlock_kernel
();
return
error
;
}
...
...
@@ -1311,14 +1292,12 @@ static int nfs_rmdir(struct inode *dir, struct dentry *dentry)
dfprintk
(
VFS
,
"NFS: rmdir(%s/%ld), %s
\n
"
,
dir
->
i_sb
->
s_id
,
dir
->
i_ino
,
dentry
->
d_name
.
name
);
lock_kernel
();
error
=
NFS_PROTO
(
dir
)
->
rmdir
(
dir
,
&
dentry
->
d_name
);
/* Ensure the VFS deletes this inode */
if
(
error
==
0
&&
dentry
->
d_inode
!=
NULL
)
clear_nlink
(
dentry
->
d_inode
);
else
if
(
error
==
-
ENOENT
)
nfs_dentry_handle_enoent
(
dentry
);
unlock_kernel
();
return
error
;
}
...
...
@@ -1420,7 +1399,7 @@ static int nfs_safe_remove(struct dentry *dentry)
error
=
NFS_PROTO
(
dir
)
->
remove
(
dir
,
&
dentry
->
d_name
);
/* The VFS may want to delete this inode */
if
(
error
==
0
)
drop_nlink
(
inode
);
nfs_
drop_nlink
(
inode
);
nfs_mark_for_revalidate
(
inode
);
}
else
error
=
NFS_PROTO
(
dir
)
->
remove
(
dir
,
&
dentry
->
d_name
);
...
...
@@ -1443,7 +1422,6 @@ static int nfs_unlink(struct inode *dir, struct dentry *dentry)
dfprintk
(
VFS
,
"NFS: unlink(%s/%ld, %s)
\n
"
,
dir
->
i_sb
->
s_id
,
dir
->
i_ino
,
dentry
->
d_name
.
name
);
lock_kernel
();
spin_lock
(
&
dcache_lock
);
spin_lock
(
&
dentry
->
d_lock
);
if
(
atomic_read
(
&
dentry
->
d_count
)
>
1
)
{
...
...
@@ -1452,7 +1430,6 @@ static int nfs_unlink(struct inode *dir, struct dentry *dentry)
/* Start asynchronous writeout of the inode */
write_inode_now
(
dentry
->
d_inode
,
0
);
error
=
nfs_sillyrename
(
dir
,
dentry
);
unlock_kernel
();
return
error
;
}
if
(
!
d_unhashed
(
dentry
))
{
...
...
@@ -1466,7 +1443,6 @@ static int nfs_unlink(struct inode *dir, struct dentry *dentry)
nfs_set_verifier
(
dentry
,
nfs_save_change_attribute
(
dir
));
}
else
if
(
need_rehash
)
d_rehash
(
dentry
);
unlock_kernel
();
return
error
;
}
...
...
@@ -1503,13 +1479,9 @@ static int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *sym
attr
.
ia_mode
=
S_IFLNK
|
S_IRWXUGO
;
attr
.
ia_valid
=
ATTR_MODE
;
lock_kernel
();
page
=
alloc_page
(
GFP_HIGHUSER
);
if
(
!
page
)
{
unlock_kernel
();
if
(
!
page
)
return
-
ENOMEM
;
}
kaddr
=
kmap_atomic
(
page
,
KM_USER0
);
memcpy
(
kaddr
,
symname
,
pathlen
);
...
...
@@ -1524,7 +1496,6 @@ static int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *sym
dentry
->
d_name
.
name
,
symname
,
error
);
d_drop
(
dentry
);
__free_page
(
page
);
unlock_kernel
();
return
error
;
}
...
...
@@ -1542,7 +1513,6 @@ static int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *sym
}
else
__free_page
(
page
);
unlock_kernel
();
return
0
;
}
...
...
@@ -1556,14 +1526,12 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
old_dentry
->
d_parent
->
d_name
.
name
,
old_dentry
->
d_name
.
name
,
dentry
->
d_parent
->
d_name
.
name
,
dentry
->
d_name
.
name
);
lock_kernel
();
d_drop
(
dentry
);
error
=
NFS_PROTO
(
dir
)
->
link
(
inode
,
dir
,
&
dentry
->
d_name
);
if
(
error
==
0
)
{
atomic_inc
(
&
inode
->
i_count
);
d_add
(
dentry
,
inode
);
}
unlock_kernel
();
return
error
;
}
...
...
@@ -1603,7 +1571,6 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
* To prevent any new references to the target during the rename,
* we unhash the dentry and free the inode in advance.
*/
lock_kernel
();
if
(
!
d_unhashed
(
new_dentry
))
{
d_drop
(
new_dentry
);
rehash
=
new_dentry
;
...
...
@@ -1647,7 +1614,7 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
/* dentry still busy? */
goto
out
;
}
else
drop_nlink
(
new_inode
);
nfs_
drop_nlink
(
new_inode
);
go_ahead:
/*
...
...
@@ -1681,7 +1648,6 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
/* new dentry created? */
if
(
dentry
)
dput
(
dentry
);
unlock_kernel
();
return
error
;
}
...
...
@@ -1974,8 +1940,6 @@ int nfs_permission(struct inode *inode, int mask, struct nameidata *nd)
}
force_lookup:
lock_kernel
();
if
(
!
NFS_PROTO
(
inode
)
->
access
)
goto
out_notsup
;
...
...
@@ -1985,7 +1949,6 @@ int nfs_permission(struct inode *inode, int mask, struct nameidata *nd)
put_rpccred
(
cred
);
}
else
res
=
PTR_ERR
(
cred
);
unlock_kernel
();
out:
dfprintk
(
VFS
,
"NFS: permission(%s/%ld), mask=0x%x, res=%d
\n
"
,
inode
->
i_sb
->
s_id
,
inode
->
i_ino
,
mask
,
res
);
...
...
@@ -1994,7 +1957,6 @@ int nfs_permission(struct inode *inode, int mask, struct nameidata *nd)
res
=
nfs_revalidate_inode
(
NFS_SERVER
(
inode
),
inode
);
if
(
res
==
0
)
res
=
generic_permission
(
inode
,
mask
,
NULL
);
unlock_kernel
();
goto
out
;
}
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/file.c
浏览文件 @
cadc723c
...
...
@@ -128,9 +128,7 @@ nfs_file_open(struct inode *inode, struct file *filp)
return
res
;
nfs_inc_stats
(
inode
,
NFSIOS_VFSOPEN
);
lock_kernel
();
res
=
nfs_open
(
inode
,
filp
);
unlock_kernel
();
return
res
;
}
...
...
@@ -398,9 +396,7 @@ static int nfs_write_end(struct file *file, struct address_space *mapping,
zero_user_segment
(
page
,
pglen
,
PAGE_CACHE_SIZE
);
}
lock_kernel
();
status
=
nfs_updatepage
(
file
,
page
,
offset
,
copied
);
unlock_kernel
();
unlock_page
(
page
);
page_cache_release
(
page
);
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/inode.c
浏览文件 @
cadc723c
...
...
@@ -370,7 +370,6 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
if
((
attr
->
ia_valid
&
~
ATTR_FILE
)
==
0
)
return
0
;
lock_kernel
();
/* Write all dirty data */
if
(
S_ISREG
(
inode
->
i_mode
))
{
filemap_write_and_wait
(
inode
->
i_mapping
);
...
...
@@ -384,10 +383,65 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
error
=
NFS_PROTO
(
inode
)
->
setattr
(
dentry
,
&
fattr
,
attr
);
if
(
error
==
0
)
nfs_refresh_inode
(
inode
,
&
fattr
);
unlock_kernel
();
return
error
;
}
/**
* nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
* @inode: inode of the file used
* @offset: file offset to start truncating
*
* This is a copy of the common vmtruncate, but with the locking
* corrected to take into account the fact that NFS requires
* inode->i_size to be updated under the inode->i_lock.
*/
static
int
nfs_vmtruncate
(
struct
inode
*
inode
,
loff_t
offset
)
{
if
(
i_size_read
(
inode
)
<
offset
)
{
unsigned
long
limit
;
limit
=
current
->
signal
->
rlim
[
RLIMIT_FSIZE
].
rlim_cur
;
if
(
limit
!=
RLIM_INFINITY
&&
offset
>
limit
)
goto
out_sig
;
if
(
offset
>
inode
->
i_sb
->
s_maxbytes
)
goto
out_big
;
spin_lock
(
&
inode
->
i_lock
);
i_size_write
(
inode
,
offset
);
spin_unlock
(
&
inode
->
i_lock
);
}
else
{
struct
address_space
*
mapping
=
inode
->
i_mapping
;
/*
* truncation of in-use swapfiles is disallowed - it would
* cause subsequent swapout to scribble on the now-freed
* blocks.
*/
if
(
IS_SWAPFILE
(
inode
))
return
-
ETXTBSY
;
spin_lock
(
&
inode
->
i_lock
);
i_size_write
(
inode
,
offset
);
spin_unlock
(
&
inode
->
i_lock
);
/*
* unmap_mapping_range is called twice, first simply for
* efficiency so that truncate_inode_pages does fewer
* single-page unmaps. However after this first call, and
* before truncate_inode_pages finishes, it is possible for
* private pages to be COWed, which remain after
* truncate_inode_pages finishes, hence the second
* unmap_mapping_range call must be made for correctness.
*/
unmap_mapping_range
(
mapping
,
offset
+
PAGE_SIZE
-
1
,
0
,
1
);
truncate_inode_pages
(
mapping
,
offset
);
unmap_mapping_range
(
mapping
,
offset
+
PAGE_SIZE
-
1
,
0
,
1
);
}
return
0
;
out_sig:
send_sig
(
SIGXFSZ
,
current
,
0
);
out_big:
return
-
EFBIG
;
}
/**
* nfs_setattr_update_inode - Update inode metadata after a setattr call.
* @inode: pointer to struct inode
...
...
@@ -414,8 +468,7 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr)
}
if
((
attr
->
ia_valid
&
ATTR_SIZE
)
!=
0
)
{
nfs_inc_stats
(
inode
,
NFSIOS_SETATTRTRUNC
);
inode
->
i_size
=
attr
->
ia_size
;
vmtruncate
(
inode
,
attr
->
ia_size
);
nfs_vmtruncate
(
inode
,
attr
->
ia_size
);
}
}
...
...
@@ -645,7 +698,6 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
inode
->
i_sb
->
s_id
,
(
long
long
)
NFS_FILEID
(
inode
));
nfs_inc_stats
(
inode
,
NFSIOS_INODEREVALIDATE
);
lock_kernel
();
if
(
is_bad_inode
(
inode
))
goto
out_nowait
;
if
(
NFS_STALE
(
inode
))
...
...
@@ -694,7 +746,6 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
nfs_wake_up_inode
(
inode
);
out_nowait:
unlock_kernel
();
return
status
;
}
...
...
@@ -829,9 +880,9 @@ static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
if
(
S_ISDIR
(
inode
->
i_mode
))
nfsi
->
cache_validity
|=
NFS_INO_INVALID_DATA
;
}
if
(
i
node
->
i_size
==
nfs_size_to_loff_t
(
fattr
->
pre_size
)
&&
if
(
i
_size_read
(
inode
)
==
nfs_size_to_loff_t
(
fattr
->
pre_size
)
&&
nfsi
->
npages
==
0
)
i
node
->
i_size
=
nfs_size_to_loff_t
(
fattr
->
size
);
i
_size_write
(
inode
,
nfs_size_to_loff_t
(
fattr
->
size
)
);
}
}
...
...
@@ -972,7 +1023,7 @@ int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fa
(
fattr
->
valid
&
NFS_ATTR_WCC
)
==
0
)
{
memcpy
(
&
fattr
->
pre_ctime
,
&
inode
->
i_ctime
,
sizeof
(
fattr
->
pre_ctime
));
memcpy
(
&
fattr
->
pre_mtime
,
&
inode
->
i_mtime
,
sizeof
(
fattr
->
pre_mtime
));
fattr
->
pre_size
=
i
node
->
i_size
;
fattr
->
pre_size
=
i
_size_read
(
inode
)
;
fattr
->
valid
|=
NFS_ATTR_WCC
;
}
return
nfs_post_op_update_inode
(
inode
,
fattr
);
...
...
@@ -1057,7 +1108,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
/* Do we perhaps have any outstanding writes, or has
* the file grown beyond our last write? */
if
(
nfsi
->
npages
==
0
||
new_isize
>
cur_isize
)
{
i
node
->
i_size
=
new_isize
;
i
_size_write
(
inode
,
new_isize
)
;
invalid
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_INVALID_DATA
;
}
dprintk
(
"NFS: isize change on server for file %s/%ld
\n
"
,
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/nfs4proc.c
浏览文件 @
cadc723c
...
...
@@ -451,9 +451,7 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata)
/* Save the delegation */
memcpy
(
stateid
.
data
,
delegation
->
stateid
.
data
,
sizeof
(
stateid
.
data
));
rcu_read_unlock
();
lock_kernel
();
ret
=
nfs_may_open
(
state
->
inode
,
state
->
owner
->
so_cred
,
open_mode
);
unlock_kernel
();
if
(
ret
!=
0
)
goto
out
;
ret
=
-
EAGAIN
;
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/nfs4state.c
浏览文件 @
cadc723c
...
...
@@ -940,7 +940,6 @@ static int reclaimer(void *ptr)
allow_signal
(
SIGKILL
);
/* Ensure exclusive access to NFSv4 state */
lock_kernel
();
down_write
(
&
clp
->
cl_sem
);
/* Are there any NFS mounts out there? */
if
(
list_empty
(
&
clp
->
cl_superblocks
))
...
...
@@ -1000,7 +999,6 @@ static int reclaimer(void *ptr)
nfs_delegation_reap_unclaimed
(
clp
);
out:
up_write
(
&
clp
->
cl_sem
);
unlock_kernel
();
if
(
status
==
-
NFS4ERR_CB_PATH_DOWN
)
nfs_handle_cb_pathdown
(
clp
);
nfs4_clear_recover_bit
(
clp
);
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/super.c
浏览文件 @
cadc723c
...
...
@@ -374,8 +374,6 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
};
int
error
;
lock_kernel
();
error
=
server
->
nfs_client
->
rpc_ops
->
statfs
(
server
,
fh
,
&
res
);
if
(
error
<
0
)
goto
out_err
;
...
...
@@ -407,12 +405,10 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
buf
->
f_namelen
=
server
->
namelen
;
unlock_kernel
();
return
0
;
out_err:
dprintk
(
"%s: statfs error = %d
\n
"
,
__func__
,
-
error
);
unlock_kernel
();
return
error
;
}
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/write.c
浏览文件 @
cadc723c
...
...
@@ -133,16 +133,21 @@ static struct nfs_page *nfs_page_find_request(struct page *page)
static
void
nfs_grow_file
(
struct
page
*
page
,
unsigned
int
offset
,
unsigned
int
count
)
{
struct
inode
*
inode
=
page
->
mapping
->
host
;
loff_t
end
,
i_size
=
i_size_read
(
inode
)
;
pgoff_t
end_index
=
(
i_size
-
1
)
>>
PAGE_CACHE_SHIFT
;
loff_t
end
,
i_size
;
pgoff_t
end_index
;
spin_lock
(
&
inode
->
i_lock
);
i_size
=
i_size_read
(
inode
);
end_index
=
(
i_size
-
1
)
>>
PAGE_CACHE_SHIFT
;
if
(
i_size
>
0
&&
page
->
index
<
end_index
)
return
;
goto
out
;
end
=
((
loff_t
)
page
->
index
<<
PAGE_CACHE_SHIFT
)
+
((
loff_t
)
offset
+
count
);
if
(
i_size
>=
end
)
return
;
nfs_inc_stats
(
inode
,
NFSIOS_EXTENDWRITE
);
goto
out
;
i_size_write
(
inode
,
end
);
nfs_inc_stats
(
inode
,
NFSIOS_EXTENDWRITE
);
out:
spin_unlock
(
&
inode
->
i_lock
);
}
/* A writeback failed: mark the page as bad, and invalidate the page cache */
...
...
This diff is collapsed.
Click to expand it.
net/sunrpc/sched.c
浏览文件 @
cadc723c
...
...
@@ -576,9 +576,7 @@ EXPORT_SYMBOL_GPL(rpc_delay);
*/
static
void
rpc_prepare_task
(
struct
rpc_task
*
task
)
{
lock_kernel
();
task
->
tk_ops
->
rpc_call_prepare
(
task
,
task
->
tk_calldata
);
unlock_kernel
();
}
/*
...
...
@@ -588,9 +586,7 @@ void rpc_exit_task(struct rpc_task *task)
{
task
->
tk_action
=
NULL
;
if
(
task
->
tk_ops
->
rpc_call_done
!=
NULL
)
{
lock_kernel
();
task
->
tk_ops
->
rpc_call_done
(
task
,
task
->
tk_calldata
);
unlock_kernel
();
if
(
task
->
tk_action
!=
NULL
)
{
WARN_ON
(
RPC_ASSASSINATED
(
task
));
/* Always release the RPC slot and buffer memory */
...
...
@@ -602,11 +598,8 @@ EXPORT_SYMBOL_GPL(rpc_exit_task);
void
rpc_release_calldata
(
const
struct
rpc_call_ops
*
ops
,
void
*
calldata
)
{
if
(
ops
->
rpc_release
!=
NULL
)
{
lock_kernel
();
if
(
ops
->
rpc_release
!=
NULL
)
ops
->
rpc_release
(
calldata
);
unlock_kernel
();
}
}
/*
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部