Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
af51a2ac
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
af51a2ac
编写于
6月 29, 2013
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ext4: ->tmpfile() support
very similar to ext3 counterpart... Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
46a1c2c7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
46 addition
and
1 deletion
+46
-1
fs/ext4/namei.c
fs/ext4/namei.c
+46
-1
未找到文件。
fs/ext4/namei.c
浏览文件 @
af51a2ac
...
...
@@ -2299,6 +2299,45 @@ static int ext4_mknod(struct inode *dir, struct dentry *dentry,
return
err
;
}
static
int
ext4_tmpfile
(
struct
inode
*
dir
,
struct
dentry
*
dentry
,
umode_t
mode
)
{
handle_t
*
handle
;
struct
inode
*
inode
;
int
err
,
retries
=
0
;
dquot_initialize
(
dir
);
retry:
inode
=
ext4_new_inode_start_handle
(
dir
,
mode
,
NULL
,
0
,
NULL
,
EXT4_HT_DIR
,
EXT4_MAXQUOTAS_INIT_BLOCKS
(
dir
->
i_sb
)
+
4
+
EXT4_XATTR_TRANS_BLOCKS
);
handle
=
ext4_journal_current_handle
();
err
=
PTR_ERR
(
inode
);
if
(
!
IS_ERR
(
inode
))
{
inode
->
i_op
=
&
ext4_file_inode_operations
;
inode
->
i_fop
=
&
ext4_file_operations
;
ext4_set_aops
(
inode
);
err
=
ext4_orphan_add
(
handle
,
inode
);
if
(
err
)
goto
err_drop_inode
;
mark_inode_dirty
(
inode
);
d_tmpfile
(
dentry
,
inode
);
unlock_new_inode
(
inode
);
}
if
(
handle
)
ext4_journal_stop
(
handle
);
if
(
err
==
-
ENOSPC
&&
ext4_should_retry_alloc
(
dir
->
i_sb
,
&
retries
))
goto
retry
;
return
err
;
err_drop_inode:
ext4_journal_stop
(
handle
);
unlock_new_inode
(
inode
);
iput
(
inode
);
return
err
;
}
struct
ext4_dir_entry_2
*
ext4_init_dot_dotdot
(
struct
inode
*
inode
,
struct
ext4_dir_entry_2
*
de
,
int
blocksize
,
int
csum_size
,
...
...
@@ -2906,7 +2945,7 @@ static int ext4_link(struct dentry *old_dentry,
retry:
handle
=
ext4_journal_start
(
dir
,
EXT4_HT_DIR
,
(
EXT4_DATA_TRANS_BLOCKS
(
dir
->
i_sb
)
+
EXT4_INDEX_EXTRA_TRANS_BLOCKS
));
EXT4_INDEX_EXTRA_TRANS_BLOCKS
)
+
1
);
if
(
IS_ERR
(
handle
))
return
PTR_ERR
(
handle
);
...
...
@@ -2920,6 +2959,11 @@ static int ext4_link(struct dentry *old_dentry,
err
=
ext4_add_entry
(
handle
,
dentry
,
inode
);
if
(
!
err
)
{
ext4_mark_inode_dirty
(
handle
,
inode
);
/* this can happen only for tmpfile being
* linked the first time
*/
if
(
inode
->
i_nlink
==
1
)
ext4_orphan_del
(
handle
,
inode
);
d_instantiate
(
dentry
,
inode
);
}
else
{
drop_nlink
(
inode
);
...
...
@@ -3172,6 +3216,7 @@ const struct inode_operations ext4_dir_inode_operations = {
.
mkdir
=
ext4_mkdir
,
.
rmdir
=
ext4_rmdir
,
.
mknod
=
ext4_mknod
,
.
tmpfile
=
ext4_tmpfile
,
.
rename
=
ext4_rename
,
.
setattr
=
ext4_setattr
,
.
setxattr
=
generic_setxattr
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录