提交 2de5f059 编写于 作者: A Al Viro

[readdir] convert ecryptfs

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 e924f251
...@@ -69,9 +69,8 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb, ...@@ -69,9 +69,8 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
struct ecryptfs_getdents_callback { struct ecryptfs_getdents_callback {
struct dir_context ctx; struct dir_context ctx;
void *dirent; struct dir_context *caller;
struct dentry *dentry; struct dentry *dentry;
filldir_t filldir;
int filldir_called; int filldir_called;
int entries_written; int entries_written;
}; };
...@@ -97,9 +96,10 @@ ecryptfs_filldir(void *dirent, const char *lower_name, int lower_namelen, ...@@ -97,9 +96,10 @@ ecryptfs_filldir(void *dirent, const char *lower_name, int lower_namelen,
rc); rc);
goto out; goto out;
} }
rc = buf->filldir(buf->dirent, name, name_size, offset, ino, d_type); buf->caller->pos = buf->ctx.pos;
rc = !dir_emit(buf->caller, name, name_size, ino, d_type);
kfree(name); kfree(name);
if (rc >= 0) if (!rc)
buf->entries_written++; buf->entries_written++;
out: out:
return rc; return rc;
...@@ -108,28 +108,23 @@ ecryptfs_filldir(void *dirent, const char *lower_name, int lower_namelen, ...@@ -108,28 +108,23 @@ ecryptfs_filldir(void *dirent, const char *lower_name, int lower_namelen,
/** /**
* ecryptfs_readdir * ecryptfs_readdir
* @file: The eCryptfs directory file * @file: The eCryptfs directory file
* @dirent: Directory entry handle * @ctx: The actor to feed the entries to
* @filldir: The filldir callback function
*/ */
static int ecryptfs_readdir(struct file *file, void *dirent, filldir_t filldir) static int ecryptfs_readdir(struct file *file, struct dir_context *ctx)
{ {
int rc; int rc;
struct file *lower_file; struct file *lower_file;
struct inode *inode; struct inode *inode;
struct ecryptfs_getdents_callback buf; struct ecryptfs_getdents_callback buf = {
.ctx.actor = ecryptfs_filldir,
.caller = ctx,
.dentry = file->f_path.dentry
};
lower_file = ecryptfs_file_to_lower(file); lower_file = ecryptfs_file_to_lower(file);
lower_file->f_pos = file->f_pos; lower_file->f_pos = ctx->pos;
inode = file_inode(file); inode = file_inode(file);
memset(&buf, 0, sizeof(buf));
buf.dirent = dirent;
buf.dentry = file->f_path.dentry;
buf.filldir = filldir;
buf.filldir_called = 0;
buf.entries_written = 0;
buf.ctx.actor = ecryptfs_filldir;
rc = iterate_dir(lower_file, &buf.ctx); rc = iterate_dir(lower_file, &buf.ctx);
file->f_pos = lower_file->f_pos; ctx->pos = buf.ctx.pos;
if (rc < 0) if (rc < 0)
goto out; goto out;
if (buf.filldir_called && !buf.entries_written) if (buf.filldir_called && !buf.entries_written)
...@@ -346,7 +341,7 @@ ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ...@@ -346,7 +341,7 @@ ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
#endif #endif
const struct file_operations ecryptfs_dir_fops = { const struct file_operations ecryptfs_dir_fops = {
.readdir = ecryptfs_readdir, .iterate = ecryptfs_readdir,
.read = generic_read_dir, .read = generic_read_dir,
.unlocked_ioctl = ecryptfs_unlocked_ioctl, .unlocked_ioctl = ecryptfs_unlocked_ioctl,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
...@@ -367,7 +362,7 @@ const struct file_operations ecryptfs_main_fops = { ...@@ -367,7 +362,7 @@ const struct file_operations ecryptfs_main_fops = {
.aio_read = ecryptfs_read_update_atime, .aio_read = ecryptfs_read_update_atime,
.write = do_sync_write, .write = do_sync_write,
.aio_write = generic_file_aio_write, .aio_write = generic_file_aio_write,
.readdir = ecryptfs_readdir, .iterate = ecryptfs_readdir,
.unlocked_ioctl = ecryptfs_unlocked_ioctl, .unlocked_ioctl = ecryptfs_unlocked_ioctl,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
.compat_ioctl = ecryptfs_compat_ioctl, .compat_ioctl = ecryptfs_compat_ioctl,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册