aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/bin.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-09-20 03:05:10 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-10-12 17:51:10 -0400
commit078ce6409ca54d5fc6eb7d2147cd6efc3eb09078 (patch)
treec2c9879610b1aa8ca84360937669289058fa9837 /fs/sysfs/bin.c
parent50ab1a72863b1ad4b117862bc52610f8d4535609 (diff)
sysfs: make bin attr open get active reference of parent too
All bin attr operations require active references of itself and its parent. There's no reason to allow open when its parent has been deactivated and allowing it is inconsistent with regular sysfs file. Use sysfs_get_active_two() in bin attribute open function. 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/sysfs/bin.c')
-rw-r--r--fs/sysfs/bin.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/sysfs/bin.c b/fs/sysfs/bin.c
index e93fe5e2fa41..9c8f8824e660 100644
--- a/fs/sysfs/bin.c
+++ b/fs/sysfs/bin.c
@@ -171,8 +171,8 @@ static int open(struct inode * inode, struct file * file)
171 struct bin_buffer *bb = NULL; 171 struct bin_buffer *bb = NULL;
172 int error; 172 int error;
173 173
174 /* need attr_sd for attr */ 174 /* binary file operations requires both @sd and its parent */
175 if (!sysfs_get_active(attr_sd)) 175 if (!sysfs_get_active_two(attr_sd))
176 return -ENODEV; 176 return -ENODEV;
177 177
178 error = -EACCES; 178 error = -EACCES;
@@ -193,12 +193,12 @@ 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 */ 196 /* open succeeded, put active references */
197 sysfs_put_active(attr_sd); 197 sysfs_put_active_two(attr_sd);
198 return 0; 198 return 0;
199 199
200 err_out: 200 err_out:
201 sysfs_put_active(attr_sd); 201 sysfs_put_active_two(attr_sd);
202 kfree(bb); 202 kfree(bb);
203 return error; 203 return error;
204} 204}