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
070a0ebf
Commit
070a0ebf
authored
May 17, 2013
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[readdir] convert jfs
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
77acfa29
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
36 deletions
+31
-36
fs/jfs/jfs_dtree.c
fs/jfs/jfs_dtree.c
+29
-34
fs/jfs/jfs_dtree.h
fs/jfs/jfs_dtree.h
+1
-1
fs/jfs/namei.c
fs/jfs/namei.c
+1
-1
No files found.
fs/jfs/jfs_dtree.c
View file @
070a0ebf
...
@@ -3002,9 +3002,9 @@ static inline struct jfs_dirent *next_jfs_dirent(struct jfs_dirent *dirent)
...
@@ -3002,9 +3002,9 @@ static inline struct jfs_dirent *next_jfs_dirent(struct jfs_dirent *dirent)
* return: offset = (pn, index) of start entry
* return: offset = (pn, index) of start entry
* of next jfs_readdir()/dtRead()
* of next jfs_readdir()/dtRead()
*/
*/
int
jfs_readdir
(
struct
file
*
fil
p
,
void
*
dirent
,
filldir_t
filldir
)
int
jfs_readdir
(
struct
file
*
fil
e
,
struct
dir_context
*
ctx
)
{
{
struct
inode
*
ip
=
file_inode
(
fil
p
);
struct
inode
*
ip
=
file_inode
(
fil
e
);
struct
nls_table
*
codepage
=
JFS_SBI
(
ip
->
i_sb
)
->
nls_tab
;
struct
nls_table
*
codepage
=
JFS_SBI
(
ip
->
i_sb
)
->
nls_tab
;
int
rc
=
0
;
int
rc
=
0
;
loff_t
dtpos
;
/* legacy OS/2 style position */
loff_t
dtpos
;
/* legacy OS/2 style position */
...
@@ -3033,7 +3033,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3033,7 +3033,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
int
overflow
,
fix_page
,
page_fixed
=
0
;
int
overflow
,
fix_page
,
page_fixed
=
0
;
static
int
unique_pos
=
2
;
/* If we can't fix broken index */
static
int
unique_pos
=
2
;
/* If we can't fix broken index */
if
(
filp
->
f_
pos
==
DIREND
)
if
(
ctx
->
pos
==
DIREND
)
return
0
;
return
0
;
if
(
DO_INDEX
(
ip
))
{
if
(
DO_INDEX
(
ip
))
{
...
@@ -3045,7 +3045,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3045,7 +3045,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
*/
*/
do_index
=
1
;
do_index
=
1
;
dir_index
=
(
u32
)
filp
->
f_
pos
;
dir_index
=
(
u32
)
ctx
->
pos
;
if
(
dir_index
>
1
)
{
if
(
dir_index
>
1
)
{
struct
dir_table_slot
dirtab_slot
;
struct
dir_table_slot
dirtab_slot
;
...
@@ -3053,25 +3053,25 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3053,25 +3053,25 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
if
(
dtEmpty
(
ip
)
||
if
(
dtEmpty
(
ip
)
||
(
dir_index
>=
JFS_IP
(
ip
)
->
next_index
))
{
(
dir_index
>=
JFS_IP
(
ip
)
->
next_index
))
{
/* Stale position. Directory has shrunk */
/* Stale position. Directory has shrunk */
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
repeat:
repeat:
rc
=
read_index
(
ip
,
dir_index
,
&
dirtab_slot
);
rc
=
read_index
(
ip
,
dir_index
,
&
dirtab_slot
);
if
(
rc
)
{
if
(
rc
)
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
rc
;
return
rc
;
}
}
if
(
dirtab_slot
.
flag
==
DIR_INDEX_FREE
)
{
if
(
dirtab_slot
.
flag
==
DIR_INDEX_FREE
)
{
if
(
loop_count
++
>
JFS_IP
(
ip
)
->
next_index
)
{
if
(
loop_count
++
>
JFS_IP
(
ip
)
->
next_index
)
{
jfs_err
(
"jfs_readdir detected "
jfs_err
(
"jfs_readdir detected "
"infinite loop!"
);
"infinite loop!"
);
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
dir_index
=
le32_to_cpu
(
dirtab_slot
.
addr2
);
dir_index
=
le32_to_cpu
(
dirtab_slot
.
addr2
);
if
(
dir_index
==
-
1
)
{
if
(
dir_index
==
-
1
)
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
goto
repeat
;
goto
repeat
;
...
@@ -3080,13 +3080,13 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3080,13 +3080,13 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
index
=
dirtab_slot
.
slot
;
index
=
dirtab_slot
.
slot
;
DT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
DT_GETPAGE
(
ip
,
bn
,
mp
,
PSIZE
,
p
,
rc
);
if
(
rc
)
{
if
(
rc
)
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
if
(
p
->
header
.
flag
&
BT_INTERNAL
)
{
if
(
p
->
header
.
flag
&
BT_INTERNAL
)
{
jfs_err
(
"jfs_readdir: bad index table"
);
jfs_err
(
"jfs_readdir: bad index table"
);
DT_PUTPAGE
(
mp
);
DT_PUTPAGE
(
mp
);
filp
->
f_
pos
=
-
1
;
ctx
->
pos
=
-
1
;
return
0
;
return
0
;
}
}
}
else
{
}
else
{
...
@@ -3094,23 +3094,22 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3094,23 +3094,22 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
/*
/*
* self "."
* self "."
*/
*/
filp
->
f_pos
=
0
;
ctx
->
pos
=
0
;
if
(
filldir
(
dirent
,
"."
,
1
,
0
,
ip
->
i_ino
,
if
(
!
dir_emit
(
ctx
,
"."
,
1
,
ip
->
i_ino
,
DT_DIR
))
DT_DIR
))
return
0
;
return
0
;
}
}
/*
/*
* parent ".."
* parent ".."
*/
*/
filp
->
f_
pos
=
1
;
ctx
->
pos
=
1
;
if
(
filldir
(
dirent
,
".."
,
2
,
1
,
PARENT
(
ip
),
DT_DIR
))
if
(
!
dir_emit
(
ctx
,
".."
,
2
,
PARENT
(
ip
),
DT_DIR
))
return
0
;
return
0
;
/*
/*
* Find first entry of left-most leaf
* Find first entry of left-most leaf
*/
*/
if
(
dtEmpty
(
ip
))
{
if
(
dtEmpty
(
ip
))
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
...
@@ -3128,23 +3127,19 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3128,23 +3127,19 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
* pn > 0: Real entries, pn=1 -> leftmost page
* pn > 0: Real entries, pn=1 -> leftmost page
* pn = index = -1: No more entries
* pn = index = -1: No more entries
*/
*/
dtpos
=
filp
->
f_
pos
;
dtpos
=
ctx
->
pos
;
if
(
dtpos
==
0
)
{
if
(
dtpos
==
0
)
{
/* build "." entry */
/* build "." entry */
if
(
!
dir_emit
(
ctx
,
"."
,
1
,
ip
->
i_ino
,
DT_DIR
))
if
(
filldir
(
dirent
,
"."
,
1
,
filp
->
f_pos
,
ip
->
i_ino
,
DT_DIR
))
return
0
;
return
0
;
dtoffset
->
index
=
1
;
dtoffset
->
index
=
1
;
filp
->
f_
pos
=
dtpos
;
ctx
->
pos
=
dtpos
;
}
}
if
(
dtoffset
->
pn
==
0
)
{
if
(
dtoffset
->
pn
==
0
)
{
if
(
dtoffset
->
index
==
1
)
{
if
(
dtoffset
->
index
==
1
)
{
/* build ".." entry */
/* build ".." entry */
if
(
!
dir_emit
(
ctx
,
".."
,
2
,
PARENT
(
ip
),
DT_DIR
))
if
(
filldir
(
dirent
,
".."
,
2
,
filp
->
f_pos
,
PARENT
(
ip
),
DT_DIR
))
return
0
;
return
0
;
}
else
{
}
else
{
jfs_err
(
"jfs_readdir called with "
jfs_err
(
"jfs_readdir called with "
...
@@ -3152,18 +3147,18 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3152,18 +3147,18 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
}
}
dtoffset
->
pn
=
1
;
dtoffset
->
pn
=
1
;
dtoffset
->
index
=
0
;
dtoffset
->
index
=
0
;
filp
->
f_
pos
=
dtpos
;
ctx
->
pos
=
dtpos
;
}
}
if
(
dtEmpty
(
ip
))
{
if
(
dtEmpty
(
ip
))
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
if
((
rc
=
dtReadNext
(
ip
,
&
filp
->
f_
pos
,
&
btstack
)))
{
if
((
rc
=
dtReadNext
(
ip
,
&
ctx
->
pos
,
&
btstack
)))
{
jfs_err
(
"jfs_readdir: unexpected rc = %d "
jfs_err
(
"jfs_readdir: unexpected rc = %d "
"from dtReadNext"
,
rc
);
"from dtReadNext"
,
rc
);
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
/* get start leaf page and index */
/* get start leaf page and index */
...
@@ -3171,7 +3166,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3171,7 +3166,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
/* offset beyond directory eof ? */
/* offset beyond directory eof ? */
if
(
bn
<
0
)
{
if
(
bn
<
0
)
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
0
;
return
0
;
}
}
}
}
...
@@ -3180,7 +3175,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3180,7 +3175,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
if
(
dirent_buf
==
0
)
{
if
(
dirent_buf
==
0
)
{
DT_PUTPAGE
(
mp
);
DT_PUTPAGE
(
mp
);
jfs_warn
(
"jfs_readdir: __get_free_page failed!"
);
jfs_warn
(
"jfs_readdir: __get_free_page failed!"
);
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
...
@@ -3295,9 +3290,9 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3295,9 +3290,9 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
jfs_dirent
=
(
struct
jfs_dirent
*
)
dirent_buf
;
jfs_dirent
=
(
struct
jfs_dirent
*
)
dirent_buf
;
while
(
jfs_dirents
--
)
{
while
(
jfs_dirents
--
)
{
filp
->
f_
pos
=
jfs_dirent
->
position
;
ctx
->
pos
=
jfs_dirent
->
position
;
if
(
filldir
(
dirent
,
jfs_dirent
->
name
,
if
(
!
dir_emit
(
ctx
,
jfs_dirent
->
name
,
jfs_dirent
->
name_len
,
filp
->
f_pos
,
jfs_dirent
->
name_len
,
jfs_dirent
->
ino
,
DT_UNKNOWN
))
jfs_dirent
->
ino
,
DT_UNKNOWN
))
goto
out
;
goto
out
;
jfs_dirent
=
next_jfs_dirent
(
jfs_dirent
);
jfs_dirent
=
next_jfs_dirent
(
jfs_dirent
);
...
@@ -3309,7 +3304,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
...
@@ -3309,7 +3304,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
}
}
if
(
!
overflow
&&
(
bn
==
0
))
{
if
(
!
overflow
&&
(
bn
==
0
))
{
filp
->
f_
pos
=
DIREND
;
ctx
->
pos
=
DIREND
;
break
;
break
;
}
}
...
...
fs/jfs/jfs_dtree.h
View file @
070a0ebf
...
@@ -265,5 +265,5 @@ extern int dtDelete(tid_t tid, struct inode *ip, struct component_name * key,
...
@@ -265,5 +265,5 @@ extern int dtDelete(tid_t tid, struct inode *ip, struct component_name * key,
extern
int
dtModify
(
tid_t
tid
,
struct
inode
*
ip
,
struct
component_name
*
key
,
extern
int
dtModify
(
tid_t
tid
,
struct
inode
*
ip
,
struct
component_name
*
key
,
ino_t
*
orig_ino
,
ino_t
new_ino
,
int
flag
);
ino_t
*
orig_ino
,
ino_t
new_ino
,
int
flag
);
extern
int
jfs_readdir
(
struct
file
*
fil
p
,
void
*
dirent
,
filldir_t
filldir
);
extern
int
jfs_readdir
(
struct
file
*
fil
e
,
struct
dir_context
*
ctx
);
#endif
/* !_H_JFS_DTREE */
#endif
/* !_H_JFS_DTREE */
fs/jfs/namei.c
View file @
070a0ebf
...
@@ -1529,7 +1529,7 @@ const struct inode_operations jfs_dir_inode_operations = {
...
@@ -1529,7 +1529,7 @@ const struct inode_operations jfs_dir_inode_operations = {
const
struct
file_operations
jfs_dir_operations
=
{
const
struct
file_operations
jfs_dir_operations
=
{
.
read
=
generic_read_dir
,
.
read
=
generic_read_dir
,
.
readdir
=
jfs_readdir
,
.
iterate
=
jfs_readdir
,
.
fsync
=
jfs_fsync
,
.
fsync
=
jfs_fsync
,
.
unlocked_ioctl
=
jfs_ioctl
,
.
unlocked_ioctl
=
jfs_ioctl
,
#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
...
...
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