diff options
Diffstat (limited to 'fs/9p/vfs_dir.c')
-rw-r--r-- | fs/9p/vfs_dir.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/fs/9p/vfs_dir.c b/fs/9p/vfs_dir.c index 15cce53bf61e..0adfd64dfcee 100644 --- a/fs/9p/vfs_dir.c +++ b/fs/9p/vfs_dir.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/sched.h> | 32 | #include <linux/sched.h> |
33 | #include <linux/inet.h> | 33 | #include <linux/inet.h> |
34 | #include <linux/idr.h> | 34 | #include <linux/idr.h> |
35 | #include <linux/slab.h> | ||
35 | #include <net/9p/9p.h> | 36 | #include <net/9p/9p.h> |
36 | #include <net/9p/client.h> | 37 | #include <net/9p/client.h> |
37 | 38 | ||
@@ -76,6 +77,15 @@ static inline int dt_type(struct p9_wstat *mistat) | |||
76 | return rettype; | 77 | return rettype; |
77 | } | 78 | } |
78 | 79 | ||
80 | static void p9stat_init(struct p9_wstat *stbuf) | ||
81 | { | ||
82 | stbuf->name = NULL; | ||
83 | stbuf->uid = NULL; | ||
84 | stbuf->gid = NULL; | ||
85 | stbuf->muid = NULL; | ||
86 | stbuf->extension = NULL; | ||
87 | } | ||
88 | |||
79 | /** | 89 | /** |
80 | * v9fs_dir_readdir - read a directory | 90 | * v9fs_dir_readdir - read a directory |
81 | * @filp: opened file structure | 91 | * @filp: opened file structure |
@@ -121,6 +131,8 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
121 | rdir = (struct p9_rdir *) fid->rdir; | 131 | rdir = (struct p9_rdir *) fid->rdir; |
122 | 132 | ||
123 | err = mutex_lock_interruptible(&rdir->mutex); | 133 | err = mutex_lock_interruptible(&rdir->mutex); |
134 | if (err) | ||
135 | return err; | ||
124 | while (err == 0) { | 136 | while (err == 0) { |
125 | if (rdir->tail == rdir->head) { | 137 | if (rdir->tail == rdir->head) { |
126 | err = v9fs_file_readn(filp, rdir->buf, NULL, | 138 | err = v9fs_file_readn(filp, rdir->buf, NULL, |
@@ -131,11 +143,11 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) | |||
131 | rdir->head = 0; | 143 | rdir->head = 0; |
132 | rdir->tail = err; | 144 | rdir->tail = err; |
133 | } | 145 | } |
134 | |||
135 | while (rdir->head < rdir->tail) { | 146 | while (rdir->head < rdir->tail) { |
147 | p9stat_init(&st); | ||
136 | err = p9stat_read(rdir->buf + rdir->head, | 148 | err = p9stat_read(rdir->buf + rdir->head, |
137 | buflen - rdir->head, &st, | 149 | buflen - rdir->head, &st, |
138 | fid->clnt->dotu); | 150 | fid->clnt->proto_version); |
139 | if (err) { | 151 | if (err) { |
140 | P9_DPRINTK(P9_DEBUG_VFS, "returned %d\n", err); | 152 | P9_DPRINTK(P9_DEBUG_VFS, "returned %d\n", err); |
141 | err = -EIO; | 153 | err = -EIO; |