revert last commit - flash map driver not updated yet
[openwrt/staging/mkresin.git] / target / linux / generic-2.6 / patches / 000-reenable_devfs.patch
1 diff -ur linux-2.6.15-rc5/drivers/mtd/mtd_blkdevs.c linux-2.6.15-rc5-openwrt/drivers/mtd/mtd_blkdevs.c
2 --- linux-2.6.15-rc5/drivers/mtd/mtd_blkdevs.c 2005-12-04 06:10:42.000000000 +0100
3 +++ linux-2.6.15-rc5-openwrt/drivers/mtd/mtd_blkdevs.c 2005-12-15 07:53:20.000000000 +0100
4 @@ -21,6 +21,9 @@
5 #include <linux/init.h>
6 #include <asm/semaphore.h>
7 #include <asm/uaccess.h>
8 +#ifdef CONFIG_DEVFS_FS
9 +#include <linux/devfs_fs_kernel.h>
10 +#endif
11
12 static LIST_HEAD(blktrans_majors);
13
14 @@ -302,6 +305,11 @@
15 snprintf(gd->disk_name, sizeof(gd->disk_name),
16 "%s%d", tr->name, new->devnum);
17
18 +#ifdef CONFIG_DEVFS_FS
19 + snprintf(gd->devfs_name, sizeof(gd->devfs_name),
20 + "%s/%c", tr->name, (tr->part_bits?'a':'0') + new->devnum);
21 +#endif
22 +
23 /* 2.5 has capacity in units of 512 bytes while still
24 having BLOCK_SIZE_BITS set to 10. Just to keep us amused. */
25 set_capacity(gd, (new->size * new->blksize) >> 9);
26 @@ -418,6 +426,10 @@
27 return ret;
28 }
29
30 +#ifdef CONFIG_DEVFS_FS
31 + devfs_mk_dir(tr->name);
32 +#endif
33 +
34 INIT_LIST_HEAD(&tr->devs);
35 list_add(&tr->list, &blktrans_majors);
36
37 @@ -450,6 +462,10 @@
38 tr->remove_dev(dev);
39 }
40
41 +#ifdef CONFIG_DEVFS_FS
42 + devfs_remove(tr->name);
43 +#endif
44 +
45 blk_cleanup_queue(tr->blkcore_priv->rq);
46 unregister_blkdev(tr->major, tr->name);
47
48 diff -ur linux-2.6.15-rc5/drivers/mtd/mtdchar.c linux-2.6.15-rc5-openwrt/drivers/mtd/mtdchar.c
49 --- linux-2.6.15-rc5/drivers/mtd/mtdchar.c 2005-12-04 06:10:42.000000000 +0100
50 +++ linux-2.6.15-rc5-openwrt/drivers/mtd/mtdchar.c 2005-12-15 07:49:15.000000000 +0100
51 @@ -19,19 +18,33 @@
52
53 #include <asm/uaccess.h>
54
55 +#ifdef CONFIG_DEVFS_FS
56 +#include <linux/devfs_fs_kernel.h>
57 +#else
58 +#include <linux/device.h>
59 +
60 static struct class *mtd_class;
61 +#endif
62
63 static void mtd_notify_add(struct mtd_info* mtd)
64 {
65 if (!mtd)
66 return;
67
68 +#ifdef CONFIG_DEVFS_FS
69 + devfs_mk_cdev(MKDEV(MTD_CHAR_MAJOR, mtd->index*2),
70 + S_IFCHR | S_IRUGO | S_IWUGO, "mtd/%d", mtd->index);
71 +
72 + devfs_mk_cdev(MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1),
73 + S_IFCHR | S_IRUGO, "mtd/%dro", mtd->index);
74 +#else
75 class_device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2),
76 NULL, "mtd%d", mtd->index);
77
78 class_device_create(mtd_class, NULL,
79 MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1),
80 NULL, "mtd%dro", mtd->index);
81 +#endif
82 }
83
84 static void mtd_notify_remove(struct mtd_info* mtd)
85 @@ -39,8 +52,13 @@
86 if (!mtd)
87 return;
88
89 +#ifdef CONFIG_DEVFS_FS
90 + devfs_remove("mtd/%d", mtd->index);
91 + devfs_remove("mtd/%dro", mtd->index);
92 +#else
93 class_device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2));
94 class_device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1));
95 +#endif
96 }
97
98 static struct mtd_notifier notifier = {
99 @@ -48,6 +66,22 @@
100 .remove = mtd_notify_remove,
101 };
102
103 +#ifdef CONFIG_DEVFS_FS
104 + static inline void mtdchar_devfs_init(void)
105 + {
106 + devfs_mk_dir("mtd");
107 + register_mtd_user(&notifier);
108 + }
109 + static inline void mtdchar_devfs_exit(void)
110 + {
111 + unregister_mtd_user(&notifier);
112 + devfs_remove("mtd");
113 + }
114 + #else /* !DEVFS */
115 + #define mtdchar_devfs_init() do { } while(0)
116 + #define mtdchar_devfs_exit() do { } while(0)
117 +#endif
118 +
119 /*
120 * We use file->private_data to store a pointer to the MTDdevice.
121 * Since alighment is at least 32 bits, we have 2 bits free for OTP
122 @@ -643,6 +677,9 @@
123 return -EAGAIN;
124 }
125
126 +#ifdef CONFIG_DEVFS_FS
127 + mtdchar_devfs_init();
128 +#else
129 mtd_class = class_create(THIS_MODULE, "mtd");
130
131 if (IS_ERR(mtd_class)) {
132 @@ -652,13 +689,19 @@
133 }
134
135 register_mtd_user(&notifier);
136 +#endif
137 return 0;
138 }
139
140 static void __exit cleanup_mtdchar(void)
141 {
142 +
143 +#ifdef CONFIG_DEVFS_FS
144 + mtdchar_devfs_exit();
145 +#else
146 unregister_mtd_user(&notifier);
147 class_destroy(mtd_class);
148 +#endif
149 unregister_chrdev(MTD_CHAR_MAJOR, "mtd");
150 }
151
152 diff -ur linux-2.6.15-rc5/fs/Kconfig linux-2.6.15-rc5-openwrt/fs/Kconfig
153 --- linux-2.6.15-rc5/fs/Kconfig 2005-12-04 06:10:42.000000000 +0100
154 +++ linux-2.6.15-rc5-openwrt/fs/Kconfig 2005-12-15 07:44:01.000000000 +0100
155 @@ -772,6 +772,56 @@
156 help
157 Exports the dump image of crashed kernel in ELF format.
158
159 +config DEVFS_FS
160 + bool "/dev file system support (OBSOLETE)"
161 + depends on EXPERIMENTAL
162 + help
163 + This is support for devfs, a virtual file system (like /proc) which
164 + provides the file system interface to device drivers, normally found
165 + in /dev. Devfs does not depend on major and minor number
166 + allocations. Device drivers register entries in /dev which then
167 + appear automatically, which means that the system administrator does
168 + not have to create character and block special device files in the
169 + /dev directory using the mknod command (or MAKEDEV script) anymore.
170 +
171 + This is work in progress. If you want to use this, you *must* read
172 + the material in <file:Documentation/filesystems/devfs/>, especially
173 + the file README there.
174 +
175 + Note that devfs no longer manages /dev/pts! If you are using UNIX98
176 + ptys, you will also need to mount the /dev/pts filesystem (devpts).
177 +
178 + Note that devfs has been obsoleted by udev,
179 + <http://www.kernel.org/pub/linux/utils/kernel/hotplug/>.
180 + It has been stripped down to a bare minimum and is only provided for
181 + legacy installations that use its naming scheme which is
182 + unfortunately different from the names normal Linux installations
183 + use.
184 +
185 + If unsure, say N.
186 +
187 +config DEVFS_MOUNT
188 + bool "Automatically mount at boot"
189 + depends on DEVFS_FS
190 + help
191 + This option appears if you have CONFIG_DEVFS_FS enabled. Setting
192 + this to 'Y' will make the kernel automatically mount devfs onto /dev
193 + when the system is booted, before the init thread is started.
194 + You can override this with the "devfs=nomount" boot option.
195 +
196 + If unsure, say N.
197 +
198 +config DEVFS_DEBUG
199 + bool "Debug devfs"
200 + depends on DEVFS_FS
201 + help
202 + If you say Y here, then the /dev file system code will generate
203 + debugging messages. See the file
204 + <file:Documentation/filesystems/devfs/boot-options> for more
205 + details.
206 +
207 + If unsure, say N.
208 +
209 config SYSFS
210 bool "sysfs file system support" if EMBEDDED
211 default y
212 diff -ur linux-2.6.17/drivers/ieee1394/dv1394.c linux-2.6.17-devfs/drivers/ieee1394/dv1394.c
213 --- linux-2.6.17/drivers/ieee1394/dv1394.c 2006-06-17 18:49:35.000000000 -0700
214 +++ linux-2.6.17-devfs/drivers/ieee1394/dv1394.c 2006-08-25 11:06:18.000000000 -0700
215 @@ -73,7 +73,7 @@
216 - fix all XXX showstoppers
217 - disable IR/IT DMA interrupts on shutdown
218 - flush pci writes to the card by issuing a read
219 - - character device dispatching
220 + - devfs and character device dispatching (* needs testing with Linux 2.2.x)
221 - switch over to the new kernel DMA API (pci_map_*()) (* needs testing on platforms with IOMMU!)
222 - keep all video_cards in a list (for open() via chardev), set file->private_data = video
223 - dv1394_poll should indicate POLLIN when receiving buffers are available
224 @@ -1096,6 +1096,7 @@
225
226 init.api_version = DV1394_API_VERSION;
227 init.n_frames = DV1394_MAX_FRAMES / 4;
228 + /* the following are now set via devfs */
229 init.channel = video->channel;
230 init.format = video->pal_or_ntsc;
231 init.cip_n = video->cip_n;
232 @@ -1790,6 +1791,8 @@
233 {
234 struct video_card *video = NULL;
235
236 + /* if the device was opened through devfs, then file->private_data
237 + has already been set to video by devfs */
238 if (file->private_data) {
239 video = (struct video_card*) file->private_data;
240
241 @@ -2208,7 +2211,7 @@
242 video = kzalloc(sizeof(*video), GFP_KERNEL);
243 if (!video) {
244 printk(KERN_ERR "dv1394: cannot allocate video_card\n");
245 - return -1;
246 + goto err;
247 }
248
249 video->ohci = ohci;
250 @@ -2263,14 +2266,37 @@
251 list_add_tail(&video->list, &dv1394_cards);
252 spin_unlock_irqrestore(&dv1394_cards_lock, flags);
253
254 + if (devfs_mk_cdev(MKDEV(IEEE1394_MAJOR,
255 + IEEE1394_MINOR_BLOCK_DV1394*16 + video->id),
256 + S_IFCHR|S_IRUGO|S_IWUGO,
257 + "ieee1394/dv/host%d/%s/%s",
258 + (video->id>>2),
259 + (video->pal_or_ntsc == DV1394_NTSC ? "NTSC" : "PAL"),
260 + (video->mode == MODE_RECEIVE ? "in" : "out")) < 0)
261 + goto err_free;
262 +
263 debug_printk("dv1394: dv1394_init() OK on ID %d\n", video->id);
264 +
265 return 0;
266 +
267 + err_free:
268 + kfree(video);
269 + err:
270 + return -1;
271 }
272
273 static void dv1394_un_init(struct video_card *video)
274 {
275 + char buf[32];
276 +
277 /* obviously nobody has the driver open at this point */
278 do_dv1394_shutdown(video, 1);
279 + snprintf(buf, sizeof(buf), "dv/host%d/%s/%s", (video->id >> 2),
280 + (video->pal_or_ntsc == DV1394_NTSC ? "NTSC" : "PAL"),
281 + (video->mode == MODE_RECEIVE ? "in" : "out")
282 + );
283 +
284 + devfs_remove("ieee1394/%s", buf);
285 kfree(video);
286 }
287
288 @@ -2307,6 +2333,9 @@
289
290 class_device_destroy(hpsb_protocol_class,
291 MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16 + (id<<2)));
292 + devfs_remove("ieee1394/dv/host%d/NTSC", id);
293 + devfs_remove("ieee1394/dv/host%d/PAL", id);
294 + devfs_remove("ieee1394/dv/host%d", id);
295 }
296
297 static void dv1394_add_host (struct hpsb_host *host)
298 @@ -2323,6 +2352,9 @@
299 class_device_create(hpsb_protocol_class, NULL, MKDEV(
300 IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16 + (id<<2)),
301 NULL, "dv1394-%d", id);
302 + devfs_mk_dir("ieee1394/dv/host%d", id);
303 + devfs_mk_dir("ieee1394/dv/host%d/NTSC", id);
304 + devfs_mk_dir("ieee1394/dv/host%d/PAL", id);
305
306 dv1394_init(ohci, DV1394_NTSC, MODE_RECEIVE);
307 dv1394_init(ohci, DV1394_NTSC, MODE_TRANSMIT);
308 @@ -2579,8 +2611,10 @@
309 static void __exit dv1394_exit_module(void)
310 {
311 hpsb_unregister_protocol(&dv1394_driver);
312 +
313 hpsb_unregister_highlevel(&dv1394_highlevel);
314 cdev_del(&dv1394_cdev);
315 + devfs_remove("ieee1394/dv");
316 }
317
318 static int __init dv1394_init_module(void)
319 @@ -2596,12 +2630,15 @@
320 return ret;
321 }
322
323 + devfs_mk_dir("ieee1394/dv");
324 +
325 hpsb_register_highlevel(&dv1394_highlevel);
326
327 ret = hpsb_register_protocol(&dv1394_driver);
328 if (ret) {
329 printk(KERN_ERR "dv1394: failed to register protocol\n");
330 hpsb_unregister_highlevel(&dv1394_highlevel);
331 + devfs_remove("ieee1394/dv");
332 cdev_del(&dv1394_cdev);
333 return ret;
334 }
335 diff -ur linux-2.6.17/drivers/ieee1394/ieee1394_core.c linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.c
336 --- linux-2.6.17/drivers/ieee1394/ieee1394_core.c 2006-06-17 18:49:35.000000000 -0700
337 +++ linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.c 2006-08-25 11:06:18.000000000 -0700
338 @@ -1078,10 +1078,17 @@
339 goto exit_release_kernel_thread;
340 }
341
342 + /* actually this is a non-fatal error */
343 + ret = devfs_mk_dir("ieee1394");
344 + if (ret < 0) {
345 + HPSB_ERR("unable to make devfs dir for device major %d!\n", IEEE1394_MAJOR);
346 + goto release_chrdev;
347 + }
348 +
349 ret = bus_register(&ieee1394_bus_type);
350 if (ret < 0) {
351 HPSB_INFO("bus register failed");
352 - goto release_chrdev;
353 + goto release_devfs;
354 }
355
356 for (i = 0; fw_bus_attrs[i]; i++) {
357 @@ -1092,7 +1099,7 @@
358 fw_bus_attrs[i--]);
359 }
360 bus_unregister(&ieee1394_bus_type);
361 - goto release_chrdev;
362 + goto release_devfs;
363 }
364 }
365
366 @@ -1145,6 +1152,8 @@
367 for (i = 0; fw_bus_attrs[i]; i++)
368 bus_remove_file(&ieee1394_bus_type, fw_bus_attrs[i]);
369 bus_unregister(&ieee1394_bus_type);
370 +release_devfs:
371 + devfs_remove("ieee1394");
372 release_chrdev:
373 unregister_chrdev_region(IEEE1394_CORE_DEV, 256);
374 exit_release_kernel_thread:
375 @@ -1182,6 +1191,7 @@
376 hpsb_cleanup_config_roms();
377
378 unregister_chrdev_region(IEEE1394_CORE_DEV, 256);
379 + devfs_remove("ieee1394");
380 }
381
382 module_init(ieee1394_init);
383 diff -ur linux-2.6.17/drivers/ieee1394/ieee1394_core.h linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.h
384 --- linux-2.6.17/drivers/ieee1394/ieee1394_core.h 2006-06-17 18:49:35.000000000 -0700
385 +++ linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.h 2006-08-25 11:06:18.000000000 -0700
386 @@ -3,6 +3,7 @@
387 #define _IEEE1394_CORE_H
388
389 #include <linux/slab.h>
390 +#include <linux/devfs_fs_kernel.h>
391 #include <asm/atomic.h>
392 #include <asm/semaphore.h>
393 #include "hosts.h"
394 diff -ur linux-2.6.17/drivers/ieee1394/raw1394.c linux-2.6.17-devfs/drivers/ieee1394/raw1394.c
395 --- linux-2.6.17/drivers/ieee1394/raw1394.c 2006-06-17 18:49:35.000000000 -0700
396 +++ linux-2.6.17-devfs/drivers/ieee1394/raw1394.c 2006-08-25 11:06:18.000000000 -0700
397 @@ -41,6 +41,7 @@
398 #include <linux/cdev.h>
399 #include <asm/uaccess.h>
400 #include <asm/atomic.h>
401 +#include <linux/devfs_fs_kernel.h>
402 #include <linux/compat.h>
403
404 #include "csr1212.h"
405 @@ -2998,6 +2999,9 @@
406 goto out_unreg;
407 }
408
409 + devfs_mk_cdev(MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_RAW1394 * 16),
410 + S_IFCHR | S_IRUSR | S_IWUSR, RAW1394_DEVICE_NAME);
411 +
412 cdev_init(&raw1394_cdev, &raw1394_fops);
413 raw1394_cdev.owner = THIS_MODULE;
414 kobject_set_name(&raw1394_cdev.kobj, RAW1394_DEVICE_NAME);
415 @@ -3019,6 +3023,7 @@
416 goto out;
417
418 out_dev:
419 + devfs_remove(RAW1394_DEVICE_NAME);
420 class_device_destroy(hpsb_protocol_class,
421 MKDEV(IEEE1394_MAJOR,
422 IEEE1394_MINOR_BLOCK_RAW1394 * 16));
423 @@ -3034,6 +3039,7 @@
424 MKDEV(IEEE1394_MAJOR,
425 IEEE1394_MINOR_BLOCK_RAW1394 * 16));
426 cdev_del(&raw1394_cdev);
427 + devfs_remove(RAW1394_DEVICE_NAME);
428 hpsb_unregister_highlevel(&raw1394_highlevel);
429 hpsb_unregister_protocol(&raw1394_driver);
430 }
431 diff -ur linux-2.6.17/drivers/ieee1394/video1394.c linux-2.6.17-devfs/drivers/ieee1394/video1394.c
432 --- linux-2.6.17/drivers/ieee1394/video1394.c 2006-06-17 18:49:35.000000000 -0700
433 +++ linux-2.6.17-devfs/drivers/ieee1394/video1394.c 2006-08-25 11:06:18.000000000 -0700
434 @@ -42,6 +42,7 @@
435 #include <linux/poll.h>
436 #include <linux/smp_lock.h>
437 #include <linux/delay.h>
438 +#include <linux/devfs_fs_kernel.h>
439 #include <linux/bitops.h>
440 #include <linux/types.h>
441 #include <linux/vmalloc.h>
442 @@ -1321,6 +1322,9 @@
443 class_device_create(hpsb_protocol_class, NULL, MKDEV(
444 IEEE1394_MAJOR, minor),
445 NULL, "%s-%d", VIDEO1394_DRIVER_NAME, ohci->host->id);
446 + devfs_mk_cdev(MKDEV(IEEE1394_MAJOR, minor),
447 + S_IFCHR | S_IRUSR | S_IWUSR,
448 + "%s/%d", VIDEO1394_DRIVER_NAME, ohci->host->id);
449 }
450
451
452 @@ -1328,9 +1332,12 @@
453 {
454 struct ti_ohci *ohci = hpsb_get_hostinfo(&video1394_highlevel, host);
455
456 - if (ohci)
457 + if (ohci) {
458 class_device_destroy(hpsb_protocol_class, MKDEV(IEEE1394_MAJOR,
459 IEEE1394_MINOR_BLOCK_VIDEO1394 * 16 + ohci->host->id));
460 + devfs_remove("%s/%d", VIDEO1394_DRIVER_NAME, ohci->host->id);
461 + }
462 +
463 return;
464 }
465
466 @@ -1471,8 +1478,12 @@
467 static void __exit video1394_exit_module (void)
468 {
469 hpsb_unregister_protocol(&video1394_driver);
470 +
471 hpsb_unregister_highlevel(&video1394_highlevel);
472 +
473 + devfs_remove(VIDEO1394_DRIVER_NAME);
474 cdev_del(&video1394_cdev);
475 +
476 PRINT_G(KERN_INFO, "Removed " VIDEO1394_DRIVER_NAME " module");
477 }
478
479 @@ -1489,12 +1500,15 @@
480 return ret;
481 }
482
483 + devfs_mk_dir(VIDEO1394_DRIVER_NAME);
484 +
485 hpsb_register_highlevel(&video1394_highlevel);
486
487 ret = hpsb_register_protocol(&video1394_driver);
488 if (ret) {
489 PRINT_G(KERN_ERR, "video1394: failed to register protocol");
490 hpsb_unregister_highlevel(&video1394_highlevel);
491 + devfs_remove(VIDEO1394_DRIVER_NAME);
492 cdev_del(&video1394_cdev);
493 return ret;
494 }
495 diff -ur linux-2.6.17/drivers/scsi/osst.c linux-2.6.17-devfs/drivers/scsi/osst.c
496 --- linux-2.6.17/drivers/scsi/osst.c 2006-06-17 18:49:35.000000000 -0700
497 +++ linux-2.6.17-devfs/drivers/scsi/osst.c 2006-08-25 11:06:18.000000000 -0700
498 @@ -48,6 +48,7 @@
499 #include <linux/vmalloc.h>
500 #include <linux/blkdev.h>
501 #include <linux/moduleparam.h>
502 +#include <linux/devfs_fs_kernel.h>
503 #include <linux/delay.h>
504 #include <linux/jiffies.h>
505 #include <asm/uaccess.h>
506 @@ -5721,7 +5722,7 @@
507 struct st_partstat * STps;
508 struct osst_buffer * buffer;
509 struct gendisk * drive;
510 - int i, dev_num;
511 + int i, mode, dev_num;
512
513 if (SDp->type != TYPE_TAPE || !osst_supports(SDp))
514 return -ENODEV;
515 @@ -5857,6 +5858,18 @@
516 snprintf(name, 8, "%s%s", "n", tape_name(tpnt));
517 osst_sysfs_add(MKDEV(OSST_MAJOR, dev_num + 128), dev, tpnt, name);
518 }
519 + for (mode = 0; mode < ST_NBR_MODES; ++mode) {
520 + /* Rewind entry */
521 + devfs_mk_cdev(MKDEV(OSST_MAJOR, dev_num + (mode << 5)),
522 + S_IFCHR | S_IRUGO | S_IWUGO,
523 + "%s/ot%s", SDp->devfs_name, osst_formats[mode]);
524 +
525 + /* No-rewind entry */
526 + devfs_mk_cdev(MKDEV(OSST_MAJOR, dev_num + (mode << 5) + 128),
527 + S_IFCHR | S_IRUGO | S_IWUGO,
528 + "%s/ot%sn", SDp->devfs_name, osst_formats[mode]);
529 + }
530 + drive->number = devfs_register_tape(SDp->devfs_name);
531
532 sdev_printk(KERN_INFO, SDp,
533 "osst :I: Attached OnStream %.5s tape as %s\n",
534 @@ -5873,7 +5886,7 @@
535 {
536 struct scsi_device * SDp = to_scsi_device(dev);
537 struct osst_tape * tpnt;
538 - int i;
539 + int i, mode;
540
541 if ((SDp->type != TYPE_TAPE) || (osst_nr_dev <= 0))
542 return 0;
543 @@ -5884,6 +5897,11 @@
544 osst_sysfs_destroy(MKDEV(OSST_MAJOR, i));
545 osst_sysfs_destroy(MKDEV(OSST_MAJOR, i+128));
546 tpnt->device = NULL;
547 + for (mode = 0; mode < ST_NBR_MODES; ++mode) {
548 + devfs_remove("%s/ot%s", SDp->devfs_name, osst_formats[mode]);
549 + devfs_remove("%s/ot%sn", SDp->devfs_name, osst_formats[mode]);
550 + }
551 + devfs_unregister_tape(tpnt->drive->number);
552 put_disk(tpnt->drive);
553 os_scsi_tapes[i] = NULL;
554 osst_nr_dev--;
555 diff -ur linux-2.6.17/drivers/scsi/scsi.c linux-2.6.17-devfs/drivers/scsi/scsi.c
556 --- linux-2.6.17/drivers/scsi/scsi.c 2006-06-17 18:49:35.000000000 -0700
557 +++ linux-2.6.17-devfs/drivers/scsi/scsi.c 2006-08-25 11:07:42.000000000 -0700
558 @@ -48,6 +48,7 @@
559 #include <linux/delay.h>
560 #include <linux/init.h>
561 #include <linux/completion.h>
562 +#include <linux/devfs_fs_kernel.h>
563 #include <linux/unistd.h>
564 #include <linux/spinlock.h>
565 #include <linux/kmod.h>
566 @@ -1247,6 +1248,7 @@
567 for_each_possible_cpu(i)
568 INIT_LIST_HEAD(&per_cpu(scsi_done_q, i));
569
570 + devfs_mk_dir("scsi");
571 printk(KERN_NOTICE "SCSI subsystem initialized\n");
572 return 0;
573
574 @@ -1271,6 +1273,7 @@
575 scsi_exit_sysctl();
576 scsi_exit_hosts();
577 scsi_exit_devinfo();
578 + devfs_remove("scsi");
579 scsi_exit_procfs();
580 scsi_exit_queue();
581 }
582 diff -ur linux-2.6.17/drivers/scsi/scsi_scan.c linux-2.6.17-devfs/drivers/scsi/scsi_scan.c
583 --- linux-2.6.17/drivers/scsi/scsi_scan.c 2006-06-17 18:49:35.000000000 -0700
584 +++ linux-2.6.17-devfs/drivers/scsi/scsi_scan.c 2006-08-25 11:06:18.000000000 -0700
585 @@ -716,8 +716,12 @@
586 if (inq_result[7] & 0x10)
587 sdev->sdtr = 1;
588
589 + sprintf(sdev->devfs_name, "scsi/host%d/bus%d/target%d/lun%d",
590 + sdev->host->host_no, sdev->channel,
591 + sdev->id, sdev->lun);
592 +
593 /*
594 - * End sysfs code.
595 + * End driverfs/devfs code.
596 */
597
598 if ((sdev->scsi_level >= SCSI_2) && (inq_result[7] & 2) &&
599 diff -ur linux-2.6.17/drivers/scsi/sd.c linux-2.6.17-devfs/drivers/scsi/sd.c
600 --- linux-2.6.17/drivers/scsi/sd.c 2006-06-17 18:49:35.000000000 -0700
601 +++ linux-2.6.17-devfs/drivers/scsi/sd.c 2006-08-25 11:06:18.000000000 -0700
602 @@ -1683,6 +1683,8 @@
603 'a' + m1, 'a' + m2, 'a' + m3);
604 }
605
606 + strcpy(gd->devfs_name, sdp->devfs_name);
607 +
608 gd->private_data = &sdkp->driver;
609 gd->queue = sdkp->device->request_queue;
610
611 diff -ur linux-2.6.17/drivers/scsi/sg.c linux-2.6.17-devfs/drivers/scsi/sg.c
612 --- linux-2.6.17/drivers/scsi/sg.c 2006-06-17 18:49:35.000000000 -0700
613 +++ linux-2.6.17-devfs/drivers/scsi/sg.c 2006-08-25 11:06:18.000000000 -0700
614 @@ -44,6 +44,7 @@
615 #include <linux/poll.h>
616 #include <linux/smp_lock.h>
617 #include <linux/moduleparam.h>
618 +#include <linux/devfs_fs_kernel.h>
619 #include <linux/cdev.h>
620 #include <linux/seq_file.h>
621 #include <linux/blkdev.h>
622 @@ -1427,10 +1428,14 @@
623 k = error;
624 sdp = sg_dev_arr[k];
625
626 + devfs_mk_cdev(MKDEV(SCSI_GENERIC_MAJOR, k),
627 + S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
628 + "%s/generic", scsidp->devfs_name);
629 error = cdev_add(cdev, MKDEV(SCSI_GENERIC_MAJOR, k), 1);
630 - if (error)
631 + if (error) {
632 + devfs_remove("%s/generic", scsidp->devfs_name);
633 goto out;
634 -
635 + }
636 sdp->cdev = cdev;
637 if (sg_sysfs_valid) {
638 struct class_device * sg_class_member;
639 @@ -1520,6 +1525,7 @@
640 class_device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, k));
641 cdev_del(sdp->cdev);
642 sdp->cdev = NULL;
643 + devfs_remove("%s/generic", scsidp->devfs_name);
644 put_disk(sdp->disk);
645 sdp->disk = NULL;
646 if (NULL == sdp->headfp)
647 diff -ur linux-2.6.17/drivers/scsi/sr.c linux-2.6.17-devfs/drivers/scsi/sr.c
648 --- linux-2.6.17/drivers/scsi/sr.c 2006-06-17 18:49:35.000000000 -0700
649 +++ linux-2.6.17-devfs/drivers/scsi/sr.c 2006-08-25 11:06:18.000000000 -0700
650 @@ -592,6 +592,8 @@
651 get_capabilities(cd);
652 sr_vendor_init(cd);
653
654 + snprintf(disk->devfs_name, sizeof(disk->devfs_name),
655 + "%s/cd", sdev->devfs_name);
656 disk->driverfs_dev = &sdev->sdev_gendev;
657 set_capacity(disk, cd->capacity);
658 disk->private_data = &cd->driver;
659 diff -ur linux-2.6.17/drivers/scsi/st.c linux-2.6.17-devfs/drivers/scsi/st.c
660 --- linux-2.6.17/drivers/scsi/st.c 2006-06-17 18:49:35.000000000 -0700
661 +++ linux-2.6.17-devfs/drivers/scsi/st.c 2006-08-25 11:06:18.000000000 -0700
662 @@ -35,6 +35,7 @@
663 #include <linux/spinlock.h>
664 #include <linux/blkdev.h>
665 #include <linux/moduleparam.h>
666 +#include <linux/devfs_fs_kernel.h>
667 #include <linux/cdev.h>
668 #include <linux/delay.h>
669 #include <linux/mutex.h>
670 @@ -4053,8 +4054,23 @@
671 do_create_class_files(tpnt, dev_num, mode);
672 }
673
674 + for (mode = 0; mode < ST_NBR_MODES; ++mode) {
675 + /* Make sure that the minor numbers corresponding to the four
676 + first modes always get the same names */
677 + i = mode << (4 - ST_NBR_MODE_BITS);
678 + /* Rewind entry */
679 + devfs_mk_cdev(MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, 0)),
680 + S_IFCHR | S_IRUGO | S_IWUGO,
681 + "%s/mt%s", SDp->devfs_name, st_formats[i]);
682 + /* No-rewind entry */
683 + devfs_mk_cdev(MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, 1)),
684 + S_IFCHR | S_IRUGO | S_IWUGO,
685 + "%s/mt%sn", SDp->devfs_name, st_formats[i]);
686 + }
687 + disk->number = devfs_register_tape(SDp->devfs_name);
688 +
689 sdev_printk(KERN_WARNING, SDp,
690 "Attached scsi tape %s\n", tape_name(tpnt));
691 printk(KERN_WARNING "%s: try direct i/o: %s (alignment %d B)\n",
692 tape_name(tpnt), tpnt->try_dio ? "yes" : "no",
693 queue_dma_alignment(SDp->request_queue) + 1);
694 @@ -4106,9 +4122,13 @@
695 scsi_tapes[i] = NULL;
696 st_nr_dev--;
697 write_unlock(&st_dev_arr_lock);
698 + devfs_unregister_tape(tpnt->disk->number);
699 sysfs_remove_link(&tpnt->device->sdev_gendev.kobj,
700 "tape");
701 for (mode = 0; mode < ST_NBR_MODES; ++mode) {
702 + j = mode << (4 - ST_NBR_MODE_BITS);
703 + devfs_remove("%s/mt%s", SDp->devfs_name, st_formats[j]);
704 + devfs_remove("%s/mt%sn", SDp->devfs_name, st_formats[j]);
705 for (j=0; j < 2; j++) {
706 class_device_destroy(st_sysfs_class,
707 MKDEV(SCSI_TAPE_MAJOR,
708 diff -ur linux-2.6.17/include/scsi/scsi_device.h linux-2.6.17-devfs/include/scsi/scsi_device.h
709 --- linux-2.6.17/include/scsi/scsi_device.h 2006-06-17 18:49:35.000000000 -0700
710 +++ linux-2.6.17-devfs/include/scsi/scsi_device.h 2006-08-25 11:06:18.000000000 -0700
711 @@ -74,6 +74,7 @@
712 unsigned sector_size; /* size in bytes */
713
714 void *hostdata; /* available to low-level driver */
715 + char devfs_name[256]; /* devfs junk */
716 char type;
717 char scsi_level;
718 char inq_periph_qual; /* PQ from INQUIRY data */