提交 cd62cdae 编写于 作者: A Al Viro

reiserfs: switch reiserfs_readdir_dentry to inode

... and clean the callers up a bit
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 99ce4169
...@@ -57,9 +57,8 @@ static inline bool is_privroot_deh(struct inode *dir, struct reiserfs_de_head *d ...@@ -57,9 +57,8 @@ static inline bool is_privroot_deh(struct inode *dir, struct reiserfs_de_head *d
deh->deh_objectid == INODE_PKEY(privroot->d_inode)->k_objectid); deh->deh_objectid == INODE_PKEY(privroot->d_inode)->k_objectid);
} }
int reiserfs_readdir_dentry(struct dentry *dentry, struct dir_context *ctx) int reiserfs_readdir_inode(struct inode *inode, 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) */ struct cpu_key pos_key; /* key of current position in the directory (key of directory entry) */
INITIALIZE_PATH(path_to_entry); INITIALIZE_PATH(path_to_entry);
struct buffer_head *bh; struct buffer_head *bh;
...@@ -243,7 +242,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, struct dir_context *ctx) ...@@ -243,7 +242,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, struct dir_context *ctx)
static int reiserfs_readdir(struct file *file, struct dir_context *ctx) static int reiserfs_readdir(struct file *file, struct dir_context *ctx)
{ {
return reiserfs_readdir_dentry(file->f_path.dentry, ctx); return reiserfs_readdir_inode(file_inode(file), ctx);
} }
/* compose directory item containing "." and ".." entries (entries are /* compose directory item containing "." and ".." entries (entries are
......
...@@ -2709,7 +2709,7 @@ extern const struct inode_operations reiserfs_dir_inode_operations; ...@@ -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_symlink_inode_operations;
extern const struct inode_operations reiserfs_special_inode_operations; extern const struct inode_operations reiserfs_special_inode_operations;
extern const struct file_operations reiserfs_dir_operations; extern const struct file_operations reiserfs_dir_operations;
int reiserfs_readdir_dentry(struct dentry *, struct dir_context *); int reiserfs_readdir_inode(struct inode *, struct dir_context *);
/* tail_conversion.c */ /* tail_conversion.c */
int direct2indirect(struct reiserfs_transaction_handle *, struct inode *, int direct2indirect(struct reiserfs_transaction_handle *, struct inode *,
......
...@@ -249,28 +249,27 @@ static int reiserfs_for_each_xattr(struct inode *inode, ...@@ -249,28 +249,27 @@ static int reiserfs_for_each_xattr(struct inode *inode,
reiserfs_write_lock(inode->i_sb); reiserfs_write_lock(inode->i_sb);
buf.xadir = dir; buf.xadir = dir;
err = reiserfs_readdir_dentry(dir, &buf.ctx); while (1) {
while ((err == 0 || err == -ENOSPC) && buf.count) { err = reiserfs_readdir_inode(dir->d_inode, &buf.ctx);
err = 0; if (err)
break;
for (i = 0; i < buf.count && buf.dentries[i]; i++) { if (!buf.count)
int lerr = 0; break;
for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) {
struct dentry *dentry = buf.dentries[i]; struct dentry *dentry = buf.dentries[i];
if (err == 0 && !S_ISDIR(dentry->d_inode->i_mode)) if (!S_ISDIR(dentry->d_inode->i_mode))
lerr = action(dentry, data); err = action(dentry, data);
dput(dentry); dput(dentry);
buf.dentries[i] = NULL; buf.dentries[i] = NULL;
err = lerr ?: err;
} }
if (err)
break;
buf.count = 0; buf.count = 0;
if (!err)
err = reiserfs_readdir_dentry(dir, &buf.ctx);
} }
mutex_unlock(&dir->d_inode->i_mutex); mutex_unlock(&dir->d_inode->i_mutex);
/* Clean up after a failed readdir */
cleanup_dentry_buf(&buf); cleanup_dentry_buf(&buf);
if (!err) { if (!err) {
...@@ -868,7 +867,7 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size) ...@@ -868,7 +867,7 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size)
} }
mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_XATTR); mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_XATTR);
err = reiserfs_readdir_dentry(dir, &buf.ctx); err = reiserfs_readdir_inode(dir->d_inode, &buf.ctx);
mutex_unlock(&dir->d_inode->i_mutex); mutex_unlock(&dir->d_inode->i_mutex);
if (!err) if (!err)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册