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:
Al Viro 2023-04-20 15:36:12 -04:00
parent fda4369104
commit 12c0c3a65a

View File

@ -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;