Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
32438cf9
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看板
提交
32438cf9
编写于
8月 17, 2016
作者:
D
Dave Chinner
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'iomap-fixes-4.8-rc3' into for-next
上级
a03f1a66
1d4795e7
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
71 addition
and
20 deletion
+71
-20
fs/iomap.c
fs/iomap.c
+13
-8
fs/xfs/xfs_iomap.c
fs/xfs/xfs_iomap.c
+49
-10
fs/xfs/xfs_iomap.h
fs/xfs/xfs_iomap.h
+1
-0
fs/xfs/xfs_iops.c
fs/xfs/xfs_iops.c
+8
-1
fs/xfs/xfs_trace.h
fs/xfs/xfs_trace.h
+0
-1
未找到文件。
fs/iomap.c
浏览文件 @
32438cf9
...
...
@@ -84,8 +84,11 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
* Now the data has been copied, commit the range we've copied. This
* should not fail unless the filesystem has had a fatal error.
*/
ret
=
ops
->
iomap_end
(
inode
,
pos
,
length
,
written
>
0
?
written
:
0
,
flags
,
&
iomap
);
if
(
ops
->
iomap_end
)
{
ret
=
ops
->
iomap_end
(
inode
,
pos
,
length
,
written
>
0
?
written
:
0
,
flags
,
&
iomap
);
}
return
written
?
written
:
ret
;
}
...
...
@@ -194,12 +197,9 @@ iomap_write_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
if
(
mapping_writably_mapped
(
inode
->
i_mapping
))
flush_dcache_page
(
page
);
pagefault_disable
();
copied
=
iov_iter_copy_from_user_atomic
(
page
,
i
,
offset
,
bytes
);
pagefault_enable
();
flush_dcache_page
(
page
);
mark_page_accessed
(
page
);
status
=
iomap_write_end
(
inode
,
pos
,
bytes
,
copied
,
page
);
if
(
unlikely
(
status
<
0
))
...
...
@@ -470,13 +470,18 @@ int iomap_fiemap(struct inode *inode, struct fiemap_extent_info *fi,
if
(
ret
)
return
ret
;
ret
=
filemap_write_and_wait
(
inode
->
i_mapping
);
if
(
ret
)
return
ret
;
if
(
fi
->
fi_flags
&
FIEMAP_FLAG_SYNC
)
{
ret
=
filemap_write_and_wait
(
inode
->
i_mapping
);
if
(
ret
)
return
ret
;
}
while
(
len
>
0
)
{
ret
=
iomap_apply
(
inode
,
start
,
len
,
0
,
ops
,
&
ctx
,
iomap_fiemap_actor
);
/* inode with no (attribute) mapping will give ENOENT */
if
(
ret
==
-
ENOENT
)
break
;
if
(
ret
<
0
)
return
ret
;
if
(
ret
==
0
)
...
...
fs/xfs/xfs_iomap.c
浏览文件 @
32438cf9
...
...
@@ -1041,20 +1041,14 @@ xfs_file_iomap_begin(
return
error
;
trace_xfs_iomap_alloc
(
ip
,
offset
,
length
,
0
,
&
imap
);
xfs_bmbt_to_iomap
(
ip
,
iomap
,
&
imap
);
}
else
if
(
nimaps
)
{
xfs_iunlock
(
ip
,
XFS_ILOCK_EXCL
);
trace_xfs_iomap_found
(
ip
,
offset
,
length
,
0
,
&
imap
);
xfs_bmbt_to_iomap
(
ip
,
iomap
,
&
imap
);
}
else
{
ASSERT
(
nimaps
);
xfs_iunlock
(
ip
,
XFS_ILOCK_EXCL
);
trace_xfs_iomap_not_found
(
ip
,
offset
,
length
,
0
,
&
imap
);
iomap
->
blkno
=
IOMAP_NULL_BLOCK
;
iomap
->
type
=
IOMAP_HOLE
;
iomap
->
offset
=
offset
;
iomap
->
length
=
length
;
trace_xfs_iomap_found
(
ip
,
offset
,
length
,
0
,
&
imap
);
}
xfs_bmbt_to_iomap
(
ip
,
iomap
,
&
imap
);
return
0
;
}
...
...
@@ -1116,3 +1110,48 @@ struct iomap_ops xfs_iomap_ops = {
.
iomap_begin
=
xfs_file_iomap_begin
,
.
iomap_end
=
xfs_file_iomap_end
,
};
static
int
xfs_xattr_iomap_begin
(
struct
inode
*
inode
,
loff_t
offset
,
loff_t
length
,
unsigned
flags
,
struct
iomap
*
iomap
)
{
struct
xfs_inode
*
ip
=
XFS_I
(
inode
);
struct
xfs_mount
*
mp
=
ip
->
i_mount
;
xfs_fileoff_t
offset_fsb
=
XFS_B_TO_FSBT
(
mp
,
offset
);
xfs_fileoff_t
end_fsb
=
XFS_B_TO_FSB
(
mp
,
offset
+
length
);
struct
xfs_bmbt_irec
imap
;
int
nimaps
=
1
,
error
=
0
;
unsigned
lockmode
;
if
(
XFS_FORCED_SHUTDOWN
(
mp
))
return
-
EIO
;
lockmode
=
xfs_ilock_data_map_shared
(
ip
);
/* if there are no attribute fork or extents, return ENOENT */
if
(
XFS_IFORK_Q
(
ip
)
||
!
ip
->
i_d
.
di_anextents
)
{
error
=
-
ENOENT
;
goto
out_unlock
;
}
ASSERT
(
ip
->
i_d
.
di_aformat
!=
XFS_DINODE_FMT_LOCAL
);
error
=
xfs_bmapi_read
(
ip
,
offset_fsb
,
end_fsb
-
offset_fsb
,
&
imap
,
&
nimaps
,
XFS_BMAPI_ENTIRE
|
XFS_BMAPI_ATTRFORK
);
out_unlock:
xfs_iunlock
(
ip
,
lockmode
);
if
(
!
error
)
{
ASSERT
(
nimaps
);
xfs_bmbt_to_iomap
(
ip
,
iomap
,
&
imap
);
}
return
error
;
}
struct
iomap_ops
xfs_xattr_iomap_ops
=
{
.
iomap_begin
=
xfs_xattr_iomap_begin
,
};
fs/xfs/xfs_iomap.h
浏览文件 @
32438cf9
...
...
@@ -35,5 +35,6 @@ void xfs_bmbt_to_iomap(struct xfs_inode *, struct iomap *,
struct
xfs_bmbt_irec
*
);
extern
struct
iomap_ops
xfs_iomap_ops
;
extern
struct
iomap_ops
xfs_xattr_iomap_ops
;
#endif
/* __XFS_IOMAP_H__*/
fs/xfs/xfs_iops.c
浏览文件 @
32438cf9
...
...
@@ -1009,7 +1009,14 @@ xfs_vn_fiemap(
int
error
;
xfs_ilock
(
XFS_I
(
inode
),
XFS_IOLOCK_SHARED
);
error
=
iomap_fiemap
(
inode
,
fieinfo
,
start
,
length
,
&
xfs_iomap_ops
);
if
(
fieinfo
->
fi_flags
&
FIEMAP_FLAG_XATTR
)
{
fieinfo
->
fi_flags
&=
~
FIEMAP_FLAG_XATTR
;
error
=
iomap_fiemap
(
inode
,
fieinfo
,
start
,
length
,
&
xfs_xattr_iomap_ops
);
}
else
{
error
=
iomap_fiemap
(
inode
,
fieinfo
,
start
,
length
,
&
xfs_iomap_ops
);
}
xfs_iunlock
(
XFS_I
(
inode
),
XFS_IOLOCK_SHARED
);
return
error
;
...
...
fs/xfs/xfs_trace.h
浏览文件 @
32438cf9
...
...
@@ -1298,7 +1298,6 @@ DEFINE_IOMAP_EVENT(xfs_get_blocks_alloc);
DEFINE_IOMAP_EVENT
(
xfs_get_blocks_map_direct
);
DEFINE_IOMAP_EVENT
(
xfs_iomap_alloc
);
DEFINE_IOMAP_EVENT
(
xfs_iomap_found
);
DEFINE_IOMAP_EVENT
(
xfs_iomap_not_found
);
DECLARE_EVENT_CLASS
(
xfs_simple_io_class
,
TP_PROTO
(
struct
xfs_inode
*
ip
,
xfs_off_t
offset
,
ssize_t
count
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录