Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sysfs: kill unnecessary attribute->owner

sysfs is now completely out of driver/module lifetime game. After
deletion, a sysfs node doesn't access anything outside sysfs proper,
so there's no reason to hold onto the attribute owners. Note that
often the wrong modules were accounted for as owners leading to
accessing removed modules.

This patch kills now unnecessary attribute->owner. Note that with
this change, userland holding a sysfs node does not prevent the
backing module from being unloaded.

For more info regarding lifetime rule cleanup, please read the
following message.

http://article.gmane.org/gmane.linux.kernel/510293

(tweaked by Greg to not delete the field just yet, to make it easier to
merge things properly.)

Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Tejun Heo and committed by
Greg Kroah-Hartman
7b595756 dbde0fcf

+44 -135
-1
arch/ppc/syslib/mv64x60.c
··· 2415 2415 .attr = { 2416 2416 .name = "hs_reg", 2417 2417 .mode = S_IRUGO | S_IWUSR, 2418 - .owner = THIS_MODULE, 2419 2418 }, 2420 2419 .size = VAL_LEN_MAX, 2421 2420 .read = mv64xxx_hs_reg_read,
-2
arch/s390/kernel/ipl.c
··· 312 312 .attr = { 313 313 .name = "binary_parameter", 314 314 .mode = S_IRUGO, 315 - .owner = THIS_MODULE, 316 315 }, 317 316 .size = PAGE_SIZE, 318 317 .read = &ipl_parameter_read, ··· 335 336 .attr = { 336 337 .name = "scp_data", 337 338 .mode = S_IRUGO, 338 - .owner = THIS_MODULE, 339 339 }, 340 340 .size = PAGE_SIZE, 341 341 .read = &ipl_scp_data_read,
-2
drivers/base/bus.c
··· 574 574 575 575 bus->drivers_probe_attr.attr.name = "drivers_probe"; 576 576 bus->drivers_probe_attr.attr.mode = S_IWUSR; 577 - bus->drivers_probe_attr.attr.owner = bus->owner; 578 577 bus->drivers_probe_attr.store = store_drivers_probe; 579 578 retval = bus_create_file(bus, &bus->drivers_probe_attr); 580 579 if (retval) ··· 581 582 582 583 bus->drivers_autoprobe_attr.attr.name = "drivers_autoprobe"; 583 584 bus->drivers_autoprobe_attr.attr.mode = S_IWUSR | S_IRUGO; 584 - bus->drivers_autoprobe_attr.attr.owner = bus->owner; 585 585 bus->drivers_autoprobe_attr.show = show_drivers_autoprobe; 586 586 bus->drivers_autoprobe_attr.store = store_drivers_autoprobe; 587 587 retval = bus_create_file(bus, &bus->drivers_autoprobe_attr);
-2
drivers/base/class.c
··· 605 605 goto out3; 606 606 class_dev->uevent_attr.attr.name = "uevent"; 607 607 class_dev->uevent_attr.attr.mode = S_IWUSR; 608 - class_dev->uevent_attr.attr.owner = parent_class->owner; 609 608 class_dev->uevent_attr.store = store_uevent; 610 609 error = class_device_create_file(class_dev, &class_dev->uevent_attr); 611 610 if (error) ··· 619 620 } 620 621 attr->attr.name = "dev"; 621 622 attr->attr.mode = S_IRUGO; 622 - attr->attr.owner = parent_class->owner; 623 623 attr->show = show_dev; 624 624 error = class_device_create_file(class_dev, attr); 625 625 if (error) {
-4
drivers/base/core.c
··· 683 683 684 684 dev->uevent_attr.attr.name = "uevent"; 685 685 dev->uevent_attr.attr.mode = S_IRUGO | S_IWUSR; 686 - if (dev->driver) 687 - dev->uevent_attr.attr.owner = dev->driver->owner; 688 686 dev->uevent_attr.store = store_uevent; 689 687 dev->uevent_attr.show = show_uevent; 690 688 error = device_create_file(dev, &dev->uevent_attr); ··· 698 700 } 699 701 attr->attr.name = "dev"; 700 702 attr->attr.mode = S_IRUGO; 701 - if (dev->driver) 702 - attr->attr.owner = dev->driver->owner; 703 703 attr->show = show_dev; 704 704 error = device_create_file(dev, attr); 705 705 if (error) {
+1 -1
drivers/base/firmware_class.c
··· 271 271 } 272 272 273 273 static struct bin_attribute firmware_attr_data_tmpl = { 274 - .attr = {.name = "data", .mode = 0644, .owner = THIS_MODULE}, 274 + .attr = {.name = "data", .mode = 0644}, 275 275 .size = 0, 276 276 .read = firmware_data_read, 277 277 .write = firmware_data_write,
+1 -2
drivers/block/pktcdvd.c
··· 146 146 **********************************************************/ 147 147 148 148 #define DEF_ATTR(_obj,_name,_mode) \ 149 - static struct attribute _obj = { \ 150 - .name = _name, .owner = THIS_MODULE, .mode = _mode } 149 + static struct attribute _obj = { .name = _name, .mode = _mode } 151 150 152 151 /********************************************************** 153 152 /sys/class/pktcdvd/pktcdvd[0-7]/
-10
drivers/char/ipmi/ipmi_msghandler.c
··· 2171 2171 int err; 2172 2172 2173 2173 bmc->device_id_attr.attr.name = "device_id"; 2174 - bmc->device_id_attr.attr.owner = THIS_MODULE; 2175 2174 bmc->device_id_attr.attr.mode = S_IRUGO; 2176 2175 bmc->device_id_attr.show = device_id_show; 2177 2176 2178 2177 bmc->provides_dev_sdrs_attr.attr.name = "provides_device_sdrs"; 2179 - bmc->provides_dev_sdrs_attr.attr.owner = THIS_MODULE; 2180 2178 bmc->provides_dev_sdrs_attr.attr.mode = S_IRUGO; 2181 2179 bmc->provides_dev_sdrs_attr.show = provides_dev_sdrs_show; 2182 2180 2183 2181 bmc->revision_attr.attr.name = "revision"; 2184 - bmc->revision_attr.attr.owner = THIS_MODULE; 2185 2182 bmc->revision_attr.attr.mode = S_IRUGO; 2186 2183 bmc->revision_attr.show = revision_show; 2187 2184 2188 2185 bmc->firmware_rev_attr.attr.name = "firmware_revision"; 2189 - bmc->firmware_rev_attr.attr.owner = THIS_MODULE; 2190 2186 bmc->firmware_rev_attr.attr.mode = S_IRUGO; 2191 2187 bmc->firmware_rev_attr.show = firmware_rev_show; 2192 2188 2193 2189 bmc->version_attr.attr.name = "ipmi_version"; 2194 - bmc->version_attr.attr.owner = THIS_MODULE; 2195 2190 bmc->version_attr.attr.mode = S_IRUGO; 2196 2191 bmc->version_attr.show = ipmi_version_show; 2197 2192 2198 2193 bmc->add_dev_support_attr.attr.name = "additional_device_support"; 2199 - bmc->add_dev_support_attr.attr.owner = THIS_MODULE; 2200 2194 bmc->add_dev_support_attr.attr.mode = S_IRUGO; 2201 2195 bmc->add_dev_support_attr.show = add_dev_support_show; 2202 2196 2203 2197 bmc->manufacturer_id_attr.attr.name = "manufacturer_id"; 2204 - bmc->manufacturer_id_attr.attr.owner = THIS_MODULE; 2205 2198 bmc->manufacturer_id_attr.attr.mode = S_IRUGO; 2206 2199 bmc->manufacturer_id_attr.show = manufacturer_id_show; 2207 2200 2208 2201 bmc->product_id_attr.attr.name = "product_id"; 2209 - bmc->product_id_attr.attr.owner = THIS_MODULE; 2210 2202 bmc->product_id_attr.attr.mode = S_IRUGO; 2211 2203 bmc->product_id_attr.show = product_id_show; 2212 2204 2213 2205 bmc->guid_attr.attr.name = "guid"; 2214 - bmc->guid_attr.attr.owner = THIS_MODULE; 2215 2206 bmc->guid_attr.attr.mode = S_IRUGO; 2216 2207 bmc->guid_attr.show = guid_show; 2217 2208 2218 2209 bmc->aux_firmware_rev_attr.attr.name = "aux_firmware_revision"; 2219 - bmc->aux_firmware_rev_attr.attr.owner = THIS_MODULE; 2220 2210 bmc->aux_firmware_rev_attr.attr.mode = S_IRUGO; 2221 2211 bmc->aux_firmware_rev_attr.show = aux_firmware_rev_show; 2222 2212
+1 -2
drivers/cpufreq/cpufreq_stats.c
··· 25 25 26 26 #define CPUFREQ_STATDEVICE_ATTR(_name,_mode,_show) \ 27 27 static struct freq_attr _attr_##_name = {\ 28 - .attr = {.name = __stringify(_name), .owner = THIS_MODULE, \ 29 - .mode = _mode, }, \ 28 + .attr = {.name = __stringify(_name), .mode = _mode, }, \ 30 29 .show = _show,\ 31 30 }; 32 31
+1 -1
drivers/cpufreq/cpufreq_userspace.c
··· 120 120 121 121 static struct freq_attr freq_attr_scaling_setspeed = 122 122 { 123 - .attr = { .name = "scaling_setspeed", .mode = 0644, .owner = THIS_MODULE }, 123 + .attr = { .name = "scaling_setspeed", .mode = 0644 }, 124 124 .show = show_speed, 125 125 .store = store_speed, 126 126 };
-1
drivers/cpufreq/freq_table.c
··· 199 199 struct freq_attr cpufreq_freq_attr_scaling_available_freqs = { 200 200 .attr = { .name = "scaling_available_frequencies", 201 201 .mode = 0444, 202 - .owner=THIS_MODULE 203 202 }, 204 203 .show = show_available_freqs, 205 204 };
+1 -2
drivers/firmware/dcdbas.h
··· 67 67 #define DCDBAS_BIN_ATTR_RW(_name) \ 68 68 struct bin_attribute bin_attr_##_name = { \ 69 69 .attr = { .name = __stringify(_name), \ 70 - .mode = 0600, \ 71 - .owner = THIS_MODULE }, \ 70 + .mode = 0600 }, \ 72 71 .read = _name##_read, \ 73 72 .write = _name##_write, \ 74 73 }
+3 -3
drivers/firmware/dell_rbu.c
··· 687 687 } 688 688 689 689 static struct bin_attribute rbu_data_attr = { 690 - .attr = {.name = "data",.owner = THIS_MODULE,.mode = 0444}, 690 + .attr = {.name = "data", .mode = 0444}, 691 691 .read = read_rbu_data, 692 692 }; 693 693 694 694 static struct bin_attribute rbu_image_type_attr = { 695 - .attr = {.name = "image_type",.owner = THIS_MODULE,.mode = 0644}, 695 + .attr = {.name = "image_type", .mode = 0644}, 696 696 .read = read_rbu_image_type, 697 697 .write = write_rbu_image_type, 698 698 }; 699 699 700 700 static struct bin_attribute rbu_packet_size_attr = { 701 - .attr = {.name = "packet_size",.owner = THIS_MODULE,.mode = 0644}, 701 + .attr = {.name = "packet_size", .mode = 0644}, 702 702 .read = read_rbu_packet_size, 703 703 .write = write_rbu_packet_size, 704 704 };
+1 -1
drivers/firmware/edd.c
··· 74 74 75 75 #define EDD_DEVICE_ATTR(_name,_mode,_show,_test) \ 76 76 struct edd_attribute edd_attr_##_name = { \ 77 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ 77 + .attr = {.name = __stringify(_name), .mode = _mode }, \ 78 78 .show = _show, \ 79 79 .test = _test, \ 80 80 };
+3 -3
drivers/firmware/efivars.c
··· 131 131 132 132 #define EFI_ATTR(_name, _mode, _show, _store) \ 133 133 struct subsys_attribute efi_attr_##_name = { \ 134 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE}, \ 134 + .attr = {.name = __stringify(_name), .mode = _mode}, \ 135 135 .show = _show, \ 136 136 .store = _store, \ 137 137 }; 138 138 139 139 #define EFIVAR_ATTR(_name, _mode, _show, _store) \ 140 140 struct efivar_attribute efivar_attr_##_name = { \ 141 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE}, \ 141 + .attr = {.name = __stringify(_name), .mode = _mode}, \ 142 142 .show = _show, \ 143 143 .store = _store, \ 144 144 }; 145 145 146 146 #define VAR_SUBSYS_ATTR(_name, _mode, _show, _store) \ 147 147 struct subsys_attribute var_subsys_attr_##_name = { \ 148 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE}, \ 148 + .attr = {.name = __stringify(_name), .mode = _mode}, \ 149 149 .show = _show, \ 150 150 .store = _store, \ 151 151 };
-1
drivers/i2c/chips/eeprom.c
··· 143 143 .attr = { 144 144 .name = "eeprom", 145 145 .mode = S_IRUGO, 146 - .owner = THIS_MODULE, 147 146 }, 148 147 .size = EEPROM_SIZE, 149 148 .read = eeprom_read,
-1
drivers/i2c/chips/max6875.c
··· 152 152 .attr = { 153 153 .name = "eeprom", 154 154 .mode = S_IRUGO, 155 - .owner = THIS_MODULE, 156 155 }, 157 156 .size = USER_EEPROM_SIZE, 158 157 .read = max6875_read,
-1
drivers/infiniband/core/sysfs.c
··· 479 479 480 480 element->attr.attr.name = element->name; 481 481 element->attr.attr.mode = S_IRUGO; 482 - element->attr.attr.owner = THIS_MODULE; 483 482 element->attr.show = show; 484 483 element->index = i; 485 484
-1
drivers/input/mouse/psmouse.h
··· 119 119 .attr = { \ 120 120 .name = __stringify(_name), \ 121 121 .mode = _mode, \ 122 - .owner = THIS_MODULE, \ 123 122 }, \ 124 123 .show = psmouse_attr_show_helper, \ 125 124 .store = psmouse_attr_set_helper, \
-2
drivers/macintosh/windfarm_core.c
··· 212 212 list_add(&new_ct->link, &wf_controls); 213 213 214 214 new_ct->attr.attr.name = new_ct->name; 215 - new_ct->attr.attr.owner = THIS_MODULE; 216 215 new_ct->attr.attr.mode = 0644; 217 216 new_ct->attr.show = wf_show_control; 218 217 new_ct->attr.store = wf_store_control; ··· 324 325 list_add(&new_sr->link, &wf_sensors); 325 326 326 327 new_sr->attr.attr.name = new_sr->name; 327 - new_sr->attr.attr.owner = THIS_MODULE; 328 328 new_sr->attr.attr.mode = 0444; 329 329 new_sr->attr.show = wf_show_sensor; 330 330 new_sr->attr.store = NULL;
+1 -2
drivers/misc/asus-laptop.c
··· 737 737 struct device_attribute dev_attr_##_name = { \ 738 738 .attr = { \ 739 739 .name = __stringify(_name), \ 740 - .mode = 0, \ 741 - .owner = THIS_MODULE }, \ 740 + .mode = 0 }, \ 742 741 .show = NULL, \ 743 742 .store = NULL, \ 744 743 }
+1 -1
drivers/net/ibmveth.c
··· 1337 1337 1338 1338 #define ATTR(_name, _mode) \ 1339 1339 struct attribute veth_##_name##_attr = { \ 1340 - .name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE \ 1340 + .name = __stringify(_name), .mode = _mode, \ 1341 1341 }; 1342 1342 1343 1343 static ATTR(active, 0644);
+2 -2
drivers/parisc/pdc_stable.c
··· 121 121 122 122 #define PDCS_ATTR(_name, _mode, _show, _store) \ 123 123 struct subsys_attribute pdcs_attr_##_name = { \ 124 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE}, \ 124 + .attr = {.name = __stringify(_name), .mode = _mode}, \ 125 125 .show = _show, \ 126 126 .store = _store, \ 127 127 }; 128 128 129 129 #define PATHS_ATTR(_name, _mode, _show, _store) \ 130 130 struct pdcspath_attribute paths_attr_##_name = { \ 131 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE}, \ 131 + .attr = {.name = __stringify(_name), .mode = _mode}, \ 132 132 .show = _show, \ 133 133 .store = _store, \ 134 134 };
-1
drivers/pci/hotplug/acpiphp_ibm.c
··· 117 117 static struct bin_attribute ibm_apci_table_attr = { 118 118 .attr = { 119 119 .name = "apci_table", 120 - .owner = THIS_MODULE, 121 120 .mode = S_IRUGO, 122 121 }, 123 122 .read = ibm_read_apci_table,
-4
drivers/pci/pci-sysfs.c
··· 499 499 sprintf(res_attr_name, "resource%d", i); 500 500 res_attr->attr.name = res_attr_name; 501 501 res_attr->attr.mode = S_IRUSR | S_IWUSR; 502 - res_attr->attr.owner = THIS_MODULE; 503 502 res_attr->size = pci_resource_len(pdev, i); 504 503 res_attr->mmap = pci_mmap_resource; 505 504 res_attr->private = &pdev->resource[i]; ··· 581 582 .attr = { 582 583 .name = "config", 583 584 .mode = S_IRUGO | S_IWUSR, 584 - .owner = THIS_MODULE, 585 585 }, 586 586 .size = 256, 587 587 .read = pci_read_config, ··· 591 593 .attr = { 592 594 .name = "config", 593 595 .mode = S_IRUGO | S_IWUSR, 594 - .owner = THIS_MODULE, 595 596 }, 596 597 .size = 4096, 597 598 .read = pci_read_config, ··· 625 628 rom_attr->size = pci_resource_len(pdev, PCI_ROM_RESOURCE); 626 629 rom_attr->attr.name = "rom"; 627 630 rom_attr->attr.mode = S_IRUSR; 628 - rom_attr->attr.owner = THIS_MODULE; 629 631 rom_attr->read = pci_read_rom; 630 632 rom_attr->write = pci_write_rom; 631 633 retval = sysfs_create_bin_file(&pdev->dev.kobj, rom_attr);
-2
drivers/pci/probe.c
··· 39 39 b->legacy_io->attr.name = "legacy_io"; 40 40 b->legacy_io->size = 0xffff; 41 41 b->legacy_io->attr.mode = S_IRUSR | S_IWUSR; 42 - b->legacy_io->attr.owner = THIS_MODULE; 43 42 b->legacy_io->read = pci_read_legacy_io; 44 43 b->legacy_io->write = pci_write_legacy_io; 45 44 class_device_create_bin_file(&b->class_dev, b->legacy_io); ··· 48 49 b->legacy_mem->attr.name = "legacy_mem"; 49 50 b->legacy_mem->size = 1024*1024; 50 51 b->legacy_mem->attr.mode = S_IRUSR | S_IWUSR; 51 - b->legacy_mem->attr.owner = THIS_MODULE; 52 52 b->legacy_mem->mmap = pci_mmap_legacy_mem; 53 53 class_device_create_bin_file(&b->class_dev, b->legacy_mem); 54 54 }
+1 -1
drivers/pcmcia/socket_sysfs.c
··· 366 366 }; 367 367 368 368 static struct bin_attribute pccard_cis_attr = { 369 - .attr = { .name = "cis", .mode = S_IRUGO | S_IWUSR, .owner = THIS_MODULE}, 369 + .attr = { .name = "cis", .mode = S_IRUGO | S_IWUSR }, 370 370 .size = 0x200, 371 371 .read = pccard_show_cis, 372 372 .write = pccard_store_cis,
-1
drivers/rapidio/rio-sysfs.c
··· 197 197 .attr = { 198 198 .name = "config", 199 199 .mode = S_IRUGO | S_IWUSR, 200 - .owner = THIS_MODULE, 201 200 }, 202 201 .size = 0x200000, 203 202 .read = rio_read_config,
-1
drivers/rtc/rtc-ds1553.c
··· 290 290 .attr = { 291 291 .name = "nvram", 292 292 .mode = S_IRUGO | S_IWUGO, 293 - .owner = THIS_MODULE, 294 293 }, 295 294 .size = RTC_OFFSET, 296 295 .read = ds1553_nvram_read,
-1
drivers/rtc/rtc-ds1742.c
··· 159 159 .attr = { 160 160 .name = "nvram", 161 161 .mode = S_IRUGO | S_IWUGO, 162 - .owner = THIS_MODULE, 163 162 }, 164 163 .read = ds1742_nvram_read, 165 164 .write = ds1742_nvram_write,
-2
drivers/s390/cio/chp.c
··· 165 165 .attr = { 166 166 .name = "measurement_chars", 167 167 .mode = S_IRUSR, 168 - .owner = THIS_MODULE, 169 168 }, 170 169 .size = sizeof(struct cmg_chars), 171 170 .read = chp_measurement_chars_read, ··· 216 217 .attr = { 217 218 .name = "measurement", 218 219 .mode = S_IRUSR, 219 - .owner = THIS_MODULE, 220 220 }, 221 221 .size = sizeof(struct cmg_entry), 222 222 .read = chp_measurement_read,
+1 -1
drivers/s390/net/qeth_sys.c
··· 991 991 992 992 #define QETH_DEVICE_ATTR(_id,_name,_mode,_show,_store) \ 993 993 struct device_attribute dev_attr_##_id = { \ 994 - .attr = {.name=__stringify(_name), .mode=_mode, .owner=THIS_MODULE },\ 994 + .attr = {.name=__stringify(_name), .mode=_mode, },\ 995 995 .show = _show, \ 996 996 .store = _store, \ 997 997 };
-3
drivers/scsi/arcmsr/arcmsr_attr.c
··· 188 188 .attr = { 189 189 .name = "mu_read", 190 190 .mode = S_IRUSR , 191 - .owner = THIS_MODULE, 192 191 }, 193 192 .size = 1032, 194 193 .read = arcmsr_sysfs_iop_message_read, ··· 197 198 .attr = { 198 199 .name = "mu_write", 199 200 .mode = S_IWUSR, 200 - .owner = THIS_MODULE, 201 201 }, 202 202 .size = 1032, 203 203 .write = arcmsr_sysfs_iop_message_write, ··· 206 208 .attr = { 207 209 .name = "mu_clear", 208 210 .mode = S_IWUSR, 209 - .owner = THIS_MODULE, 210 211 }, 211 212 .size = 1, 212 213 .write = arcmsr_sysfs_iop_message_clear,
-1
drivers/scsi/libsas/sas_expander.c
··· 1368 1368 memset(bin_attr, 0, sizeof(*bin_attr)); 1369 1369 1370 1370 bin_attr->attr.name = SMP_BIN_ATTR_NAME; 1371 - bin_attr->attr.owner = THIS_MODULE; 1372 1371 bin_attr->attr.mode = 0600; 1373 1372 1374 1373 bin_attr->size = 0;
-2
drivers/scsi/lpfc/lpfc_attr.c
··· 1200 1200 .attr = { 1201 1201 .name = "ctlreg", 1202 1202 .mode = S_IRUSR | S_IWUSR, 1203 - .owner = THIS_MODULE, 1204 1203 }, 1205 1204 .size = 256, 1206 1205 .read = sysfs_ctlreg_read, ··· 1421 1422 .attr = { 1422 1423 .name = "mbox", 1423 1424 .mode = S_IRUSR | S_IWUSR, 1424 - .owner = THIS_MODULE, 1425 1425 }, 1426 1426 .size = MAILBOX_CMD_SIZE, 1427 1427 .read = sysfs_mbox_read,
-6
drivers/scsi/qla2xxx/qla_attr.c
··· 73 73 .attr = { 74 74 .name = "fw_dump", 75 75 .mode = S_IRUSR | S_IWUSR, 76 - .owner = THIS_MODULE, 77 76 }, 78 77 .size = 0, 79 78 .read = qla2x00_sysfs_read_fw_dump, ··· 148 149 .attr = { 149 150 .name = "nvram", 150 151 .mode = S_IRUSR | S_IWUSR, 151 - .owner = THIS_MODULE, 152 152 }, 153 153 .size = 512, 154 154 .read = qla2x00_sysfs_read_nvram, ··· 196 198 .attr = { 197 199 .name = "optrom", 198 200 .mode = S_IRUSR | S_IWUSR, 199 - .owner = THIS_MODULE, 200 201 }, 201 202 .size = OPTROM_SIZE_24XX, 202 203 .read = qla2x00_sysfs_read_optrom, ··· 276 279 .attr = { 277 280 .name = "optrom_ctl", 278 281 .mode = S_IWUSR, 279 - .owner = THIS_MODULE, 280 282 }, 281 283 .size = 0, 282 284 .write = qla2x00_sysfs_write_optrom_ctl, ··· 323 327 .attr = { 324 328 .name = "vpd", 325 329 .mode = S_IRUSR | S_IWUSR, 326 - .owner = THIS_MODULE, 327 330 }, 328 331 .size = 0, 329 332 .read = qla2x00_sysfs_read_vpd, ··· 370 375 .attr = { 371 376 .name = "sfp", 372 377 .mode = S_IRUSR | S_IWUSR, 373 - .owner = THIS_MODULE, 374 378 }, 375 379 .size = SFP_DEV_SIZE * 2, 376 380 .read = qla2x00_sysfs_read_sfp,
-1
drivers/spi/at25.c
··· 314 314 */ 315 315 at25->bin.attr.name = "eeprom"; 316 316 at25->bin.attr.mode = S_IRUSR; 317 - at25->bin.attr.owner = THIS_MODULE; 318 317 at25->bin.read = at25_bin_read; 319 318 320 319 at25->bin.size = at25->chip.byte_len;
-2
drivers/video/aty/radeon_base.c
··· 2126 2126 static struct bin_attribute edid1_attr = { 2127 2127 .attr = { 2128 2128 .name = "edid1", 2129 - .owner = THIS_MODULE, 2130 2129 .mode = 0444, 2131 2130 }, 2132 2131 .size = EDID_LENGTH, ··· 2135 2136 static struct bin_attribute edid2_attr = { 2136 2137 .attr = { 2137 2138 .name = "edid2", 2138 - .owner = THIS_MODULE, 2139 2139 .mode = 0444, 2140 2140 }, 2141 2141 .size = EDID_LENGTH,
+1 -1
drivers/video/backlight/backlight.c
··· 172 172 173 173 #define DECLARE_ATTR(_name,_mode,_show,_store) \ 174 174 { \ 175 - .attr = { .name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ 175 + .attr = { .name = __stringify(_name), .mode = _mode }, \ 176 176 .show = _show, \ 177 177 .store = _store, \ 178 178 }
+1 -1
drivers/video/backlight/lcd.c
··· 157 157 158 158 #define DECLARE_ATTR(_name,_mode,_show,_store) \ 159 159 { \ 160 - .attr = { .name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ 160 + .attr = { .name = __stringify(_name), .mode = _mode }, \ 161 161 .show = _show, \ 162 162 .store = _store, \ 163 163 }
-1
drivers/w1/slaves/w1_ds2433.c
··· 252 252 .attr = { 253 253 .name = "eeprom", 254 254 .mode = S_IRUGO | S_IWUSR, 255 - .owner = THIS_MODULE, 256 255 }, 257 256 .size = W1_EEPROM_SIZE, 258 257 .read = w1_f23_read_bin,
-1
drivers/w1/slaves/w1_therm.c
··· 48 48 .attr = { 49 49 .name = "w1_slave", 50 50 .mode = S_IRUGO, 51 - .owner = THIS_MODULE, 52 51 }, 53 52 .size = W1_SLAVE_DATA_SIZE, 54 53 .read = w1_therm_read_bin,
-2
drivers/w1/w1.c
··· 128 128 .attr = { 129 129 .name = "id", 130 130 .mode = S_IRUGO, 131 - .owner = THIS_MODULE, 132 131 }, 133 132 .size = 8, 134 133 .read = w1_slave_read_id, ··· 166 167 .attr = { 167 168 .name = "rw", 168 169 .mode = S_IRUGO | S_IWUSR, 169 - .owner = THIS_MODULE, 170 170 }, 171 171 .size = PAGE_SIZE, 172 172 .read = w1_default_read,
-1
drivers/zorro/zorro-sysfs.c
··· 78 78 .attr = { 79 79 .name = "config", 80 80 .mode = S_IRUGO | S_IWUSR, 81 - .owner = THIS_MODULE 82 81 }, 83 82 .size = sizeof(struct ConfigDev), 84 83 .read = zorro_read_config,
-2
fs/ecryptfs/main.c
··· 840 840 goto out; 841 841 } 842 842 kobj_set_kset_s(&ecryptfs_subsys, fs_subsys); 843 - sysfs_attr_version.attr.owner = THIS_MODULE; 844 - sysfs_attr_version_str.attr.owner = THIS_MODULE; 845 843 rc = do_sysfs_registration(); 846 844 if (rc) { 847 845 printk(KERN_ERR "sysfs registration failed\n");
-1
fs/ocfs2/cluster/masklog.c
··· 74 74 #define define_mask(_name) { \ 75 75 .attr = { \ 76 76 .name = #_name, \ 77 - .owner = THIS_MODULE, \ 78 77 .mode = S_IRUGO | S_IWUSR, \ 79 78 }, \ 80 79 .mask = ML_##_name, \
-1
fs/partitions/check.c
··· 397 397 static struct attribute addpartattr = { 398 398 .name = "whole_disk", 399 399 .mode = S_IRUSR | S_IRGRP | S_IROTH, 400 - .owner = THIS_MODULE, 401 400 }; 402 401 403 402 sysfs_create_file(&p->kobj, &addpartattr);
+5 -14
fs/sysfs/bin.c
··· 175 175 if (!sysfs_get_active(attr_sd)) 176 176 return -ENODEV; 177 177 178 - /* Grab the module reference for this attribute */ 179 - error = -ENODEV; 180 - if (!try_module_get(attr->attr.owner)) 181 - goto err_sput; 182 - 183 178 error = -EACCES; 184 179 if ((file->f_mode & FMODE_WRITE) && !(attr->write || attr->mmap)) 185 - goto err_mput; 180 + goto err_out; 186 181 if ((file->f_mode & FMODE_READ) && !(attr->read || attr->mmap)) 187 - goto err_mput; 182 + goto err_out; 188 183 189 184 error = -ENOMEM; 190 185 bb = kzalloc(sizeof(*bb), GFP_KERNEL); 191 186 if (!bb) 192 - goto err_mput; 187 + goto err_out; 193 188 194 189 bb->buffer = kmalloc(PAGE_SIZE, GFP_KERNEL); 195 190 if (!bb->buffer) 196 - goto err_mput; 191 + goto err_out; 197 192 198 193 mutex_init(&bb->mutex); 199 194 file->private_data = bb; ··· 198 203 sysfs_get(attr_sd); 199 204 return 0; 200 205 201 - err_mput: 202 - module_put(attr->attr.owner); 203 - err_sput: 206 + err_out: 204 207 sysfs_put_active(attr_sd); 205 208 kfree(bb); 206 209 return error; ··· 207 214 static int release(struct inode * inode, struct file * file) 208 215 { 209 216 struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; 210 - struct bin_attribute *attr = attr_sd->s_elem.bin_attr.bin_attr; 211 217 struct bin_buffer *bb = file->private_data; 212 218 213 219 if (bb->mmapped) 214 220 sysfs_put_active_two(attr_sd); 215 221 sysfs_put(attr_sd); 216 - module_put(attr->attr.owner); 217 222 kfree(bb->buffer); 218 223 kfree(bb); 219 224 return 0;
+5 -16
fs/sysfs/file.c
··· 241 241 static int sysfs_open_file(struct inode *inode, struct file *file) 242 242 { 243 243 struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; 244 - struct attribute *attr = attr_sd->s_elem.attr.attr; 245 244 struct kobject *kobj = attr_sd->s_parent->s_elem.dir.kobj; 246 245 struct sysfs_buffer * buffer; 247 246 struct sysfs_ops * ops = NULL; ··· 249 250 /* need attr_sd for attr and ops, its parent for kobj */ 250 251 if (!sysfs_get_active_two(attr_sd)) 251 252 return -ENODEV; 252 - 253 - /* Grab the module reference for this attribute */ 254 - error = -ENODEV; 255 - if (!try_module_get(attr->owner)) 256 - goto err_sput; 257 253 258 254 /* if the kobject has no ktype, then we assume that it is a subsystem 259 255 * itself, and use ops for it. ··· 266 272 * or the subsystem have no operations. 267 273 */ 268 274 if (!ops) 269 - goto err_mput; 275 + goto err_out; 270 276 271 277 /* File needs write support. 272 278 * The inode's perms must say it's ok, ··· 274 280 */ 275 281 if (file->f_mode & FMODE_WRITE) { 276 282 if (!(inode->i_mode & S_IWUGO) || !ops->store) 277 - goto err_mput; 283 + goto err_out; 278 284 } 279 285 280 286 /* File needs read support. ··· 283 289 */ 284 290 if (file->f_mode & FMODE_READ) { 285 291 if (!(inode->i_mode & S_IRUGO) || !ops->show) 286 - goto err_mput; 292 + goto err_out; 287 293 } 288 294 289 295 /* No error? Great, allocate a buffer for the file, and store it ··· 292 298 error = -ENOMEM; 293 299 buffer = kzalloc(sizeof(struct sysfs_buffer), GFP_KERNEL); 294 300 if (!buffer) 295 - goto err_mput; 301 + goto err_out; 296 302 297 303 init_MUTEX(&buffer->sem); 298 304 buffer->needs_read_fill = 1; ··· 304 310 sysfs_get(attr_sd); 305 311 return 0; 306 312 307 - err_mput: 308 - module_put(attr->owner); 309 - err_sput: 313 + err_out: 310 314 sysfs_put_active_two(attr_sd); 311 315 return error; 312 316 } ··· 312 320 static int sysfs_release(struct inode * inode, struct file * filp) 313 321 { 314 322 struct sysfs_dirent *attr_sd = filp->f_path.dentry->d_fsdata; 315 - struct attribute *attr = attr_sd->s_elem.attr.attr; 316 323 struct sysfs_buffer *buffer = filp->private_data; 317 324 318 325 sysfs_put(attr_sd); 319 - /* After this point, attr should not be accessed. */ 320 - module_put(attr->owner); 321 326 322 327 if (buffer) { 323 328 if (buffer->page)
+1 -2
include/linux/sysdev.h
··· 101 101 102 102 #define _SYSDEV_ATTR(_name,_mode,_show,_store) \ 103 103 { \ 104 - .attr = { .name = __stringify(_name), .mode = _mode, \ 105 - .owner = THIS_MODULE }, \ 104 + .attr = { .name = __stringify(_name), .mode = _mode }, \ 106 105 .show = _show, \ 107 106 .store = _store, \ 108 107 }
+8 -4
include/linux/sysfs.h
··· 20 20 struct nameidata; 21 21 struct dentry; 22 22 23 + /* FIXME 24 + * The *owner field is no longer used, but leave around 25 + * until the tree gets cleaned up fully. 26 + */ 23 27 struct attribute { 24 28 const char * name; 25 - struct module * owner; 29 + struct module * owner; 26 30 mode_t mode; 27 31 }; 28 32 ··· 43 39 */ 44 40 45 41 #define __ATTR(_name,_mode,_show,_store) { \ 46 - .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ 42 + .attr = {.name = __stringify(_name), .mode = _mode }, \ 47 43 .show = _show, \ 48 44 .store = _store, \ 49 45 } 50 46 51 47 #define __ATTR_RO(_name) { \ 52 - .attr = { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE }, \ 53 - .show = _name##_show, \ 48 + .attr = { .name = __stringify(_name), .mode = 0444 }, \ 49 + .show = _name##_show, \ 54 50 } 55 51 56 52 #define __ATTR_NULL { .attr = { .name = NULL } }
+3 -6
kernel/module.c
··· 488 488 mod->field = NULL; \ 489 489 } \ 490 490 static struct module_attribute modinfo_##field = { \ 491 - .attr = { .name = __stringify(field), .mode = 0444, \ 492 - .owner = THIS_MODULE }, \ 491 + .attr = { .name = __stringify(field), .mode = 0444 }, \ 493 492 .show = show_modinfo_##field, \ 494 493 .setup = setup_modinfo_##field, \ 495 494 .test = modinfo_##field##_exists, \ ··· 792 793 } 793 794 794 795 static struct module_attribute refcnt = { 795 - .attr = { .name = "refcnt", .mode = 0444, .owner = THIS_MODULE }, 796 + .attr = { .name = "refcnt", .mode = 0444 }, 796 797 .show = show_refcnt, 797 798 }; 798 799 ··· 850 851 } 851 852 852 853 static struct module_attribute initstate = { 853 - .attr = { .name = "initstate", .mode = 0444, .owner = THIS_MODULE }, 854 + .attr = { .name = "initstate", .mode = 0444 }, 854 855 .show = show_initstate, 855 856 }; 856 857 ··· 1031 1032 sattr->mattr.show = module_sect_show; 1032 1033 sattr->mattr.store = NULL; 1033 1034 sattr->mattr.attr.name = sattr->name; 1034 - sattr->mattr.attr.owner = mod; 1035 1035 sattr->mattr.attr.mode = S_IRUGO; 1036 1036 *(gattr++) = &(sattr++)->mattr.attr; 1037 1037 } ··· 1088 1090 if (!attr->test || 1089 1091 (attr->test && attr->test(mod))) { 1090 1092 memcpy(temp_attr, attr, sizeof(*temp_attr)); 1091 - temp_attr->attr.owner = mod; 1092 1093 error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr); 1093 1094 ++temp_attr; 1094 1095 }
-1
kernel/params.c
··· 491 491 pattr->mattr.show = param_attr_show; 492 492 pattr->mattr.store = param_attr_store; 493 493 pattr->mattr.attr.name = (char *)&kp->name[name_skip]; 494 - pattr->mattr.attr.owner = mk->mod; 495 494 pattr->mattr.attr.mode = kp->perm; 496 495 *(gattr++) = &(pattr++)->mattr.attr; 497 496 }
+1 -2
net/bridge/br_sysfs_br.c
··· 383 383 384 384 static struct bin_attribute bridge_forward = { 385 385 .attr = { .name = SYSFS_BRIDGE_FDB, 386 - .mode = S_IRUGO, 387 - .owner = THIS_MODULE, }, 386 + .mode = S_IRUGO, }, 388 387 .read = brforward_read, 389 388 }; 390 389
+1 -2
net/bridge/br_sysfs_if.c
··· 29 29 #define BRPORT_ATTR(_name,_mode,_show,_store) \ 30 30 struct brport_attribute brport_attr_##_name = { \ 31 31 .attr = {.name = __stringify(_name), \ 32 - .mode = _mode, \ 33 - .owner = THIS_MODULE, }, \ 32 + .mode = _mode }, \ 34 33 .show = _show, \ 35 34 .store = _store, \ 36 35 };