Loading fs/9p/vfs_dir.c +28 −44 Original line number Diff line number Diff line Loading @@ -101,16 +101,15 @@ static struct p9_rdir *v9fs_alloc_rdir_buf(struct file *filp, int buflen) } /** * v9fs_dir_readdir - read a directory * @filp: opened file structure * @dirent: directory structure ??? * @filldir: function to populate directory structure ??? * v9fs_dir_readdir - iterate through a directory * @file: opened file structure * @ctx: actor we feed the entries to * */ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) static int v9fs_dir_readdir(struct file *file, struct dir_context *ctx) { int over; bool over; struct p9_wstat st; int err = 0; struct p9_fid *fid; Loading @@ -118,19 +117,19 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) int reclen = 0; struct p9_rdir *rdir; p9_debug(P9_DEBUG_VFS, "name %s\n", filp->f_path.dentry->d_name.name); fid = filp->private_data; p9_debug(P9_DEBUG_VFS, "name %s\n", file->f_path.dentry->d_name.name); fid = file->private_data; buflen = fid->clnt->msize - P9_IOHDRSZ; rdir = v9fs_alloc_rdir_buf(filp, buflen); rdir = v9fs_alloc_rdir_buf(file, buflen); if (!rdir) return -ENOMEM; while (1) { if (rdir->tail == rdir->head) { err = v9fs_file_readn(filp, rdir->buf, NULL, buflen, filp->f_pos); err = v9fs_file_readn(file, rdir->buf, NULL, buflen, ctx->pos); if (err <= 0) return err; Loading @@ -148,51 +147,45 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) } reclen = st.size+2; over = filldir(dirent, st.name, strlen(st.name), filp->f_pos, v9fs_qid2ino(&st.qid), dt_type(&st)); over = !dir_emit(ctx, st.name, strlen(st.name), v9fs_qid2ino(&st.qid), dt_type(&st)); p9stat_free(&st); if (over) return 0; rdir->head += reclen; filp->f_pos += reclen; ctx->pos += reclen; } } } /** * v9fs_dir_readdir_dotl - read a directory * @filp: opened file structure * @dirent: buffer to fill dirent structures * @filldir: function to populate dirent structures * v9fs_dir_readdir_dotl - iterate through a directory * @file: opened file structure * @ctx: actor we feed the entries to * */ static int v9fs_dir_readdir_dotl(struct file *filp, void *dirent, filldir_t filldir) static int v9fs_dir_readdir_dotl(struct file *file, struct dir_context *ctx) { int over; int err = 0; struct p9_fid *fid; int buflen; struct p9_rdir *rdir; struct p9_dirent curdirent; u64 oldoffset = 0; p9_debug(P9_DEBUG_VFS, "name %s\n", filp->f_path.dentry->d_name.name); fid = filp->private_data; p9_debug(P9_DEBUG_VFS, "name %s\n", file->f_path.dentry->d_name.name); fid = file->private_data; buflen = fid->clnt->msize - P9_READDIRHDRSZ; rdir = v9fs_alloc_rdir_buf(filp, buflen); rdir = v9fs_alloc_rdir_buf(file, buflen); if (!rdir) return -ENOMEM; while (1) { if (rdir->tail == rdir->head) { err = p9_client_readdir(fid, rdir->buf, buflen, filp->f_pos); ctx->pos); if (err <= 0) return err; Loading @@ -210,22 +203,13 @@ static int v9fs_dir_readdir_dotl(struct file *filp, void *dirent, return -EIO; } /* d_off in dirent structure tracks the offset into * the next dirent in the dir. However, filldir() * expects offset into the current dirent. Hence * while calling filldir send the offset from the * previous dirent structure. */ over = filldir(dirent, curdirent.d_name, if (!dir_emit(ctx, curdirent.d_name, strlen(curdirent.d_name), oldoffset, v9fs_qid2ino(&curdirent.qid), curdirent.d_type); oldoffset = curdirent.d_off; if (over) v9fs_qid2ino(&curdirent.qid), curdirent.d_type)) return 0; filp->f_pos = curdirent.d_off; ctx->pos = curdirent.d_off; rdir->head += err; } } Loading Loading @@ -254,7 +238,7 @@ int v9fs_dir_release(struct inode *inode, struct file *filp) const struct file_operations v9fs_dir_operations = { .read = generic_read_dir, .llseek = generic_file_llseek, .readdir = v9fs_dir_readdir, .iterate = v9fs_dir_readdir, .open = v9fs_file_open, .release = v9fs_dir_release, }; Loading @@ -262,7 +246,7 @@ const struct file_operations v9fs_dir_operations = { const struct file_operations v9fs_dir_operations_dotl = { .read = generic_read_dir, .llseek = generic_file_llseek, .readdir = v9fs_dir_readdir_dotl, .iterate = v9fs_dir_readdir_dotl, .open = v9fs_file_open, .release = v9fs_dir_release, .fsync = v9fs_file_fsync_dotl, Loading Loading
fs/9p/vfs_dir.c +28 −44 Original line number Diff line number Diff line Loading @@ -101,16 +101,15 @@ static struct p9_rdir *v9fs_alloc_rdir_buf(struct file *filp, int buflen) } /** * v9fs_dir_readdir - read a directory * @filp: opened file structure * @dirent: directory structure ??? * @filldir: function to populate directory structure ??? * v9fs_dir_readdir - iterate through a directory * @file: opened file structure * @ctx: actor we feed the entries to * */ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) static int v9fs_dir_readdir(struct file *file, struct dir_context *ctx) { int over; bool over; struct p9_wstat st; int err = 0; struct p9_fid *fid; Loading @@ -118,19 +117,19 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) int reclen = 0; struct p9_rdir *rdir; p9_debug(P9_DEBUG_VFS, "name %s\n", filp->f_path.dentry->d_name.name); fid = filp->private_data; p9_debug(P9_DEBUG_VFS, "name %s\n", file->f_path.dentry->d_name.name); fid = file->private_data; buflen = fid->clnt->msize - P9_IOHDRSZ; rdir = v9fs_alloc_rdir_buf(filp, buflen); rdir = v9fs_alloc_rdir_buf(file, buflen); if (!rdir) return -ENOMEM; while (1) { if (rdir->tail == rdir->head) { err = v9fs_file_readn(filp, rdir->buf, NULL, buflen, filp->f_pos); err = v9fs_file_readn(file, rdir->buf, NULL, buflen, ctx->pos); if (err <= 0) return err; Loading @@ -148,51 +147,45 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) } reclen = st.size+2; over = filldir(dirent, st.name, strlen(st.name), filp->f_pos, v9fs_qid2ino(&st.qid), dt_type(&st)); over = !dir_emit(ctx, st.name, strlen(st.name), v9fs_qid2ino(&st.qid), dt_type(&st)); p9stat_free(&st); if (over) return 0; rdir->head += reclen; filp->f_pos += reclen; ctx->pos += reclen; } } } /** * v9fs_dir_readdir_dotl - read a directory * @filp: opened file structure * @dirent: buffer to fill dirent structures * @filldir: function to populate dirent structures * v9fs_dir_readdir_dotl - iterate through a directory * @file: opened file structure * @ctx: actor we feed the entries to * */ static int v9fs_dir_readdir_dotl(struct file *filp, void *dirent, filldir_t filldir) static int v9fs_dir_readdir_dotl(struct file *file, struct dir_context *ctx) { int over; int err = 0; struct p9_fid *fid; int buflen; struct p9_rdir *rdir; struct p9_dirent curdirent; u64 oldoffset = 0; p9_debug(P9_DEBUG_VFS, "name %s\n", filp->f_path.dentry->d_name.name); fid = filp->private_data; p9_debug(P9_DEBUG_VFS, "name %s\n", file->f_path.dentry->d_name.name); fid = file->private_data; buflen = fid->clnt->msize - P9_READDIRHDRSZ; rdir = v9fs_alloc_rdir_buf(filp, buflen); rdir = v9fs_alloc_rdir_buf(file, buflen); if (!rdir) return -ENOMEM; while (1) { if (rdir->tail == rdir->head) { err = p9_client_readdir(fid, rdir->buf, buflen, filp->f_pos); ctx->pos); if (err <= 0) return err; Loading @@ -210,22 +203,13 @@ static int v9fs_dir_readdir_dotl(struct file *filp, void *dirent, return -EIO; } /* d_off in dirent structure tracks the offset into * the next dirent in the dir. However, filldir() * expects offset into the current dirent. Hence * while calling filldir send the offset from the * previous dirent structure. */ over = filldir(dirent, curdirent.d_name, if (!dir_emit(ctx, curdirent.d_name, strlen(curdirent.d_name), oldoffset, v9fs_qid2ino(&curdirent.qid), curdirent.d_type); oldoffset = curdirent.d_off; if (over) v9fs_qid2ino(&curdirent.qid), curdirent.d_type)) return 0; filp->f_pos = curdirent.d_off; ctx->pos = curdirent.d_off; rdir->head += err; } } Loading Loading @@ -254,7 +238,7 @@ int v9fs_dir_release(struct inode *inode, struct file *filp) const struct file_operations v9fs_dir_operations = { .read = generic_read_dir, .llseek = generic_file_llseek, .readdir = v9fs_dir_readdir, .iterate = v9fs_dir_readdir, .open = v9fs_file_open, .release = v9fs_dir_release, }; Loading @@ -262,7 +246,7 @@ const struct file_operations v9fs_dir_operations = { const struct file_operations v9fs_dir_operations_dotl = { .read = generic_read_dir, .llseek = generic_file_llseek, .readdir = v9fs_dir_readdir_dotl, .iterate = v9fs_dir_readdir_dotl, .open = v9fs_file_open, .release = v9fs_dir_release, .fsync = v9fs_file_fsync_dotl, Loading