diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-23 16:35:03 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-23 16:35:03 -0500 |
commit | f793067eb91afa37904d33075bd44fd8b2774b8a (patch) | |
tree | 909cb1b829eae74d51dcaff918bcd252c54ed0e8 | |
parent | f988dac7fe4eb1ab0c7b1c5dc6d847f6aad5a1cd (diff) | |
parent | 8042273801059884da2d53bbca34575d090b6f4e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6:
devtmpfs: unlock mutex in case of string allocation error
Driver core: export platform_device_register_data as a GPL symbol
driver core: Prevent reference to freed memory on error path
Driver-core: Fix bogus 0 error return in device_add()
Driver core: driver_attribute parameters can often be const*
Driver core: bin_attribute parameters can often be const*
Driver core: device_attribute parameters can often be const*
Doc/stable rules: add new cherry-pick logic
vfs: get_sb_single() - do not pass options twice
devtmpfs: Convert dirlock to a mutex
-rw-r--r-- | Documentation/driver-model/driver.txt | 4 | ||||
-rw-r--r-- | Documentation/filesystems/sysfs.txt | 12 | ||||
-rw-r--r-- | Documentation/stable_kernel_rules.txt | 24 | ||||
-rw-r--r-- | drivers/base/bus.c | 2 | ||||
-rw-r--r-- | drivers/base/core.c | 16 | ||||
-rw-r--r-- | drivers/base/devtmpfs.c | 19 | ||||
-rw-r--r-- | drivers/base/driver.c | 4 | ||||
-rw-r--r-- | drivers/base/platform.c | 1 | ||||
-rw-r--r-- | fs/super.c | 3 | ||||
-rw-r--r-- | fs/sysfs/bin.c | 6 | ||||
-rw-r--r-- | include/linux/device.h | 12 | ||||
-rw-r--r-- | include/linux/sysfs.h | 9 |
12 files changed, 72 insertions, 40 deletions
diff --git a/Documentation/driver-model/driver.txt b/Documentation/driver-model/driver.txt index 60120fb3b961..d2cd6fb8ba9e 100644 --- a/Documentation/driver-model/driver.txt +++ b/Documentation/driver-model/driver.txt | |||
@@ -226,5 +226,5 @@ struct driver_attribute driver_attr_debug; | |||
226 | This can then be used to add and remove the attribute from the | 226 | This can then be used to add and remove the attribute from the |
227 | driver's directory using: | 227 | driver's directory using: |
228 | 228 | ||
229 | int driver_create_file(struct device_driver *, struct driver_attribute *); | 229 | int driver_create_file(struct device_driver *, const struct driver_attribute *); |
230 | void driver_remove_file(struct device_driver *, struct driver_attribute *); | 230 | void driver_remove_file(struct device_driver *, const struct driver_attribute *); |
diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt index b245d524d568..931c806642c5 100644 --- a/Documentation/filesystems/sysfs.txt +++ b/Documentation/filesystems/sysfs.txt | |||
@@ -91,8 +91,8 @@ struct device_attribute { | |||
91 | const char *buf, size_t count); | 91 | const char *buf, size_t count); |
92 | }; | 92 | }; |
93 | 93 | ||
94 | int device_create_file(struct device *, struct device_attribute *); | 94 | int device_create_file(struct device *, const struct device_attribute *); |
95 | void device_remove_file(struct device *, struct device_attribute *); | 95 | void device_remove_file(struct device *, const struct device_attribute *); |
96 | 96 | ||
97 | It also defines this helper for defining device attributes: | 97 | It also defines this helper for defining device attributes: |
98 | 98 | ||
@@ -316,8 +316,8 @@ DEVICE_ATTR(_name, _mode, _show, _store); | |||
316 | 316 | ||
317 | Creation/Removal: | 317 | Creation/Removal: |
318 | 318 | ||
319 | int device_create_file(struct device *device, struct device_attribute * attr); | 319 | int device_create_file(struct device *dev, const struct device_attribute * attr); |
320 | void device_remove_file(struct device * dev, struct device_attribute * attr); | 320 | void device_remove_file(struct device *dev, const struct device_attribute * attr); |
321 | 321 | ||
322 | 322 | ||
323 | - bus drivers (include/linux/device.h) | 323 | - bus drivers (include/linux/device.h) |
@@ -358,7 +358,7 @@ DRIVER_ATTR(_name, _mode, _show, _store) | |||
358 | 358 | ||
359 | Creation/Removal: | 359 | Creation/Removal: |
360 | 360 | ||
361 | int driver_create_file(struct device_driver *, struct driver_attribute *); | 361 | int driver_create_file(struct device_driver *, const struct driver_attribute *); |
362 | void driver_remove_file(struct device_driver *, struct driver_attribute *); | 362 | void driver_remove_file(struct device_driver *, const struct driver_attribute *); |
363 | 363 | ||
364 | 364 | ||
diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt index a452227361b1..5effa5bd993b 100644 --- a/Documentation/stable_kernel_rules.txt +++ b/Documentation/stable_kernel_rules.txt | |||
@@ -26,13 +26,33 @@ Procedure for submitting patches to the -stable tree: | |||
26 | 26 | ||
27 | - Send the patch, after verifying that it follows the above rules, to | 27 | - Send the patch, after verifying that it follows the above rules, to |
28 | stable@kernel.org. | 28 | stable@kernel.org. |
29 | - To have the patch automatically included in the stable tree, add the | ||
30 | the tag | ||
31 | Cc: stable@kernel.org | ||
32 | in the sign-off area. Once the patch is merged it will be applied to | ||
33 | the stable tree without anything else needing to be done by the author | ||
34 | or subsystem maintainer. | ||
35 | - If the patch requires other patches as prerequisites which can be | ||
36 | cherry-picked than this can be specified in the following format in | ||
37 | the sign-off area: | ||
38 | |||
39 | Cc: <stable@kernel.org> # .32.x: a1f84a3: sched: Check for idle | ||
40 | Cc: <stable@kernel.org> # .32.x: 1b9508f: sched: Rate-limit newidle | ||
41 | Cc: <stable@kernel.org> # .32.x: fd21073: sched: Fix affinity logic | ||
42 | Cc: <stable@kernel.org> # .32.x | ||
43 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | ||
44 | |||
45 | The tag sequence has the meaning of: | ||
46 | git cherry-pick a1f84a3 | ||
47 | git cherry-pick 1b9508f | ||
48 | git cherry-pick fd21073 | ||
49 | git cherry-pick <this commit> | ||
50 | |||
29 | - The sender will receive an ACK when the patch has been accepted into the | 51 | - The sender will receive an ACK when the patch has been accepted into the |
30 | queue, or a NAK if the patch is rejected. This response might take a few | 52 | queue, or a NAK if the patch is rejected. This response might take a few |
31 | days, according to the developer's schedules. | 53 | days, according to the developer's schedules. |
32 | - If accepted, the patch will be added to the -stable queue, for review by | 54 | - If accepted, the patch will be added to the -stable queue, for review by |
33 | other developers and by the relevant subsystem maintainer. | 55 | other developers and by the relevant subsystem maintainer. |
34 | - If the stable@kernel.org address is added to a patch, when it goes into | ||
35 | Linus's tree it will automatically be emailed to the stable team. | ||
36 | - Security patches should not be sent to this alias, but instead to the | 56 | - Security patches should not be sent to this alias, but instead to the |
37 | documented security@kernel.org address. | 57 | documented security@kernel.org address. |
38 | 58 | ||
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 63c143e54a57..c0c5a43d9fb3 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
@@ -703,9 +703,9 @@ int bus_add_driver(struct device_driver *drv) | |||
703 | return 0; | 703 | return 0; |
704 | 704 | ||
705 | out_unregister: | 705 | out_unregister: |
706 | kobject_put(&priv->kobj); | ||
706 | kfree(drv->p); | 707 | kfree(drv->p); |
707 | drv->p = NULL; | 708 | drv->p = NULL; |
708 | kobject_put(&priv->kobj); | ||
709 | out_put_bus: | 709 | out_put_bus: |
710 | bus_put(bus); | 710 | bus_put(bus); |
711 | return error; | 711 | return error; |
diff --git a/drivers/base/core.c b/drivers/base/core.c index f1290cbd1350..282025770429 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
@@ -446,7 +446,8 @@ struct kset *devices_kset; | |||
446 | * @dev: device. | 446 | * @dev: device. |
447 | * @attr: device attribute descriptor. | 447 | * @attr: device attribute descriptor. |
448 | */ | 448 | */ |
449 | int device_create_file(struct device *dev, struct device_attribute *attr) | 449 | int device_create_file(struct device *dev, |
450 | const struct device_attribute *attr) | ||
450 | { | 451 | { |
451 | int error = 0; | 452 | int error = 0; |
452 | if (dev) | 453 | if (dev) |
@@ -459,7 +460,8 @@ int device_create_file(struct device *dev, struct device_attribute *attr) | |||
459 | * @dev: device. | 460 | * @dev: device. |
460 | * @attr: device attribute descriptor. | 461 | * @attr: device attribute descriptor. |
461 | */ | 462 | */ |
462 | void device_remove_file(struct device *dev, struct device_attribute *attr) | 463 | void device_remove_file(struct device *dev, |
464 | const struct device_attribute *attr) | ||
463 | { | 465 | { |
464 | if (dev) | 466 | if (dev) |
465 | sysfs_remove_file(&dev->kobj, &attr->attr); | 467 | sysfs_remove_file(&dev->kobj, &attr->attr); |
@@ -470,7 +472,8 @@ void device_remove_file(struct device *dev, struct device_attribute *attr) | |||
470 | * @dev: device. | 472 | * @dev: device. |
471 | * @attr: device binary attribute descriptor. | 473 | * @attr: device binary attribute descriptor. |
472 | */ | 474 | */ |
473 | int device_create_bin_file(struct device *dev, struct bin_attribute *attr) | 475 | int device_create_bin_file(struct device *dev, |
476 | const struct bin_attribute *attr) | ||
474 | { | 477 | { |
475 | int error = -EINVAL; | 478 | int error = -EINVAL; |
476 | if (dev) | 479 | if (dev) |
@@ -484,7 +487,8 @@ EXPORT_SYMBOL_GPL(device_create_bin_file); | |||
484 | * @dev: device. | 487 | * @dev: device. |
485 | * @attr: device binary attribute descriptor. | 488 | * @attr: device binary attribute descriptor. |
486 | */ | 489 | */ |
487 | void device_remove_bin_file(struct device *dev, struct bin_attribute *attr) | 490 | void device_remove_bin_file(struct device *dev, |
491 | const struct bin_attribute *attr) | ||
488 | { | 492 | { |
489 | if (dev) | 493 | if (dev) |
490 | sysfs_remove_bin_file(&dev->kobj, attr); | 494 | sysfs_remove_bin_file(&dev->kobj, attr); |
@@ -905,8 +909,10 @@ int device_add(struct device *dev) | |||
905 | dev->init_name = NULL; | 909 | dev->init_name = NULL; |
906 | } | 910 | } |
907 | 911 | ||
908 | if (!dev_name(dev)) | 912 | if (!dev_name(dev)) { |
913 | error = -EINVAL; | ||
909 | goto name_error; | 914 | goto name_error; |
915 | } | ||
910 | 916 | ||
911 | pr_debug("device: '%s': %s\n", dev_name(dev), __func__); | 917 | pr_debug("device: '%s': %s\n", dev_name(dev), __func__); |
912 | 918 | ||
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index 50375bb8e51d..090dd4851301 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c | |||
@@ -32,7 +32,7 @@ static int dev_mount = 1; | |||
32 | static int dev_mount; | 32 | static int dev_mount; |
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | static rwlock_t dirlock; | 35 | static DEFINE_MUTEX(dirlock); |
36 | 36 | ||
37 | static int __init mount_param(char *str) | 37 | static int __init mount_param(char *str) |
38 | { | 38 | { |
@@ -93,7 +93,7 @@ static int create_path(const char *nodepath) | |||
93 | { | 93 | { |
94 | int err; | 94 | int err; |
95 | 95 | ||
96 | read_lock(&dirlock); | 96 | mutex_lock(&dirlock); |
97 | err = dev_mkdir(nodepath, 0755); | 97 | err = dev_mkdir(nodepath, 0755); |
98 | if (err == -ENOENT) { | 98 | if (err == -ENOENT) { |
99 | char *path; | 99 | char *path; |
@@ -101,8 +101,10 @@ static int create_path(const char *nodepath) | |||
101 | 101 | ||
102 | /* parent directories do not exist, create them */ | 102 | /* parent directories do not exist, create them */ |
103 | path = kstrdup(nodepath, GFP_KERNEL); | 103 | path = kstrdup(nodepath, GFP_KERNEL); |
104 | if (!path) | 104 | if (!path) { |
105 | return -ENOMEM; | 105 | err = -ENOMEM; |
106 | goto out; | ||
107 | } | ||
106 | s = path; | 108 | s = path; |
107 | for (;;) { | 109 | for (;;) { |
108 | s = strchr(s, '/'); | 110 | s = strchr(s, '/'); |
@@ -117,7 +119,8 @@ static int create_path(const char *nodepath) | |||
117 | } | 119 | } |
118 | kfree(path); | 120 | kfree(path); |
119 | } | 121 | } |
120 | read_unlock(&dirlock); | 122 | out: |
123 | mutex_unlock(&dirlock); | ||
121 | return err; | 124 | return err; |
122 | } | 125 | } |
123 | 126 | ||
@@ -229,7 +232,7 @@ static int delete_path(const char *nodepath) | |||
229 | if (!path) | 232 | if (!path) |
230 | return -ENOMEM; | 233 | return -ENOMEM; |
231 | 234 | ||
232 | write_lock(&dirlock); | 235 | mutex_lock(&dirlock); |
233 | for (;;) { | 236 | for (;;) { |
234 | char *base; | 237 | char *base; |
235 | 238 | ||
@@ -241,7 +244,7 @@ static int delete_path(const char *nodepath) | |||
241 | if (err) | 244 | if (err) |
242 | break; | 245 | break; |
243 | } | 246 | } |
244 | write_unlock(&dirlock); | 247 | mutex_unlock(&dirlock); |
245 | 248 | ||
246 | kfree(path); | 249 | kfree(path); |
247 | return err; | 250 | return err; |
@@ -352,8 +355,6 @@ int __init devtmpfs_init(void) | |||
352 | int err; | 355 | int err; |
353 | struct vfsmount *mnt; | 356 | struct vfsmount *mnt; |
354 | 357 | ||
355 | rwlock_init(&dirlock); | ||
356 | |||
357 | err = register_filesystem(&dev_fs_type); | 358 | err = register_filesystem(&dev_fs_type); |
358 | if (err) { | 359 | if (err) { |
359 | printk(KERN_ERR "devtmpfs: unable to register devtmpfs " | 360 | printk(KERN_ERR "devtmpfs: unable to register devtmpfs " |
diff --git a/drivers/base/driver.c b/drivers/base/driver.c index f367885a7646..90c9fff09ead 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c | |||
@@ -98,7 +98,7 @@ EXPORT_SYMBOL_GPL(driver_find_device); | |||
98 | * @attr: driver attribute descriptor. | 98 | * @attr: driver attribute descriptor. |
99 | */ | 99 | */ |
100 | int driver_create_file(struct device_driver *drv, | 100 | int driver_create_file(struct device_driver *drv, |
101 | struct driver_attribute *attr) | 101 | const struct driver_attribute *attr) |
102 | { | 102 | { |
103 | int error; | 103 | int error; |
104 | if (drv) | 104 | if (drv) |
@@ -115,7 +115,7 @@ EXPORT_SYMBOL_GPL(driver_create_file); | |||
115 | * @attr: driver attribute descriptor. | 115 | * @attr: driver attribute descriptor. |
116 | */ | 116 | */ |
117 | void driver_remove_file(struct device_driver *drv, | 117 | void driver_remove_file(struct device_driver *drv, |
118 | struct driver_attribute *attr) | 118 | const struct driver_attribute *attr) |
119 | { | 119 | { |
120 | if (drv) | 120 | if (drv) |
121 | sysfs_remove_file(&drv->p->kobj, &attr->attr); | 121 | sysfs_remove_file(&drv->p->kobj, &attr->attr); |
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 9d2ee25deaf5..58efaf2f1259 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
@@ -441,6 +441,7 @@ error: | |||
441 | platform_device_put(pdev); | 441 | platform_device_put(pdev); |
442 | return ERR_PTR(retval); | 442 | return ERR_PTR(retval); |
443 | } | 443 | } |
444 | EXPORT_SYMBOL_GPL(platform_device_register_data); | ||
444 | 445 | ||
445 | static int platform_drv_probe(struct device *_dev) | 446 | static int platform_drv_probe(struct device *_dev) |
446 | { | 447 | { |
diff --git a/fs/super.c b/fs/super.c index 19eb70b374bc..aff046b0fe78 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -901,8 +901,9 @@ int get_sb_single(struct file_system_type *fs_type, | |||
901 | return error; | 901 | return error; |
902 | } | 902 | } |
903 | s->s_flags |= MS_ACTIVE; | 903 | s->s_flags |= MS_ACTIVE; |
904 | } else { | ||
905 | do_remount_sb(s, flags, data, 0); | ||
904 | } | 906 | } |
905 | do_remount_sb(s, flags, data, 0); | ||
906 | simple_set_mnt(mnt, s); | 907 | simple_set_mnt(mnt, s); |
907 | return 0; | 908 | return 0; |
908 | } | 909 | } |
diff --git a/fs/sysfs/bin.c b/fs/sysfs/bin.c index 60c702bc10ae..a0a500af24a1 100644 --- a/fs/sysfs/bin.c +++ b/fs/sysfs/bin.c | |||
@@ -483,7 +483,8 @@ void unmap_bin_file(struct sysfs_dirent *attr_sd) | |||
483 | * @attr: attribute descriptor. | 483 | * @attr: attribute descriptor. |
484 | */ | 484 | */ |
485 | 485 | ||
486 | int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr) | 486 | int sysfs_create_bin_file(struct kobject *kobj, |
487 | const struct bin_attribute *attr) | ||
487 | { | 488 | { |
488 | BUG_ON(!kobj || !kobj->sd || !attr); | 489 | BUG_ON(!kobj || !kobj->sd || !attr); |
489 | 490 | ||
@@ -497,7 +498,8 @@ int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr) | |||
497 | * @attr: attribute descriptor. | 498 | * @attr: attribute descriptor. |
498 | */ | 499 | */ |
499 | 500 | ||
500 | void sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr) | 501 | void sysfs_remove_bin_file(struct kobject *kobj, |
502 | const struct bin_attribute *attr) | ||
501 | { | 503 | { |
502 | sysfs_hash_and_remove(kobj->sd, attr->attr.name); | 504 | sysfs_hash_and_remove(kobj->sd, attr->attr.name); |
503 | } | 505 | } |
diff --git a/include/linux/device.h b/include/linux/device.h index 2a73d9bcbc9c..a62799f2ab00 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -166,9 +166,9 @@ struct driver_attribute driver_attr_##_name = \ | |||
166 | __ATTR(_name, _mode, _show, _store) | 166 | __ATTR(_name, _mode, _show, _store) |
167 | 167 | ||
168 | extern int __must_check driver_create_file(struct device_driver *driver, | 168 | extern int __must_check driver_create_file(struct device_driver *driver, |
169 | struct driver_attribute *attr); | 169 | const struct driver_attribute *attr); |
170 | extern void driver_remove_file(struct device_driver *driver, | 170 | extern void driver_remove_file(struct device_driver *driver, |
171 | struct driver_attribute *attr); | 171 | const struct driver_attribute *attr); |
172 | 172 | ||
173 | extern int __must_check driver_add_kobj(struct device_driver *drv, | 173 | extern int __must_check driver_add_kobj(struct device_driver *drv, |
174 | struct kobject *kobj, | 174 | struct kobject *kobj, |
@@ -319,13 +319,13 @@ struct device_attribute { | |||
319 | struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) | 319 | struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) |
320 | 320 | ||
321 | extern int __must_check device_create_file(struct device *device, | 321 | extern int __must_check device_create_file(struct device *device, |
322 | struct device_attribute *entry); | 322 | const struct device_attribute *entry); |
323 | extern void device_remove_file(struct device *dev, | 323 | extern void device_remove_file(struct device *dev, |
324 | struct device_attribute *attr); | 324 | const struct device_attribute *attr); |
325 | extern int __must_check device_create_bin_file(struct device *dev, | 325 | extern int __must_check device_create_bin_file(struct device *dev, |
326 | struct bin_attribute *attr); | 326 | const struct bin_attribute *attr); |
327 | extern void device_remove_bin_file(struct device *dev, | 327 | extern void device_remove_bin_file(struct device *dev, |
328 | struct bin_attribute *attr); | 328 | const struct bin_attribute *attr); |
329 | extern int device_schedule_callback_owner(struct device *dev, | 329 | extern int device_schedule_callback_owner(struct device *dev, |
330 | void (*func)(struct device *dev), struct module *owner); | 330 | void (*func)(struct device *dev), struct module *owner); |
331 | 331 | ||
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 9d68fed50f11..cfa83083a2d4 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
@@ -99,8 +99,9 @@ int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, | |||
99 | void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr); | 99 | void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr); |
100 | 100 | ||
101 | int __must_check sysfs_create_bin_file(struct kobject *kobj, | 101 | int __must_check sysfs_create_bin_file(struct kobject *kobj, |
102 | struct bin_attribute *attr); | 102 | const struct bin_attribute *attr); |
103 | void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr); | 103 | void sysfs_remove_bin_file(struct kobject *kobj, |
104 | const struct bin_attribute *attr); | ||
104 | 105 | ||
105 | int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target, | 106 | int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target, |
106 | const char *name); | 107 | const char *name); |
@@ -175,13 +176,13 @@ static inline void sysfs_remove_file(struct kobject *kobj, | |||
175 | } | 176 | } |
176 | 177 | ||
177 | static inline int sysfs_create_bin_file(struct kobject *kobj, | 178 | static inline int sysfs_create_bin_file(struct kobject *kobj, |
178 | struct bin_attribute *attr) | 179 | const struct bin_attribute *attr) |
179 | { | 180 | { |
180 | return 0; | 181 | return 0; |
181 | } | 182 | } |
182 | 183 | ||
183 | static inline void sysfs_remove_bin_file(struct kobject *kobj, | 184 | static inline void sysfs_remove_bin_file(struct kobject *kobj, |
184 | struct bin_attribute *attr) | 185 | const struct bin_attribute *attr) |
185 | { | 186 | { |
186 | } | 187 | } |
187 | 188 | ||