Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
46d07338
Commit
46d07338
authored
May 17, 2013
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[readdir] convert logfs
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
070a0ebf
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
34 deletions
+15
-34
fs/logfs/dir.c
fs/logfs/dir.c
+15
-34
No files found.
fs/logfs/dir.c
View file @
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
,
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment