Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
a7a67e8a
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,发现更多精彩内容 >>
提交
a7a67e8a
编写于
4月 27, 2015
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ext4: split inode_operations for encrypted symlinks off the rest
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
3188b295
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
20 addition
and
26 deletion
+20
-26
fs/ext4/ext4.h
fs/ext4/ext4.h
+1
-0
fs/ext4/inode.c
fs/ext4/inode.c
+4
-2
fs/ext4/namei.c
fs/ext4/namei.c
+5
-4
fs/ext4/symlink.c
fs/ext4/symlink.c
+10
-20
未找到文件。
fs/ext4/ext4.h
浏览文件 @
a7a67e8a
...
...
@@ -2847,6 +2847,7 @@ extern int ext4_mpage_readpages(struct address_space *mapping,
unsigned
nr_pages
);
/* symlink.c */
extern
const
struct
inode_operations
ext4_encrypted_symlink_inode_operations
;
extern
const
struct
inode_operations
ext4_symlink_inode_operations
;
extern
const
struct
inode_operations
ext4_fast_symlink_inode_operations
;
...
...
fs/ext4/inode.c
浏览文件 @
a7a67e8a
...
...
@@ -4213,8 +4213,10 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
inode
->
i_op
=
&
ext4_dir_inode_operations
;
inode
->
i_fop
=
&
ext4_dir_operations
;
}
else
if
(
S_ISLNK
(
inode
->
i_mode
))
{
if
(
ext4_inode_is_fast_symlink
(
inode
)
&&
!
ext4_encrypted_inode
(
inode
))
{
if
(
ext4_encrypted_inode
(
inode
))
{
inode
->
i_op
=
&
ext4_encrypted_symlink_inode_operations
;
ext4_set_aops
(
inode
);
}
else
if
(
ext4_inode_is_fast_symlink
(
inode
))
{
inode
->
i_op
=
&
ext4_fast_symlink_inode_operations
;
nd_terminate_link
(
ei
->
i_data
,
inode
->
i_size
,
sizeof
(
ei
->
i_data
)
-
1
);
...
...
fs/ext4/namei.c
浏览文件 @
a7a67e8a
...
...
@@ -3206,9 +3206,11 @@ static int ext4_symlink(struct inode *dir,
goto
err_drop_inode
;
sd
->
len
=
cpu_to_le16
(
ostr
.
len
);
disk_link
.
name
=
(
char
*
)
sd
;
inode
->
i_op
=
&
ext4_encrypted_symlink_inode_operations
;
}
if
((
disk_link
.
len
>
EXT4_N_BLOCKS
*
4
))
{
if
(
!
encryption_required
)
inode
->
i_op
=
&
ext4_symlink_inode_operations
;
ext4_set_aops
(
inode
);
/*
...
...
@@ -3249,9 +3251,8 @@ static int ext4_symlink(struct inode *dir,
}
else
{
/* clear the extent format for fast symlink */
ext4_clear_inode_flag
(
inode
,
EXT4_INODE_EXTENTS
);
inode
->
i_op
=
encryption_required
?
&
ext4_symlink_inode_operations
:
&
ext4_fast_symlink_inode_operations
;
if
(
!
encryption_required
)
inode
->
i_op
=
&
ext4_fast_symlink_inode_operations
;
memcpy
((
char
*
)
&
EXT4_I
(
inode
)
->
i_data
,
disk_link
.
name
,
disk_link
.
len
);
inode
->
i_size
=
disk_link
.
len
-
1
;
...
...
fs/ext4/symlink.c
浏览文件 @
a7a67e8a
...
...
@@ -35,9 +35,6 @@ static void *ext4_follow_link(struct dentry *dentry, struct nameidata *nd)
int
res
;
u32
plen
,
max_size
=
inode
->
i_sb
->
s_blocksize
;
if
(
!
ext4_encrypted_inode
(
inode
))
return
page_follow_link_light
(
dentry
,
nd
);
ctx
=
ext4_get_fname_crypto_ctx
(
inode
,
inode
->
i_sb
->
s_blocksize
);
if
(
IS_ERR
(
ctx
))
return
ctx
;
...
...
@@ -97,18 +94,16 @@ static void *ext4_follow_link(struct dentry *dentry, struct nameidata *nd)
return
ERR_PTR
(
res
);
}
static
void
ext4_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
cookie
)
{
struct
page
*
page
=
cookie
;
if
(
!
page
)
{
kfree
(
nd_get_link
(
nd
));
}
else
{
kunmap
(
page
);
page_cache_release
(
page
);
}
}
const
struct
inode_operations
ext4_encrypted_symlink_inode_operations
=
{
.
readlink
=
generic_readlink
,
.
follow_link
=
ext4_follow_link
,
.
put_link
=
kfree_put_link
,
.
setattr
=
ext4_setattr
,
.
setxattr
=
generic_setxattr
,
.
getxattr
=
generic_getxattr
,
.
listxattr
=
ext4_listxattr
,
.
removexattr
=
generic_removexattr
,
};
#endif
static
void
*
ext4_follow_fast_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
...
...
@@ -120,13 +115,8 @@ static void *ext4_follow_fast_link(struct dentry *dentry, struct nameidata *nd)
const
struct
inode_operations
ext4_symlink_inode_operations
=
{
.
readlink
=
generic_readlink
,
#ifdef CONFIG_EXT4_FS_ENCRYPTION
.
follow_link
=
ext4_follow_link
,
.
put_link
=
ext4_put_link
,
#else
.
follow_link
=
page_follow_link_light
,
.
put_link
=
page_put_link
,
#endif
.
setattr
=
ext4_setattr
,
.
setxattr
=
generic_setxattr
,
.
getxattr
=
generic_getxattr
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录