Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
4922be51
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 2 年 前同步成功
通知
173
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看板
提交
4922be51
编写于
1月 05, 2016
作者:
D
Dave Chinner
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'xfs-dax-fixes-for-4.5' into for-next
上级
7eeabbd4
a6d7636e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
12 deletion
+24
-12
fs/xfs/xfs_file.c
fs/xfs/xfs_file.c
+16
-9
fs/xfs/xfs_iomap.c
fs/xfs/xfs_iomap.c
+8
-3
未找到文件。
fs/xfs/xfs_file.c
浏览文件 @
4922be51
...
@@ -402,19 +402,26 @@ xfs_file_splice_read(
...
@@ -402,19 +402,26 @@ xfs_file_splice_read(
if
(
XFS_FORCED_SHUTDOWN
(
ip
->
i_mount
))
if
(
XFS_FORCED_SHUTDOWN
(
ip
->
i_mount
))
return
-
EIO
;
return
-
EIO
;
xfs_rw_ilock
(
ip
,
XFS_IOLOCK_SHARED
);
trace_xfs_file_splice_read
(
ip
,
count
,
*
ppos
,
ioflags
);
trace_xfs_file_splice_read
(
ip
,
count
,
*
ppos
,
ioflags
);
/* for dax, we need to avoid the page cache */
/*
if
(
IS_DAX
(
VFS_I
(
ip
)))
* DAX inodes cannot ues the page cache for splice, so we have to push
ret
=
default_file_splice_read
(
infilp
,
ppos
,
pipe
,
count
,
flags
);
* them through the VFS IO path. This means it goes through
else
* ->read_iter, which for us takes the XFS_IOLOCK_SHARED. Hence we
ret
=
generic_file_splice_read
(
infilp
,
ppos
,
pipe
,
count
,
flags
);
* cannot lock the splice operation at this level for DAX inodes.
if
(
ret
>
0
)
*/
XFS_STATS_ADD
(
ip
->
i_mount
,
xs_read_bytes
,
ret
);
if
(
IS_DAX
(
VFS_I
(
ip
)))
{
ret
=
default_file_splice_read
(
infilp
,
ppos
,
pipe
,
count
,
flags
);
goto
out
;
}
xfs_rw_ilock
(
ip
,
XFS_IOLOCK_SHARED
);
ret
=
generic_file_splice_read
(
infilp
,
ppos
,
pipe
,
count
,
flags
);
xfs_rw_iunlock
(
ip
,
XFS_IOLOCK_SHARED
);
xfs_rw_iunlock
(
ip
,
XFS_IOLOCK_SHARED
);
out:
if
(
ret
>
0
)
XFS_STATS_ADD
(
ip
->
i_mount
,
xs_read_bytes
,
ret
);
return
ret
;
return
ret
;
}
}
...
...
fs/xfs/xfs_iomap.c
浏览文件 @
4922be51
...
@@ -203,15 +203,20 @@ xfs_iomap_write_direct(
...
@@ -203,15 +203,20 @@ xfs_iomap_write_direct(
* this outside the transaction context, but if we commit and then crash
* this outside the transaction context, but if we commit and then crash
* we may not have zeroed the blocks and this will be exposed on
* we may not have zeroed the blocks and this will be exposed on
* recovery of the allocation. Hence we must zero before commit.
* recovery of the allocation. Hence we must zero before commit.
*
* Further, if we are mapping unwritten extents here, we need to zero
* Further, if we are mapping unwritten extents here, we need to zero
* and convert them to written so that we don't need an unwritten extent
* and convert them to written so that we don't need an unwritten extent
* callback for DAX. This also means that we need to be able to dip into
* callback for DAX. This also means that we need to be able to dip into
* the reserve block pool
if there is no space left but we need to do
* the reserve block pool
for bmbt block allocation if there is no space
* unwritten extent conversion.
*
left but we need to do
unwritten extent conversion.
*/
*/
if
(
IS_DAX
(
VFS_I
(
ip
)))
{
if
(
IS_DAX
(
VFS_I
(
ip
)))
{
bmapi_flags
=
XFS_BMAPI_CONVERT
|
XFS_BMAPI_ZERO
;
bmapi_flags
=
XFS_BMAPI_CONVERT
|
XFS_BMAPI_ZERO
;
tp
->
t_flags
|=
XFS_TRANS_RESERVE
;
if
(
ISUNWRITTEN
(
imap
))
{
tp
->
t_flags
|=
XFS_TRANS_RESERVE
;
resblks
=
XFS_DIOSTRAT_SPACE_RES
(
mp
,
0
)
<<
1
;
}
}
}
error
=
xfs_trans_reserve
(
tp
,
&
M_RES
(
mp
)
->
tr_write
,
error
=
xfs_trans_reserve
(
tp
,
&
M_RES
(
mp
)
->
tr_write
,
resblks
,
resrtextents
);
resblks
,
resrtextents
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录