Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
46d07338
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
46d07338
编写于
5月 17, 2013
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[readdir] convert logfs
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
070a0ebf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
15 addition
and
34 deletion
+15
-34
fs/logfs/dir.c
fs/logfs/dir.c
+15
-34
未找到文件。
fs/logfs/dir.c
浏览文件 @
46d07338
...
...
@@ -281,17 +281,23 @@ static int logfs_rmdir(struct inode *dir, struct dentry *dentry)
/* FIXME: readdir currently has it's own dir_walk code. I don't see a good
* way to combine the two copies */
#define IMPLICIT_NODES 2
static
int
__logfs_readdir
(
struct
file
*
file
,
void
*
buf
,
filldir_t
filldir
)
static
int
logfs_readdir
(
struct
file
*
file
,
struct
dir_context
*
ctx
)
{
struct
inode
*
dir
=
file_inode
(
file
);
loff_t
pos
=
file
->
f_pos
-
IMPLICIT_NODES
;
loff_t
pos
;
struct
page
*
page
;
struct
logfs_disk_dentry
*
dd
;
int
full
;
if
(
ctx
->
pos
<
0
)
return
-
EINVAL
;
if
(
!
dir_emit_dots
(
file
,
ctx
))
return
0
;
pos
=
ctx
->
pos
-
2
;
BUG_ON
(
pos
<
0
);
for
(;;
pos
++
)
{
for
(;;
pos
++
,
ctx
->
pos
++
)
{
bool
full
;
if
(
beyond_eof
(
dir
,
pos
))
break
;
if
(
!
logfs_exist_block
(
dir
,
pos
))
{
...
...
@@ -306,42 +312,17 @@ static int __logfs_readdir(struct file *file, void *buf, filldir_t filldir)
dd
=
kmap
(
page
);
BUG_ON
(
dd
->
namelen
==
0
);
full
=
filldir
(
buf
,
(
char
*
)
dd
->
name
,
be16_to_cpu
(
dd
->
namelen
),
pos
,
be64_to_cpu
(
dd
->
ino
),
dd
->
type
);
full
=
!
dir_emit
(
ctx
,
(
char
*
)
dd
->
name
,
be16_to_cpu
(
dd
->
namelen
),
be64_to_cpu
(
dd
->
ino
),
dd
->
type
);
kunmap
(
page
);
page_cache_release
(
page
);
if
(
full
)
break
;
}
file
->
f_pos
=
pos
+
IMPLICIT_NODES
;
return
0
;
}
static
int
logfs_readdir
(
struct
file
*
file
,
void
*
buf
,
filldir_t
filldir
)
{
struct
inode
*
inode
=
file_inode
(
file
);
ino_t
pino
=
parent_ino
(
file
->
f_dentry
);
int
err
;
if
(
file
->
f_pos
<
0
)
return
-
EINVAL
;
if
(
file
->
f_pos
==
0
)
{
if
(
filldir
(
buf
,
"."
,
1
,
1
,
inode
->
i_ino
,
DT_DIR
)
<
0
)
return
0
;
file
->
f_pos
++
;
}
if
(
file
->
f_pos
==
1
)
{
if
(
filldir
(
buf
,
".."
,
2
,
2
,
pino
,
DT_DIR
)
<
0
)
return
0
;
file
->
f_pos
++
;
}
err
=
__logfs_readdir
(
file
,
buf
,
filldir
);
return
err
;
}
static
void
logfs_set_name
(
struct
logfs_disk_dentry
*
dd
,
struct
qstr
*
name
)
{
dd
->
namelen
=
cpu_to_be16
(
name
->
len
);
...
...
@@ -814,7 +795,7 @@ const struct inode_operations logfs_dir_iops = {
const
struct
file_operations
logfs_dir_fops
=
{
.
fsync
=
logfs_fsync
,
.
unlocked_ioctl
=
logfs_ioctl
,
.
readdir
=
logfs_readdir
,
.
iterate
=
logfs_readdir
,
.
read
=
generic_read_dir
,
.
llseek
=
default_llseek
,
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录