diff options
author | Tejun Heo <htejun@gmail.com> | 2007-09-20 03:05:10 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-10-12 17:51:10 -0400 |
commit | b05f0548dabd20433f8c201a0307103721d6a18b (patch) | |
tree | 1dd741ce7ee0a05f20b4b1469f03b378c8ee9ed1 /fs | |
parent | b13dc89c5a5bd5e34aadb44c0fb7e870959dcd06 (diff) |
sysfs: kill unnecessary sysfs_get() in open paths
There's no reason to get an extra reference to sysfs_dirent for an
open file. Open file has a reference to the dentry which in turn has
a reference to sysfs_dirent. This is fairly obvious as otherwise open
itself won't be able to access the sysfs_dirent. Kill the extra
sysfs_get() and matching sysfs_put().
Signed-off-by: Tejun Heo <htejun@gmail.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/sysfs/bin.c | 4 | ||||
-rw-r--r-- | fs/sysfs/file.c | 6 |
2 files changed, 2 insertions, 8 deletions
diff --git a/fs/sysfs/bin.c b/fs/sysfs/bin.c index a819a7e8d74d..e93fe5e2fa41 100644 --- a/fs/sysfs/bin.c +++ b/fs/sysfs/bin.c | |||
@@ -193,9 +193,8 @@ static int open(struct inode * inode, struct file * file) | |||
193 | mutex_init(&bb->mutex); | 193 | mutex_init(&bb->mutex); |
194 | file->private_data = bb; | 194 | file->private_data = bb; |
195 | 195 | ||
196 | /* open succeeded, put active reference and pin attr_sd */ | 196 | /* open succeeded, put active reference */ |
197 | sysfs_put_active(attr_sd); | 197 | sysfs_put_active(attr_sd); |
198 | sysfs_get(attr_sd); | ||
199 | return 0; | 198 | return 0; |
200 | 199 | ||
201 | err_out: | 200 | err_out: |
@@ -211,7 +210,6 @@ static int release(struct inode * inode, struct file * file) | |||
211 | 210 | ||
212 | if (bb->mmapped) | 211 | if (bb->mmapped) |
213 | sysfs_put_active_two(attr_sd); | 212 | sysfs_put_active_two(attr_sd); |
214 | sysfs_put(attr_sd); | ||
215 | kfree(bb->buffer); | 213 | kfree(bb->buffer); |
216 | kfree(bb); | 214 | kfree(bb); |
217 | return 0; | 215 | return 0; |
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index 61a8c19df7c3..73333dc68545 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
@@ -298,9 +298,8 @@ static int sysfs_open_file(struct inode *inode, struct file *file) | |||
298 | buffer->ops = ops; | 298 | buffer->ops = ops; |
299 | file->private_data = buffer; | 299 | file->private_data = buffer; |
300 | 300 | ||
301 | /* open succeeded, put active references and pin attr_sd */ | 301 | /* open succeeded, put active references */ |
302 | sysfs_put_active_two(attr_sd); | 302 | sysfs_put_active_two(attr_sd); |
303 | sysfs_get(attr_sd); | ||
304 | return 0; | 303 | return 0; |
305 | 304 | ||
306 | err_out: | 305 | err_out: |
@@ -310,11 +309,8 @@ static int sysfs_open_file(struct inode *inode, struct file *file) | |||
310 | 309 | ||
311 | static int sysfs_release(struct inode * inode, struct file * filp) | 310 | static int sysfs_release(struct inode * inode, struct file * filp) |
312 | { | 311 | { |
313 | struct sysfs_dirent *attr_sd = filp->f_path.dentry->d_fsdata; | ||
314 | struct sysfs_buffer *buffer = filp->private_data; | 312 | struct sysfs_buffer *buffer = filp->private_data; |
315 | 313 | ||
316 | sysfs_put(attr_sd); | ||
317 | |||
318 | if (buffer) { | 314 | if (buffer) { |
319 | if (buffer->page) | 315 | if (buffer->page) |
320 | free_page((unsigned long)buffer->page); | 316 | free_page((unsigned long)buffer->page); |