Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
41d28bca
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
41d28bca
编写于
10月 12, 2014
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
switch d_materialise_unique() users to d_splice_alias()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
b5ae6b15
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
19 addition
and
29 deletion
+19
-29
Documentation/filesystems/nfs/Exporting
Documentation/filesystems/nfs/Exporting
+5
-18
Documentation/filesystems/porting
Documentation/filesystems/porting
+4
-0
fs/9p/vfs_inode.c
fs/9p/vfs_inode.c
+1
-1
fs/btrfs/inode.c
fs/btrfs/inode.c
+1
-1
fs/ceph/inode.c
fs/ceph/inode.c
+1
-1
fs/cifs/readdir.c
fs/cifs/readdir.c
+1
-1
fs/fuse/dir.c
fs/fuse/dir.c
+2
-2
fs/kernfs/dir.c
fs/kernfs/dir.c
+1
-1
fs/nfs/dir.c
fs/nfs/dir.c
+2
-2
fs/nfs/getroot.c
fs/nfs/getroot.c
+1
-1
include/linux/dcache.h
include/linux/dcache.h
+0
-1
未找到文件。
Documentation/filesystems/nfs/Exporting
浏览文件 @
41d28bca
...
...
@@ -72,24 +72,11 @@ c/ Helper routines to allocate anonymous dentries, and to help attach
DCACHE_DISCONNECTED) dentry is allocated and attached.
In the case of a directory, care is taken that only one dentry
can ever be attached.
d_splice_alias(inode, dentry) or d_materialise_unique(dentry, inode)
will introduce a new dentry into the tree; either the passed-in
dentry or a preexisting alias for the given inode (such as an
anonymous one created by d_obtain_alias), if appropriate. The two
functions differ in their handling of directories with preexisting
aliases:
d_splice_alias will use any existing IS_ROOT dentry, but it will
return -EIO rather than try to move a dentry with a different
parent. This is appropriate for local filesystems, which
should never see such an alias unless the filesystem is
corrupted somehow (for example, if two on-disk directory
entries refer to the same directory.)
d_materialise_unique will attempt to move any dentry. This is
appropriate for distributed filesystems, where finding a
directory other than where we last cached it may be a normal
consequence of concurrent operations on other hosts.
Both functions return NULL when the passed-in dentry is used,
following the calling convention of ->lookup.
d_splice_alias(inode, dentry) will introduce a new dentry into the tree;
either the passed-in dentry or a preexisting alias for the given inode
(such as an anonymous one created by d_obtain_alias), if appropriate.
It returns NULL when the passed-in dentry is used, following the calling
convention of ->lookup.
Filesystem Issues
...
...
Documentation/filesystems/porting
浏览文件 @
41d28bca
...
...
@@ -463,3 +463,7 @@ in your dentry operations instead.
of the in-tree instances did). inode_hash_lock is still held,
of course, so they are still serialized wrt removal from inode hash,
as well as wrt set() callback of iget5_locked().
--
[mandatory]
d_materialise_unique() is gone; d_splice_alias() does everything you
need now. Remember that they have opposite orders of arguments ;-/
fs/9p/vfs_inode.c
浏览文件 @
41d28bca
...
...
@@ -832,7 +832,7 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
* moved b under k and client parallely did a lookup for
* k/b.
*/
res
=
d_
materialise_unique
(
dentry
,
inode
);
res
=
d_
splice_alias
(
inode
,
dentry
);
if
(
!
res
)
v9fs_fid_add
(
dentry
,
fid
);
else
if
(
!
IS_ERR
(
res
))
...
...
fs/btrfs/inode.c
浏览文件 @
41d28bca
...
...
@@ -5303,7 +5303,7 @@ static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
return
ERR_CAST
(
inode
);
}
return
d_
materialise_unique
(
dentry
,
inode
);
return
d_
splice_alias
(
inode
,
dentry
);
}
unsigned
char
btrfs_filetype_table
[]
=
{
...
...
fs/ceph/inode.c
浏览文件 @
41d28bca
...
...
@@ -967,7 +967,7 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
/* dn must be unhashed */
if
(
!
d_unhashed
(
dn
))
d_drop
(
dn
);
realdn
=
d_
materialise_unique
(
dn
,
i
n
);
realdn
=
d_
splice_alias
(
in
,
d
n
);
if
(
IS_ERR
(
realdn
))
{
pr_err
(
"splice_dentry error %ld %p inode %p ino %llx.%llx
\n
"
,
PTR_ERR
(
realdn
),
dn
,
in
,
ceph_vinop
(
in
));
...
...
fs/cifs/readdir.c
浏览文件 @
41d28bca
...
...
@@ -123,7 +123,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
if
(
!
inode
)
goto
out
;
alias
=
d_
materialise_unique
(
dentry
,
inode
);
alias
=
d_
splice_alias
(
inode
,
dentry
);
if
(
alias
&&
!
IS_ERR
(
alias
))
dput
(
alias
);
out:
...
...
fs/fuse/dir.c
浏览文件 @
41d28bca
...
...
@@ -372,7 +372,7 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
if
(
inode
&&
get_node_id
(
inode
)
==
FUSE_ROOT_ID
)
goto
out_iput
;
newent
=
d_
materialise_unique
(
entry
,
inode
);
newent
=
d_
splice_alias
(
inode
,
entry
);
err
=
PTR_ERR
(
newent
);
if
(
IS_ERR
(
newent
))
goto
out_err
;
...
...
@@ -1320,7 +1320,7 @@ static int fuse_direntplus_link(struct file *file,
if
(
!
inode
)
goto
out
;
alias
=
d_
materialise_unique
(
dentry
,
inode
);
alias
=
d_
splice_alias
(
inode
,
dentry
);
err
=
PTR_ERR
(
alias
);
if
(
IS_ERR
(
alias
))
goto
out
;
...
...
fs/kernfs/dir.c
浏览文件 @
41d28bca
...
...
@@ -807,7 +807,7 @@ static struct dentry *kernfs_iop_lookup(struct inode *dir,
}
/* instantiate and hash dentry */
ret
=
d_
materialise_unique
(
dentry
,
inode
);
ret
=
d_
splice_alias
(
inode
,
dentry
);
out_unlock:
mutex_unlock
(
&
kernfs_mutex
);
return
ret
;
...
...
fs/nfs/dir.c
浏览文件 @
41d28bca
...
...
@@ -499,7 +499,7 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
if
(
IS_ERR
(
inode
))
goto
out
;
alias
=
d_
materialise_unique
(
dentry
,
inode
);
alias
=
d_
splice_alias
(
inode
,
dentry
);
if
(
IS_ERR
(
alias
))
goto
out
;
else
if
(
alias
)
{
...
...
@@ -1393,7 +1393,7 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
nfs_advise_use_readdirplus
(
dir
);
no_entry:
res
=
d_
materialise_unique
(
dentry
,
inode
);
res
=
d_
splice_alias
(
inode
,
dentry
);
if
(
res
!=
NULL
)
{
if
(
IS_ERR
(
res
))
goto
out_unblock_sillyrename
;
...
...
fs/nfs/getroot.c
浏览文件 @
41d28bca
...
...
@@ -51,7 +51,7 @@ static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *i
/*
* Ensure that this dentry is invisible to d_find_alias().
* Otherwise, it may be spliced into the tree by
* d_
materialise_unique
if a parent directory from the same
* d_
splice_alias
if a parent directory from the same
* filesystem gets mounted at a later time.
* This again causes shrink_dcache_for_umount_subtree() to
* Oops, since the test for IS_ROOT() will fail.
...
...
include/linux/dcache.h
浏览文件 @
41d28bca
...
...
@@ -230,7 +230,6 @@ extern seqlock_t rename_lock;
*/
extern
void
d_instantiate
(
struct
dentry
*
,
struct
inode
*
);
extern
struct
dentry
*
d_instantiate_unique
(
struct
dentry
*
,
struct
inode
*
);
#define d_materialise_unique(d, i) d_splice_alias(i, d)
extern
int
d_instantiate_no_diralias
(
struct
dentry
*
,
struct
inode
*
);
extern
void
__d_drop
(
struct
dentry
*
dentry
);
extern
void
d_drop
(
struct
dentry
*
dentry
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录