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
Kirill Smelkov
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