mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
orangefs: saner arguments passing in readdir guts
orangefs_dir_fill() doesn't use oi and dentry arguments at all do_readdir() gets dentry, uses only dentry->d_inode; it also gets oi, which is ORANGEFS_I(dentry->d_inode) (i.e. ->d_inode - constant offset). orangefs_dir_mode() gets dentry and oi, uses only to pass those to do_readdir(). orangefs_dir_iterate() uses dentry and oi only to pass those to orangefs_dir_fill() and orangefs_dir_more(). The only thing it really needs is ->d_inode; moreover, that's better expressed as file_inode(file) - no need to go through ->f_path.dentry->d_inode. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
fda4369104
commit
12c0c3a65a
@ -58,10 +58,10 @@ struct orangefs_dir {
|
|||||||
* first part of the part list.
|
* first part of the part list.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int do_readdir(struct orangefs_inode_s *oi,
|
static int do_readdir(struct orangefs_dir *od, struct inode *inode,
|
||||||
struct orangefs_dir *od, struct dentry *dentry,
|
|
||||||
struct orangefs_kernel_op_s *op)
|
struct orangefs_kernel_op_s *op)
|
||||||
{
|
{
|
||||||
|
struct orangefs_inode_s *oi = ORANGEFS_I(inode);
|
||||||
struct orangefs_readdir_response_s *resp;
|
struct orangefs_readdir_response_s *resp;
|
||||||
int bufi, r;
|
int bufi, r;
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ again:
|
|||||||
op->upcall.req.readdir.buf_index = bufi;
|
op->upcall.req.readdir.buf_index = bufi;
|
||||||
|
|
||||||
r = service_operation(op, "orangefs_readdir",
|
r = service_operation(op, "orangefs_readdir",
|
||||||
get_interruptible_flag(dentry->d_inode));
|
get_interruptible_flag(inode));
|
||||||
|
|
||||||
orangefs_readdir_index_put(bufi);
|
orangefs_readdir_index_put(bufi);
|
||||||
|
|
||||||
@ -158,8 +158,7 @@ static int parse_readdir(struct orangefs_dir *od,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int orangefs_dir_more(struct orangefs_inode_s *oi,
|
static int orangefs_dir_more(struct orangefs_dir *od, struct inode *inode)
|
||||||
struct orangefs_dir *od, struct dentry *dentry)
|
|
||||||
{
|
{
|
||||||
struct orangefs_kernel_op_s *op;
|
struct orangefs_kernel_op_s *op;
|
||||||
int r;
|
int r;
|
||||||
@ -169,7 +168,7 @@ static int orangefs_dir_more(struct orangefs_inode_s *oi,
|
|||||||
od->error = -ENOMEM;
|
od->error = -ENOMEM;
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
r = do_readdir(oi, od, dentry, op);
|
r = do_readdir(od, inode, op);
|
||||||
if (r) {
|
if (r) {
|
||||||
od->error = r;
|
od->error = r;
|
||||||
goto out;
|
goto out;
|
||||||
@ -238,9 +237,7 @@ next:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int orangefs_dir_fill(struct orangefs_inode_s *oi,
|
static int orangefs_dir_fill(struct orangefs_dir *od, struct dir_context *ctx)
|
||||||
struct orangefs_dir *od, struct dentry *dentry,
|
|
||||||
struct dir_context *ctx)
|
|
||||||
{
|
{
|
||||||
struct orangefs_dir_part *part;
|
struct orangefs_dir_part *part;
|
||||||
size_t count;
|
size_t count;
|
||||||
@ -304,15 +301,10 @@ static loff_t orangefs_dir_llseek(struct file *file, loff_t offset,
|
|||||||
static int orangefs_dir_iterate(struct file *file,
|
static int orangefs_dir_iterate(struct file *file,
|
||||||
struct dir_context *ctx)
|
struct dir_context *ctx)
|
||||||
{
|
{
|
||||||
struct orangefs_inode_s *oi;
|
struct orangefs_dir *od = file->private_data;
|
||||||
struct orangefs_dir *od;
|
struct inode *inode = file_inode(file);
|
||||||
struct dentry *dentry;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
dentry = file->f_path.dentry;
|
|
||||||
oi = ORANGEFS_I(dentry->d_inode);
|
|
||||||
od = file->private_data;
|
|
||||||
|
|
||||||
if (od->error)
|
if (od->error)
|
||||||
return od->error;
|
return od->error;
|
||||||
|
|
||||||
@ -342,7 +334,7 @@ static int orangefs_dir_iterate(struct file *file,
|
|||||||
*/
|
*/
|
||||||
while (od->token != ORANGEFS_ITERATE_END &&
|
while (od->token != ORANGEFS_ITERATE_END &&
|
||||||
ctx->pos > od->end) {
|
ctx->pos > od->end) {
|
||||||
r = orangefs_dir_more(oi, od, dentry);
|
r = orangefs_dir_more(od, inode);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -351,17 +343,17 @@ static int orangefs_dir_iterate(struct file *file,
|
|||||||
|
|
||||||
/* Then try to fill if there's any left in the buffer. */
|
/* Then try to fill if there's any left in the buffer. */
|
||||||
if (ctx->pos < od->end) {
|
if (ctx->pos < od->end) {
|
||||||
r = orangefs_dir_fill(oi, od, dentry, ctx);
|
r = orangefs_dir_fill(od, ctx);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finally get some more and try to fill. */
|
/* Finally get some more and try to fill. */
|
||||||
if (od->token != ORANGEFS_ITERATE_END) {
|
if (od->token != ORANGEFS_ITERATE_END) {
|
||||||
r = orangefs_dir_more(oi, od, dentry);
|
r = orangefs_dir_more(od, inode);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
r = orangefs_dir_fill(oi, od, dentry, ctx);
|
r = orangefs_dir_fill(od, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
Loading…
Reference in New Issue
Block a user