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
4acf381e
Commit
4acf381e
authored
May 17, 2013
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[readdir] convert reiserfs
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
956ce208
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
19 additions
and
23 deletions
+19
-23
fs/reiserfs/dir.c
fs/reiserfs/dir.c
+11
-15
fs/reiserfs/reiserfs.h
fs/reiserfs/reiserfs.h
+1
-1
fs/reiserfs/xattr.c
fs/reiserfs/xattr.c
+7
-7
No files found.
fs/reiserfs/dir.c
View file @
4acf381e
...
...
@@ -13,14 +13,14 @@
extern
const
struct
reiserfs_key
MIN_KEY
;
static
int
reiserfs_readdir
(
struct
file
*
,
void
*
,
filldir_t
);
static
int
reiserfs_readdir
(
struct
file
*
,
struct
dir_context
*
);
static
int
reiserfs_dir_fsync
(
struct
file
*
filp
,
loff_t
start
,
loff_t
end
,
int
datasync
);
const
struct
file_operations
reiserfs_dir_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
generic_read_dir
,
.
readdir
=
reiserfs_readdir
,
.
iterate
=
reiserfs_readdir
,
.
fsync
=
reiserfs_dir_fsync
,
.
unlocked_ioctl
=
reiserfs_ioctl
,
#ifdef CONFIG_COMPAT
...
...
@@ -58,8 +58,7 @@ static inline bool is_privroot_deh(struct dentry *dir,
deh
->
deh_objectid
==
INODE_PKEY
(
privroot
->
d_inode
)
->
k_objectid
);
}
int
reiserfs_readdir_dentry
(
struct
dentry
*
dentry
,
void
*
dirent
,
filldir_t
filldir
,
loff_t
*
pos
)
int
reiserfs_readdir_dentry
(
struct
dentry
*
dentry
,
struct
dir_context
*
ctx
)
{
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
cpu_key
pos_key
;
/* key of current position in the directory (key of directory entry) */
...
...
@@ -81,7 +80,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent,
/* form key for search the next directory entry using f_pos field of
file structure */
make_cpu_key
(
&
pos_key
,
inode
,
*
pos
?:
DOT_OFFSET
,
TYPE_DIRENTRY
,
3
);
make_cpu_key
(
&
pos_key
,
inode
,
ctx
->
pos
?:
DOT_OFFSET
,
TYPE_DIRENTRY
,
3
);
next_pos
=
cpu_key_k_offset
(
&
pos_key
);
path_to_entry
.
reada
=
PATH_READA
;
...
...
@@ -126,7 +125,6 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent,
entry_num
++
,
deh
++
)
{
int
d_reclen
;
char
*
d_name
;
off_t
d_off
;
ino_t
d_ino
;
if
(
!
de_visible
(
deh
))
...
...
@@ -158,8 +156,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent,
if
(
is_privroot_deh
(
dentry
,
deh
))
continue
;
d_off
=
deh_offset
(
deh
);
*
pos
=
d_off
;
ctx
->
pos
=
deh_offset
(
deh
);
d_ino
=
deh_objectid
(
deh
);
if
(
d_reclen
<=
32
)
{
local_buf
=
small_buf
;
...
...
@@ -187,9 +184,9 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent,
* the write lock here for other waiters
*/
reiserfs_write_unlock
(
inode
->
i_sb
);
if
(
filldir
(
dirent
,
local_buf
,
d_reclen
,
d_off
,
d_ino
,
DT_UNKNOWN
)
<
0
)
{
if
(
!
dir_emit
(
ctx
,
local_buf
,
d_reclen
,
d_ino
,
DT_UNKNOWN
))
{
reiserfs_write_lock
(
inode
->
i_sb
);
if
(
local_buf
!=
small_buf
)
{
kfree
(
local_buf
);
...
...
@@ -237,7 +234,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent,
}
/* while */
end:
*
pos
=
next_pos
;
ctx
->
pos
=
next_pos
;
pathrelse
(
&
path_to_entry
);
reiserfs_check_path
(
&
path_to_entry
);
out:
...
...
@@ -245,10 +242,9 @@ int reiserfs_readdir_dentry(struct dentry *dentry, void *dirent,
return
ret
;
}
static
int
reiserfs_readdir
(
struct
file
*
file
,
void
*
dirent
,
filldir_t
filldir
)
static
int
reiserfs_readdir
(
struct
file
*
file
,
struct
dir_context
*
ctx
)
{
struct
dentry
*
dentry
=
file
->
f_path
.
dentry
;
return
reiserfs_readdir_dentry
(
dentry
,
dirent
,
filldir
,
&
file
->
f_pos
);
return
reiserfs_readdir_dentry
(
file
->
f_path
.
dentry
,
ctx
);
}
/* compose directory item containing "." and ".." entries (entries are
...
...
fs/reiserfs/reiserfs.h
View file @
4acf381e
...
...
@@ -2709,7 +2709,7 @@ extern const struct inode_operations reiserfs_dir_inode_operations;
extern
const
struct
inode_operations
reiserfs_symlink_inode_operations
;
extern
const
struct
inode_operations
reiserfs_special_inode_operations
;
extern
const
struct
file_operations
reiserfs_dir_operations
;
int
reiserfs_readdir_dentry
(
struct
dentry
*
,
void
*
,
filldir_t
,
loff_
t
*
);
int
reiserfs_readdir_dentry
(
struct
dentry
*
,
struct
dir_contex
t
*
);
/* tail_conversion.c */
int
direct2indirect
(
struct
reiserfs_transaction_handle
*
,
struct
inode
*
,
...
...
fs/reiserfs/xattr.c
View file @
4acf381e
...
...
@@ -171,6 +171,7 @@ static struct dentry *open_xa_dir(const struct inode *inode, int flags)
* modifying extended attributes. This includes operations such as permissions
* or ownership changes, object deletions, etc. */
struct
reiserfs_dentry_buf
{
struct
dir_context
ctx
;
struct
dentry
*
xadir
;
int
count
;
struct
dentry
*
dentries
[
8
];
...
...
@@ -223,9 +224,8 @@ static int reiserfs_for_each_xattr(struct inode *inode,
{
struct
dentry
*
dir
;
int
i
,
err
=
0
;
loff_t
pos
=
0
;
struct
reiserfs_dentry_buf
buf
=
{
.
c
ount
=
0
,
.
c
tx
.
actor
=
fill_with_dentries
,
};
/* Skip out, an xattr has no xattrs associated with it */
...
...
@@ -249,7 +249,7 @@ static int reiserfs_for_each_xattr(struct inode *inode,
reiserfs_write_lock
(
inode
->
i_sb
);
buf
.
xadir
=
dir
;
err
=
reiserfs_readdir_dentry
(
dir
,
&
buf
,
fill_with_dentries
,
&
pos
);
err
=
reiserfs_readdir_dentry
(
dir
,
&
buf
.
ctx
);
while
((
err
==
0
||
err
==
-
ENOSPC
)
&&
buf
.
count
)
{
err
=
0
;
...
...
@@ -266,8 +266,7 @@ static int reiserfs_for_each_xattr(struct inode *inode,
}
buf
.
count
=
0
;
if
(
!
err
)
err
=
reiserfs_readdir_dentry
(
dir
,
&
buf
,
fill_with_dentries
,
&
pos
);
err
=
reiserfs_readdir_dentry
(
dir
,
&
buf
.
ctx
);
}
mutex_unlock
(
&
dir
->
d_inode
->
i_mutex
);
...
...
@@ -800,6 +799,7 @@ int reiserfs_removexattr(struct dentry *dentry, const char *name)
}
struct
listxattr_buf
{
struct
dir_context
ctx
;
size_t
size
;
size_t
pos
;
char
*
buf
;
...
...
@@ -845,8 +845,8 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size)
{
struct
dentry
*
dir
;
int
err
=
0
;
loff_t
pos
=
0
;
struct
listxattr_buf
buf
=
{
.
ctx
.
actor
=
listxattr_filler
,
.
dentry
=
dentry
,
.
buf
=
buffer
,
.
size
=
buffer
?
size
:
0
,
...
...
@@ -868,7 +868,7 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size)
}
mutex_lock_nested
(
&
dir
->
d_inode
->
i_mutex
,
I_MUTEX_XATTR
);
err
=
reiserfs_readdir_dentry
(
dir
,
&
buf
,
listxattr_filler
,
&
pos
);
err
=
reiserfs_readdir_dentry
(
dir
,
&
buf
.
ctx
);
mutex_unlock
(
&
dir
->
d_inode
->
i_mutex
);
if
(
!
err
)
...
...
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