diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-06 10:53:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-06 10:53:46 -0500 |
commit | 65d3a68af53523d4d6daeb896c93e326cf46fd85 (patch) | |
tree | b15931691edab2fb4e5465c3c14a4f159c8f25e4 | |
parent | 2658770b2c3570106675d2e5581f4ae727523e0a (diff) | |
parent | 55762690e2696d7b5034d85d1fbeb620841220c9 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs:
9p: add missing end-of-options record for trans_fd
9p: return NULL when trans not found
9p: use copy of the options value instead of original
9p: fix memory leak in v9fs_get_sb
-rw-r--r-- | fs/9p/v9fs.c | 6 | ||||
-rw-r--r-- | fs/9p/vfs_super.c | 3 | ||||
-rw-r--r-- | net/9p/mod.c | 4 | ||||
-rw-r--r-- | net/9p/trans_fd.c | 3 |
4 files changed, 11 insertions, 5 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 756f7e9beb2e..fbb12dadba83 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c | |||
@@ -82,7 +82,7 @@ static match_table_t tokens = { | |||
82 | 82 | ||
83 | static void v9fs_parse_options(struct v9fs_session_info *v9ses) | 83 | static void v9fs_parse_options(struct v9fs_session_info *v9ses) |
84 | { | 84 | { |
85 | char *options = v9ses->options; | 85 | char *options; |
86 | substring_t args[MAX_OPT_ARGS]; | 86 | substring_t args[MAX_OPT_ARGS]; |
87 | char *p; | 87 | char *p; |
88 | int option; | 88 | int option; |
@@ -96,9 +96,10 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses) | |||
96 | v9ses->cache = 0; | 96 | v9ses->cache = 0; |
97 | v9ses->trans = v9fs_default_trans(); | 97 | v9ses->trans = v9fs_default_trans(); |
98 | 98 | ||
99 | if (!options) | 99 | if (!v9ses->options) |
100 | return; | 100 | return; |
101 | 101 | ||
102 | options = kstrdup(v9ses->options, GFP_KERNEL); | ||
102 | while ((p = strsep(&options, ",")) != NULL) { | 103 | while ((p = strsep(&options, ",")) != NULL) { |
103 | int token; | 104 | int token; |
104 | if (!*p) | 105 | if (!*p) |
@@ -169,6 +170,7 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses) | |||
169 | continue; | 170 | continue; |
170 | } | 171 | } |
171 | } | 172 | } |
173 | kfree(options); | ||
172 | } | 174 | } |
173 | 175 | ||
174 | /** | 176 | /** |
diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c index bb0cef9a6b8a..678c02f1ae23 100644 --- a/fs/9p/vfs_super.c +++ b/fs/9p/vfs_super.c | |||
@@ -119,6 +119,7 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, | |||
119 | 119 | ||
120 | P9_DPRINTK(P9_DEBUG_VFS, " \n"); | 120 | P9_DPRINTK(P9_DEBUG_VFS, " \n"); |
121 | 121 | ||
122 | st = NULL; | ||
122 | v9ses = kzalloc(sizeof(struct v9fs_session_info), GFP_KERNEL); | 123 | v9ses = kzalloc(sizeof(struct v9fs_session_info), GFP_KERNEL); |
123 | if (!v9ses) | 124 | if (!v9ses) |
124 | return -ENOMEM; | 125 | return -ENOMEM; |
@@ -164,10 +165,12 @@ static int v9fs_get_sb(struct file_system_type *fs_type, int flags, | |||
164 | root->d_inode->i_ino = v9fs_qid2ino(&st->qid); | 165 | root->d_inode->i_ino = v9fs_qid2ino(&st->qid); |
165 | v9fs_stat2inode(st, root->d_inode, sb); | 166 | v9fs_stat2inode(st, root->d_inode, sb); |
166 | v9fs_fid_add(root, fid); | 167 | v9fs_fid_add(root, fid); |
168 | kfree(st); | ||
167 | 169 | ||
168 | return simple_set_mnt(mnt, sb); | 170 | return simple_set_mnt(mnt, sb); |
169 | 171 | ||
170 | error: | 172 | error: |
173 | kfree(st); | ||
171 | if (fid) | 174 | if (fid) |
172 | p9_client_clunk(fid); | 175 | p9_client_clunk(fid); |
173 | 176 | ||
diff --git a/net/9p/mod.c b/net/9p/mod.c index 41d70f47375d..8f9763a9dc12 100644 --- a/net/9p/mod.c +++ b/net/9p/mod.c | |||
@@ -76,9 +76,9 @@ struct p9_trans_module *v9fs_match_trans(const substring_t *name) | |||
76 | list_for_each(p, &v9fs_trans_list) { | 76 | list_for_each(p, &v9fs_trans_list) { |
77 | t = list_entry(p, struct p9_trans_module, list); | 77 | t = list_entry(p, struct p9_trans_module, list); |
78 | if (strncmp(t->name, name->from, name->to-name->from) == 0) | 78 | if (strncmp(t->name, name->from, name->to-name->from) == 0) |
79 | break; | 79 | return t; |
80 | } | 80 | } |
81 | return t; | 81 | return NULL; |
82 | } | 82 | } |
83 | EXPORT_SYMBOL(v9fs_match_trans); | 83 | EXPORT_SYMBOL(v9fs_match_trans); |
84 | 84 | ||
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index 30269a4ff22a..62332ed9da4a 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c | |||
@@ -62,13 +62,14 @@ struct p9_trans_fd { | |||
62 | 62 | ||
63 | enum { | 63 | enum { |
64 | /* Options that take integer arguments */ | 64 | /* Options that take integer arguments */ |
65 | Opt_port, Opt_rfdno, Opt_wfdno, | 65 | Opt_port, Opt_rfdno, Opt_wfdno, Opt_err, |
66 | }; | 66 | }; |
67 | 67 | ||
68 | static match_table_t tokens = { | 68 | static match_table_t tokens = { |
69 | {Opt_port, "port=%u"}, | 69 | {Opt_port, "port=%u"}, |
70 | {Opt_rfdno, "rfdno=%u"}, | 70 | {Opt_rfdno, "rfdno=%u"}, |
71 | {Opt_wfdno, "wfdno=%u"}, | 71 | {Opt_wfdno, "wfdno=%u"}, |
72 | {Opt_err, NULL}, | ||
72 | }; | 73 | }; |
73 | 74 | ||
74 | /** | 75 | /** |