Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
9b5d5a17
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
9b5d5a17
编写于
5月 18, 2013
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[readdir] convert freevxfs
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
8d3af7f3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
32 deletion
+23
-32
fs/freevxfs/vxfs_lookup.c
fs/freevxfs/vxfs_lookup.c
+23
-32
未找到文件。
fs/freevxfs/vxfs_lookup.c
浏览文件 @
9b5d5a17
...
...
@@ -49,7 +49,7 @@
static
struct
dentry
*
vxfs_lookup
(
struct
inode
*
,
struct
dentry
*
,
unsigned
int
);
static
int
vxfs_readdir
(
struct
file
*
,
void
*
,
filldir_t
);
static
int
vxfs_readdir
(
struct
file
*
,
struct
dir_context
*
);
const
struct
inode_operations
vxfs_dir_inode_ops
=
{
.
lookup
=
vxfs_lookup
,
...
...
@@ -58,7 +58,7 @@ const struct inode_operations vxfs_dir_inode_ops = {
const
struct
file_operations
vxfs_dir_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
generic_read_dir
,
.
readdir
=
vxfs_readdir
,
.
iterate
=
vxfs_readdir
,
};
...
...
@@ -235,7 +235,7 @@ vxfs_lookup(struct inode *dip, struct dentry *dp, unsigned int flags)
* Zero.
*/
static
int
vxfs_readdir
(
struct
file
*
fp
,
void
*
retp
,
filldir_t
filler
)
vxfs_readdir
(
struct
file
*
fp
,
struct
dir_context
*
ctx
)
{
struct
inode
*
ip
=
file_inode
(
fp
);
struct
super_block
*
sbp
=
ip
->
i_sb
;
...
...
@@ -243,20 +243,17 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)
u_long
page
,
npages
,
block
,
pblocks
,
nblocks
,
offset
;
loff_t
pos
;
switch
((
long
)
fp
->
f_pos
)
{
case
0
:
if
(
filler
(
retp
,
"."
,
1
,
fp
->
f_pos
,
ip
->
i_ino
,
DT_DIR
)
<
0
)
goto
out
;
fp
->
f_pos
++
;
/* fallthrough */
case
1
:
if
(
filler
(
retp
,
".."
,
2
,
fp
->
f_pos
,
VXFS_INO
(
ip
)
->
vii_dotdot
,
DT_DIR
)
<
0
)
goto
out
;
fp
->
f_pos
++
;
/* fallthrough */
if
(
ctx
->
pos
==
0
)
{
if
(
!
dir_emit_dot
(
fp
,
ctx
))
return
0
;
ctx
->
pos
=
1
;
}
pos
=
fp
->
f_pos
-
2
;
if
(
ctx
->
pos
==
1
)
{
if
(
!
dir_emit
(
ctx
,
".."
,
2
,
VXFS_INO
(
ip
)
->
vii_dotdot
,
DT_DIR
))
return
0
;
ctx
->
pos
=
2
;
}
pos
=
ctx
->
pos
-
2
;
if
(
pos
>
VXFS_DIRROUND
(
ip
->
i_size
))
return
0
;
...
...
@@ -270,16 +267,16 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)
block
=
(
u_long
)(
pos
>>
sbp
->
s_blocksize_bits
)
%
pblocks
;
for
(;
page
<
npages
;
page
++
,
block
=
0
)
{
c
addr_t
kaddr
;
c
har
*
kaddr
;
struct
page
*
pp
;
pp
=
vxfs_get_page
(
ip
->
i_mapping
,
page
);
if
(
IS_ERR
(
pp
))
continue
;
kaddr
=
(
c
addr_t
)
page_address
(
pp
);
kaddr
=
(
c
har
*
)
page_address
(
pp
);
for
(;
block
<=
nblocks
&&
block
<=
pblocks
;
block
++
)
{
c
addr_t
baddr
,
limit
;
c
har
*
baddr
,
*
limit
;
struct
vxfs_dirblk
*
dbp
;
struct
vxfs_direct
*
de
;
...
...
@@ -292,21 +289,18 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)
(
kaddr
+
offset
)
:
(
baddr
+
VXFS_DIRBLKOV
(
dbp
)));
for
(;
(
caddr_t
)
de
<=
limit
;
de
=
vxfs_next_entry
(
de
))
{
int
over
;
for
(;
(
char
*
)
de
<=
limit
;
de
=
vxfs_next_entry
(
de
))
{
if
(
!
de
->
d_reclen
)
break
;
if
(
!
de
->
d_ino
)
continue
;
offset
=
(
caddr_t
)
de
-
kaddr
;
over
=
filler
(
retp
,
de
->
d_name
,
de
->
d_namelen
,
((
page
<<
PAGE_CACHE_SHIFT
)
|
offset
)
+
2
,
de
->
d_ino
,
DT_UNKNOWN
);
if
(
over
)
{
offset
=
(
char
*
)
de
-
kaddr
;
ctx
->
pos
=
((
page
<<
PAGE_CACHE_SHIFT
)
|
offset
)
+
2
;
if
(
!
dir_emit
(
ctx
,
de
->
d_name
,
de
->
d_namelen
,
de
->
d_ino
,
DT_UNKNOWN
))
{
vxfs_put_page
(
pp
);
goto
done
;
return
0
;
}
}
offset
=
0
;
...
...
@@ -314,9 +308,6 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)
vxfs_put_page
(
pp
);
offset
=
0
;
}
done:
fp
->
f_pos
=
((
page
<<
PAGE_CACHE_SHIFT
)
|
offset
)
+
2
;
out:
ctx
->
pos
=
((
page
<<
PAGE_CACHE_SHIFT
)
|
offset
)
+
2
;
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录