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

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:
Driver-Core: extend devnode callbacks to provide permissions

+116 -79
+2 -2
arch/x86/kernel/cpuid.c
··· 182 182 .notifier_call = cpuid_class_cpu_callback, 183 183 }; 184 184 185 - static char *cpuid_nodename(struct device *dev) 185 + static char *cpuid_devnode(struct device *dev, mode_t *mode) 186 186 { 187 187 return kasprintf(GFP_KERNEL, "cpu/%u/cpuid", MINOR(dev->devt)); 188 188 } ··· 203 203 err = PTR_ERR(cpuid_class); 204 204 goto out_chrdev; 205 205 } 206 - cpuid_class->nodename = cpuid_nodename; 206 + cpuid_class->devnode = cpuid_devnode; 207 207 for_each_online_cpu(i) { 208 208 err = cpuid_device_create(i); 209 209 if (err != 0)
+1 -1
arch/x86/kernel/microcode_core.c
··· 236 236 static struct miscdevice microcode_dev = { 237 237 .minor = MICROCODE_MINOR, 238 238 .name = "microcode", 239 - .devnode = "cpu/microcode", 239 + .nodename = "cpu/microcode", 240 240 .fops = &microcode_fops, 241 241 }; 242 242
+2 -2
arch/x86/kernel/msr.c
··· 241 241 .notifier_call = msr_class_cpu_callback, 242 242 }; 243 243 244 - static char *msr_nodename(struct device *dev) 244 + static char *msr_devnode(struct device *dev, mode_t *mode) 245 245 { 246 246 return kasprintf(GFP_KERNEL, "cpu/%u/msr", MINOR(dev->devt)); 247 247 } ··· 262 262 err = PTR_ERR(msr_class); 263 263 goto out_chrdev; 264 264 } 265 - msr_class->nodename = msr_nodename; 265 + msr_class->devnode = msr_devnode; 266 266 for_each_online_cpu(i) { 267 267 err = msr_device_create(i); 268 268 if (err != 0)
+2 -2
block/bsg.c
··· 1062 1062 1063 1063 static struct cdev bsg_cdev; 1064 1064 1065 - static char *bsg_nodename(struct device *dev) 1065 + static char *bsg_devnode(struct device *dev, mode_t *mode) 1066 1066 { 1067 1067 return kasprintf(GFP_KERNEL, "bsg/%s", dev_name(dev)); 1068 1068 } ··· 1087 1087 ret = PTR_ERR(bsg_class); 1088 1088 goto destroy_kmemcache; 1089 1089 } 1090 - bsg_class->nodename = bsg_nodename; 1090 + bsg_class->devnode = bsg_devnode; 1091 1091 1092 1092 ret = alloc_chrdev_region(&devid, 0, BSG_MAX_DEVS, "bsg"); 1093 1093 if (ret)
+4 -4
block/genhd.c
··· 998 998 .name = "block", 999 999 }; 1000 1000 1001 - static char *block_nodename(struct device *dev) 1001 + static char *block_devnode(struct device *dev, mode_t *mode) 1002 1002 { 1003 1003 struct gendisk *disk = dev_to_disk(dev); 1004 1004 1005 - if (disk->nodename) 1006 - return disk->nodename(disk); 1005 + if (disk->devnode) 1006 + return disk->devnode(disk, mode); 1007 1007 return NULL; 1008 1008 } 1009 1009 ··· 1011 1011 .name = "disk", 1012 1012 .groups = disk_attr_groups, 1013 1013 .release = disk_release, 1014 - .nodename = block_nodename, 1014 + .devnode = block_devnode, 1015 1015 }; 1016 1016 1017 1017 #ifdef CONFIG_PROC_FS
+12 -7
drivers/base/core.c
··· 166 166 if (MAJOR(dev->devt)) { 167 167 const char *tmp; 168 168 const char *name; 169 + mode_t mode = 0; 169 170 170 171 add_uevent_var(env, "MAJOR=%u", MAJOR(dev->devt)); 171 172 add_uevent_var(env, "MINOR=%u", MINOR(dev->devt)); 172 - name = device_get_nodename(dev, &tmp); 173 + name = device_get_devnode(dev, &mode, &tmp); 173 174 if (name) { 174 175 add_uevent_var(env, "DEVNAME=%s", name); 175 176 kfree(tmp); 177 + if (mode) 178 + add_uevent_var(env, "DEVMODE=%#o", mode & 0777); 176 179 } 177 180 } 178 181 ··· 1151 1148 } 1152 1149 1153 1150 /** 1154 - * device_get_nodename - path of device node file 1151 + * device_get_devnode - path of device node file 1155 1152 * @dev: device 1153 + * @mode: returned file access mode 1156 1154 * @tmp: possibly allocated string 1157 1155 * 1158 1156 * Return the relative path of a possible device node. ··· 1161 1157 * a name. This memory is returned in tmp and needs to be 1162 1158 * freed by the caller. 1163 1159 */ 1164 - const char *device_get_nodename(struct device *dev, const char **tmp) 1160 + const char *device_get_devnode(struct device *dev, 1161 + mode_t *mode, const char **tmp) 1165 1162 { 1166 1163 char *s; 1167 1164 1168 1165 *tmp = NULL; 1169 1166 1170 1167 /* the device type may provide a specific name */ 1171 - if (dev->type && dev->type->nodename) 1172 - *tmp = dev->type->nodename(dev); 1168 + if (dev->type && dev->type->devnode) 1169 + *tmp = dev->type->devnode(dev, mode); 1173 1170 if (*tmp) 1174 1171 return *tmp; 1175 1172 1176 1173 /* the class may provide a specific name */ 1177 - if (dev->class && dev->class->nodename) 1178 - *tmp = dev->class->nodename(dev); 1174 + if (dev->class && dev->class->devnode) 1175 + *tmp = dev->class->devnode(dev, mode); 1179 1176 if (*tmp) 1180 1177 return *tmp; 1181 1178
+16 -8
drivers/base/devtmpfs.c
··· 6 6 * During bootup, before any driver core device is registered, 7 7 * devtmpfs, a tmpfs-based filesystem is created. Every driver-core 8 8 * device which requests a device node, will add a node in this 9 - * filesystem. The node is named after the the name of the device, 10 - * or the susbsytem can provide a custom name. All devices are 11 - * owned by root and have a mode of 0600. 9 + * filesystem. 10 + * By default, all devices are named after the the name of the 11 + * device, owned by root and have a default mode of 0600. Subsystems 12 + * can overwrite the default setting if needed. 12 13 */ 13 14 14 15 #include <linux/kernel.h> ··· 21 20 #include <linux/fs.h> 22 21 #include <linux/shmem_fs.h> 23 22 #include <linux/cred.h> 23 + #include <linux/sched.h> 24 24 #include <linux/init_task.h> 25 25 26 26 static struct vfsmount *dev_mnt; ··· 136 134 const char *tmp = NULL; 137 135 const char *nodename; 138 136 const struct cred *curr_cred; 139 - mode_t mode; 137 + mode_t mode = 0; 140 138 struct nameidata nd; 141 139 struct dentry *dentry; 142 140 int err; ··· 144 142 if (!dev_mnt) 145 143 return 0; 146 144 147 - nodename = device_get_nodename(dev, &tmp); 145 + nodename = device_get_devnode(dev, &mode, &tmp); 148 146 if (!nodename) 149 147 return -ENOMEM; 150 148 149 + if (mode == 0) 150 + mode = 0600; 151 151 if (is_blockdev(dev)) 152 - mode = S_IFBLK|0600; 152 + mode |= S_IFBLK; 153 153 else 154 - mode = S_IFCHR|0600; 154 + mode |= S_IFCHR; 155 155 156 156 curr_cred = override_creds(&init_cred); 157 157 err = vfs_path_lookup(dev_mnt->mnt_root, dev_mnt, ··· 169 165 170 166 dentry = lookup_create(&nd, 0); 171 167 if (!IS_ERR(dentry)) { 168 + int umask; 169 + 170 + umask = sys_umask(0000); 172 171 err = vfs_mknod(nd.path.dentry->d_inode, 173 172 dentry, mode, dev->devt); 173 + sys_umask(umask); 174 174 /* mark as kernel created inode */ 175 175 if (!err) 176 176 dentry->d_inode->i_private = &dev_mnt; ··· 279 271 if (!dev_mnt) 280 272 return 0; 281 273 282 - nodename = device_get_nodename(dev, &tmp); 274 + nodename = device_get_devnode(dev, NULL, &tmp); 283 275 if (!nodename) 284 276 return -ENOMEM; 285 277
+2 -2
drivers/block/aoe/aoechr.c
··· 266 266 .owner = THIS_MODULE, 267 267 }; 268 268 269 - static char *aoe_nodename(struct device *dev) 269 + static char *aoe_devnode(struct device *dev, mode_t *mode) 270 270 { 271 271 return kasprintf(GFP_KERNEL, "etherd/%s", dev_name(dev)); 272 272 } ··· 288 288 unregister_chrdev(AOE_MAJOR, "aoechr"); 289 289 return PTR_ERR(aoe_class); 290 290 } 291 - aoe_class->nodename = aoe_nodename; 291 + aoe_class->devnode = aoe_devnode; 292 292 293 293 for (i = 0; i < ARRAY_SIZE(chardevs); ++i) 294 294 device_create(aoe_class, NULL,
+3 -3
drivers/block/pktcdvd.c
··· 2857 2857 .media_changed = pkt_media_changed, 2858 2858 }; 2859 2859 2860 - static char *pktcdvd_nodename(struct gendisk *gd) 2860 + static char *pktcdvd_devnode(struct gendisk *gd, mode_t *mode) 2861 2861 { 2862 2862 return kasprintf(GFP_KERNEL, "pktcdvd/%s", gd->disk_name); 2863 2863 } ··· 2914 2914 disk->fops = &pktcdvd_ops; 2915 2915 disk->flags = GENHD_FL_REMOVABLE; 2916 2916 strcpy(disk->disk_name, pd->name); 2917 - disk->nodename = pktcdvd_nodename; 2917 + disk->devnode = pktcdvd_devnode; 2918 2918 disk->private_data = pd; 2919 2919 disk->queue = blk_alloc_queue(GFP_KERNEL); 2920 2920 if (!disk->queue) ··· 3070 3070 static struct miscdevice pkt_misc = { 3071 3071 .minor = MISC_DYNAMIC_MINOR, 3072 3072 .name = DRIVER_NAME, 3073 - .name = "pktcdvd/control", 3073 + .nodename = "pktcdvd/control", 3074 3074 .fops = &pkt_ctl_fops 3075 3075 }; 3076 3076
+1 -1
drivers/char/hw_random/core.c
··· 153 153 static struct miscdevice rng_miscdev = { 154 154 .minor = RNG_MISCDEV_MINOR, 155 155 .name = RNG_MODULE_NAME, 156 - .devnode = "hwrng", 156 + .nodename = "hwrng", 157 157 .fops = &rng_chrdev_ops, 158 158 }; 159 159
+19 -10
drivers/char/mem.c
··· 866 866 867 867 static const struct memdev { 868 868 const char *name; 869 + mode_t mode; 869 870 const struct file_operations *fops; 870 871 struct backing_dev_info *dev_info; 871 872 } devlist[] = { 872 - [ 1] = { "mem", &mem_fops, &directly_mappable_cdev_bdi }, 873 + [1] = { "mem", 0, &mem_fops, &directly_mappable_cdev_bdi }, 873 874 #ifdef CONFIG_DEVKMEM 874 - [ 2] = { "kmem", &kmem_fops, &directly_mappable_cdev_bdi }, 875 + [2] = { "kmem", 0, &kmem_fops, &directly_mappable_cdev_bdi }, 875 876 #endif 876 - [ 3] = {"null", &null_fops, NULL }, 877 + [3] = { "null", 0666, &null_fops, NULL }, 877 878 #ifdef CONFIG_DEVPORT 878 - [ 4] = { "port", &port_fops, NULL }, 879 + [4] = { "port", 0, &port_fops, NULL }, 879 880 #endif 880 - [ 5] = { "zero", &zero_fops, &zero_bdi }, 881 - [ 7] = { "full", &full_fops, NULL }, 882 - [ 8] = { "random", &random_fops, NULL }, 883 - [ 9] = { "urandom", &urandom_fops, NULL }, 884 - [11] = { "kmsg", &kmsg_fops, NULL }, 881 + [5] = { "zero", 0666, &zero_fops, &zero_bdi }, 882 + [7] = { "full", 0666, &full_fops, NULL }, 883 + [8] = { "random", 0666, &random_fops, NULL }, 884 + [9] = { "urandom", 0666, &urandom_fops, NULL }, 885 + [11] = { "kmsg", 0, &kmsg_fops, NULL }, 885 886 #ifdef CONFIG_CRASH_DUMP 886 - [12] = { "oldmem", &oldmem_fops, NULL }, 887 + [12] = { "oldmem", 0, &oldmem_fops, NULL }, 887 888 #endif 888 889 }; 889 890 ··· 921 920 .open = memory_open, 922 921 }; 923 922 923 + static char *mem_devnode(struct device *dev, mode_t *mode) 924 + { 925 + if (mode && devlist[MINOR(dev->devt)].mode) 926 + *mode = devlist[MINOR(dev->devt)].mode; 927 + return NULL; 928 + } 929 + 924 930 static struct class *mem_class; 925 931 926 932 static int __init chr_dev_init(void) ··· 943 935 printk("unable to get major %d for memory devs\n", MEM_MAJOR); 944 936 945 937 mem_class = class_create(THIS_MODULE, "mem"); 938 + mem_class->devnode = mem_devnode; 946 939 for (minor = 1; minor < ARRAY_SIZE(devlist); minor++) { 947 940 if (!devlist[minor].name) 948 941 continue;
+6 -4
drivers/char/misc.c
··· 263 263 EXPORT_SYMBOL(misc_register); 264 264 EXPORT_SYMBOL(misc_deregister); 265 265 266 - static char *misc_nodename(struct device *dev) 266 + static char *misc_devnode(struct device *dev, mode_t *mode) 267 267 { 268 268 struct miscdevice *c = dev_get_drvdata(dev); 269 269 270 - if (c->devnode) 271 - return kstrdup(c->devnode, GFP_KERNEL); 270 + if (mode && c->mode) 271 + *mode = c->mode; 272 + if (c->nodename) 273 + return kstrdup(c->nodename, GFP_KERNEL); 272 274 return NULL; 273 275 } 274 276 ··· 289 287 err = -EIO; 290 288 if (register_chrdev(MISC_MAJOR,"misc",&misc_fops)) 291 289 goto fail_printk; 292 - misc_class->nodename = misc_nodename; 290 + misc_class->devnode = misc_devnode; 293 291 return 0; 294 292 295 293 fail_printk:
+2 -2
drivers/char/raw.c
··· 261 261 262 262 static struct cdev raw_cdev; 263 263 264 - static char *raw_nodename(struct device *dev) 264 + static char *raw_devnode(struct device *dev, mode_t *mode) 265 265 { 266 266 return kasprintf(GFP_KERNEL, "raw/%s", dev_name(dev)); 267 267 } ··· 289 289 ret = PTR_ERR(raw_class); 290 290 goto error_region; 291 291 } 292 - raw_class->nodename = raw_nodename; 292 + raw_class->devnode = raw_devnode; 293 293 device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl"); 294 294 295 295 return 0;
+11
drivers/char/tty_io.c
··· 3070 3070 } 3071 3071 } 3072 3072 3073 + static char *tty_devnode(struct device *dev, mode_t *mode) 3074 + { 3075 + if (!mode) 3076 + return NULL; 3077 + if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) || 3078 + dev->devt == MKDEV(TTYAUX_MAJOR, 2)) 3079 + *mode = 0666; 3080 + return NULL; 3081 + } 3082 + 3073 3083 static int __init tty_class_init(void) 3074 3084 { 3075 3085 tty_class = class_create(THIS_MODULE, "tty"); 3076 3086 if (IS_ERR(tty_class)) 3077 3087 return PTR_ERR(tty_class); 3088 + tty_class->devnode = tty_devnode; 3078 3089 return 0; 3079 3090 } 3080 3091
+2 -2
drivers/gpu/drm/drm_sysfs.c
··· 76 76 CORE_MINOR, CORE_PATCHLEVEL, CORE_DATE); 77 77 } 78 78 79 - static char *drm_nodename(struct device *dev) 79 + static char *drm_devnode(struct device *dev, mode_t *mode) 80 80 { 81 81 return kasprintf(GFP_KERNEL, "dri/%s", dev_name(dev)); 82 82 } ··· 112 112 if (err) 113 113 goto err_out_class; 114 114 115 - class->nodename = drm_nodename; 115 + class->devnode = drm_devnode; 116 116 117 117 return class; 118 118
+2 -2
drivers/hid/usbhid/hiddev.c
··· 852 852 #endif 853 853 }; 854 854 855 - static char *hiddev_nodename(struct device *dev) 855 + static char *hiddev_devnode(struct device *dev, mode_t *mode) 856 856 { 857 857 return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); 858 858 } 859 859 860 860 static struct usb_class_driver hiddev_class = { 861 861 .name = "hiddev%d", 862 - .nodename = hiddev_nodename, 862 + .devnode = hiddev_devnode, 863 863 .fops = &hiddev_fops, 864 864 .minor_base = HIDDEV_MINOR_BASE, 865 865 };
+2 -2
drivers/input/input.c
··· 1265 1265 .uevent = input_dev_uevent, 1266 1266 }; 1267 1267 1268 - static char *input_nodename(struct device *dev) 1268 + static char *input_devnode(struct device *dev, mode_t *mode) 1269 1269 { 1270 1270 return kasprintf(GFP_KERNEL, "input/%s", dev_name(dev)); 1271 1271 } 1272 1272 1273 1273 struct class input_class = { 1274 1274 .name = "input", 1275 - .nodename = input_nodename, 1275 + .devnode = input_devnode, 1276 1276 }; 1277 1277 EXPORT_SYMBOL_GPL(input_class); 1278 1278
+1 -1
drivers/md/dm-ioctl.c
··· 1532 1532 static struct miscdevice _dm_misc = { 1533 1533 .minor = MISC_DYNAMIC_MINOR, 1534 1534 .name = DM_NAME, 1535 - .devnode = "mapper/control", 1535 + .nodename = "mapper/control", 1536 1536 .fops = &_ctl_fops 1537 1537 }; 1538 1538
+2 -2
drivers/media/dvb/dvb-core/dvbdev.c
··· 447 447 return 0; 448 448 } 449 449 450 - static char *dvb_nodename(struct device *dev) 450 + static char *dvb_devnode(struct device *dev, mode_t *mode) 451 451 { 452 452 struct dvb_device *dvbdev = dev_get_drvdata(dev); 453 453 ··· 478 478 goto error; 479 479 } 480 480 dvb_class->dev_uevent = dvb_uevent; 481 - dvb_class->nodename = dvb_nodename; 481 + dvb_class->devnode = dvb_devnode; 482 482 return 0; 483 483 484 484 error:
+1 -1
drivers/net/tun.c
··· 1370 1370 static struct miscdevice tun_miscdev = { 1371 1371 .minor = TUN_MINOR, 1372 1372 .name = "tun", 1373 - .devnode = "net/tun", 1373 + .nodename = "net/tun", 1374 1374 .fops = &tun_fops, 1375 1375 }; 1376 1376
+2 -2
drivers/usb/class/usblp.c
··· 1057 1057 .release = usblp_release, 1058 1058 }; 1059 1059 1060 - static char *usblp_nodename(struct device *dev) 1060 + static char *usblp_devnode(struct device *dev, mode_t *mode) 1061 1061 { 1062 1062 return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); 1063 1063 } 1064 1064 1065 1065 static struct usb_class_driver usblp_class = { 1066 1066 .name = "lp%d", 1067 - .nodename = usblp_nodename, 1067 + .devnode = usblp_devnode, 1068 1068 .fops = &usblp_fops, 1069 1069 .minor_base = USBLP_MINOR_BASE, 1070 1070 };
+4 -4
drivers/usb/core/file.c
··· 67 67 struct class *class; 68 68 } *usb_class; 69 69 70 - static char *usb_nodename(struct device *dev) 70 + static char *usb_devnode(struct device *dev, mode_t *mode) 71 71 { 72 72 struct usb_class_driver *drv; 73 73 74 74 drv = dev_get_drvdata(dev); 75 - if (!drv || !drv->nodename) 75 + if (!drv || !drv->devnode) 76 76 return NULL; 77 - return drv->nodename(dev); 77 + return drv->devnode(dev, mode); 78 78 } 79 79 80 80 static int init_usb_class(void) ··· 100 100 kfree(usb_class); 101 101 usb_class = NULL; 102 102 } 103 - usb_class->class->nodename = usb_nodename; 103 + usb_class->class->devnode = usb_devnode; 104 104 105 105 exit: 106 106 return result;
+2 -2
drivers/usb/core/usb.c
··· 311 311 #endif /* CONFIG_PM */ 312 312 313 313 314 - static char *usb_nodename(struct device *dev) 314 + static char *usb_devnode(struct device *dev, mode_t *mode) 315 315 { 316 316 struct usb_device *usb_dev; 317 317 ··· 324 324 .name = "usb_device", 325 325 .release = usb_release_dev, 326 326 .uevent = usb_dev_uevent, 327 - .nodename = usb_nodename, 327 + .devnode = usb_devnode, 328 328 .pm = &usb_device_pm_ops, 329 329 }; 330 330
+2 -2
drivers/usb/misc/iowarrior.c
··· 727 727 .poll = iowarrior_poll, 728 728 }; 729 729 730 - static char *iowarrior_nodename(struct device *dev) 730 + static char *iowarrior_devnode(struct device *dev, mode_t *mode) 731 731 { 732 732 return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); 733 733 } ··· 738 738 */ 739 739 static struct usb_class_driver iowarrior_class = { 740 740 .name = "iowarrior%d", 741 - .nodename = iowarrior_nodename, 741 + .devnode = iowarrior_devnode, 742 742 .fops = &iowarrior_fops, 743 743 .minor_base = IOWARRIOR_MINOR_BASE, 744 744 };
+2 -2
drivers/usb/misc/legousbtower.c
··· 266 266 .llseek = tower_llseek, 267 267 }; 268 268 269 - static char *legousbtower_nodename(struct device *dev) 269 + static char *legousbtower_devnode(struct device *dev, mode_t *mode) 270 270 { 271 271 return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev)); 272 272 } ··· 277 277 */ 278 278 static struct usb_class_driver tower_class = { 279 279 .name = "legousbtower%d", 280 - .nodename = legousbtower_nodename, 280 + .devnode = legousbtower_devnode, 281 281 .fops = &tower_fops, 282 282 .minor_base = LEGO_USB_TOWER_MINOR_BASE, 283 283 };
+4 -3
include/linux/device.h
··· 193 193 struct kobject *dev_kobj; 194 194 195 195 int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); 196 - char *(*nodename)(struct device *dev); 196 + char *(*devnode)(struct device *dev, mode_t *mode); 197 197 198 198 void (*class_release)(struct class *class); 199 199 void (*dev_release)(struct device *dev); ··· 298 298 const char *name; 299 299 const struct attribute_group **groups; 300 300 int (*uevent)(struct device *dev, struct kobj_uevent_env *env); 301 - char *(*nodename)(struct device *dev); 301 + char *(*devnode)(struct device *dev, mode_t *mode); 302 302 void (*release)(struct device *dev); 303 303 304 304 const struct dev_pm_ops *pm; ··· 487 487 extern int device_rename(struct device *dev, char *new_name); 488 488 extern int device_move(struct device *dev, struct device *new_parent, 489 489 enum dpm_order dpm_order); 490 - extern const char *device_get_nodename(struct device *dev, const char **tmp); 490 + extern const char *device_get_devnode(struct device *dev, 491 + mode_t *mode, const char **tmp); 491 492 extern void *dev_get_drvdata(const struct device *dev); 492 493 extern void dev_set_drvdata(struct device *dev, void *data); 493 494
+1 -1
include/linux/genhd.h
··· 142 142 * disks that can't be partitioned. */ 143 143 144 144 char disk_name[DISK_NAME_LEN]; /* name of major driver */ 145 - char *(*nodename)(struct gendisk *gd); 145 + char *(*devnode)(struct gendisk *gd, mode_t *mode); 146 146 /* Array of pointers to partitions indexed by partno. 147 147 * Protected with matching bdev lock but stat and other 148 148 * non-critical accesses use RCU. Always access through
+2 -1
include/linux/miscdevice.h
··· 41 41 struct list_head list; 42 42 struct device *parent; 43 43 struct device *this_device; 44 - const char *devnode; 44 + const char *nodename; 45 + mode_t mode; 45 46 }; 46 47 47 48 extern int misc_register(struct miscdevice * misc);
+2 -2
include/linux/usb.h
··· 922 922 /** 923 923 * struct usb_class_driver - identifies a USB driver that wants to use the USB major number 924 924 * @name: the usb class device name for this driver. Will show up in sysfs. 925 - * @nodename: Callback to provide a naming hint for a possible 925 + * @devnode: Callback to provide a naming hint for a possible 926 926 * device node to create. 927 927 * @fops: pointer to the struct file_operations of this driver. 928 928 * @minor_base: the start of the minor range for this driver. ··· 933 933 */ 934 934 struct usb_class_driver { 935 935 char *name; 936 - char *(*nodename)(struct device *dev); 936 + char *(*devnode)(struct device *dev, mode_t *mode); 937 937 const struct file_operations *fops; 938 938 int minor_base; 939 939 };
+2 -2
sound/sound_core.c
··· 29 29 MODULE_AUTHOR("Alan Cox"); 30 30 MODULE_LICENSE("GPL"); 31 31 32 - static char *sound_nodename(struct device *dev) 32 + static char *sound_devnode(struct device *dev, mode_t *mode) 33 33 { 34 34 if (MAJOR(dev->devt) == SOUND_MAJOR) 35 35 return NULL; ··· 50 50 return PTR_ERR(sound_class); 51 51 } 52 52 53 - sound_class->nodename = sound_nodename; 53 + sound_class->devnode = sound_devnode; 54 54 55 55 return 0; 56 56 }