* Re: ide-floppy.c vs devfs @ 2001-11-26 10:04 Borsenkow Andrej 2001-11-26 17:44 ` Paul Bristow 0 siblings, 1 reply; 6+ messages in thread From: Borsenkow Andrej @ 2001-11-26 10:04 UTC (permalink / raw) To: rgooch, paul; +Cc: linux-kernel >> Try the devfs test version that I just uploaded to >> >> http://paulbristow.net/linux/idefloppy.html >> >> This is early days, and I'm not sure what the best approach is... >> >> Feedback is greatly appreaciated. > On this page you mention that Mandrake includes this patch, but your driver (link on the above patch) differs from Mandrake one. In patch I sent to Mandrake I just fake drive capacity in case CAPACITY_NO_CARTRIDGE is returned. > > I haven't had time to look at this closely, but I question why you're > trying to prevent grok_partitions() from doing it's thing. There's > supposed to be a flag set for removable media which ensures media > revalidation on scanning the parent directory or looking up an entry. > I'd rather see that mechanism fixed. Currently grok_partitions() silently ignores any media with size == 0, irrespectively of whether removable is set or not. It means that *no* entries for drive (either disc or part?) are created at all and there is nothing that later on triggers revalidation. I still believe grok_partitions() should create disc node for removables even if current capacity == 0 (that for removable just means there is no media inserted). Then it would work the way you describe and faking drive capacity for empty drives could be removed (IIRC it happens for other removables like SCSI disks as well). -andrej ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: ide-floppy.c vs devfs 2001-11-26 10:04 ide-floppy.c vs devfs Borsenkow Andrej @ 2001-11-26 17:44 ` Paul Bristow 2001-11-27 12:34 ` Borsenkow Andrej 0 siblings, 1 reply; 6+ messages in thread From: Paul Bristow @ 2001-11-26 17:44 UTC (permalink / raw) To: Borsenkow Andrej; +Cc: rgooch, linux-kernel The problem is one of making it user-comprehensible. If I just use grok_partitions I get no disc nodes created in devfs. If I do my thing I get a floppy node created, regardless of wether a disk is inserted at load time. This gives something for you to attempt to mount after inserting a disk, that causes a revalidate, and gets the correct disk nodes created. This is made somewhat more complicated by the fact that ide-floppy disks can use either the whole disk, with no partition table or, more commonly, partition4. So a user-friendly solution would be to create a floppy node that pointed to the partition, if it existed, or the whole disk if it didn't. With appropriate code to handle that fact that anyone can partition these disks in any way they like. Note this doesn't take account of the nice ATAPI command that sets the disk into "ignore track 0" mode, making a partition 4 look like an entire floppy with 1 less track. Anyone up to telling me how this is handled in the SCSI layer? Borsenkow Andrej wrote: >>>Try the devfs test version that I just uploaded to >>> >>>http://paulbristow.net/linux/idefloppy.html >>> >>>This is early days, and I'm not sure what the best approach is... >>> >>>Feedback is greatly appreaciated. >>> > > On this page you mention that Mandrake includes this patch, but your > driver (link on the above patch) differs from Mandrake one. In patch I > sent to Mandrake I just fake drive capacity in case > CAPACITY_NO_CARTRIDGE is returned. Sorry, not trying to detract from anyone's work. That line refers to mandrake having the clik support way before it was included in the stock kernel. I'll clarify the web page. >>I haven't had time to look at this closely, but I question why you're >>trying to prevent grok_partitions() from doing it's thing. There's >>supposed to be a flag set for removable media which ensures media >>revalidation on scanning the parent directory or looking up an entry. >>I'd rather see that mechanism fixed. >> > > Currently grok_partitions() silently ignores any media with size == 0, > irrespectively of whether removable is set or not. It means that *no* > entries for drive (either disc or part?) are created at all and there is > nothing that later on triggers revalidation. > > I still believe grok_partitions() should create disc node for removables > even if current capacity == 0 (that for removable just means there is no > media inserted). Then it would work the way you describe and faking > drive capacity for empty drives could be removed (IIRC it happens for > other removables like SCSI disks as well). > -- Paul Email: paul@paulbristow.net Web: http://paulbristow.net ICQ: 11965223 ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: ide-floppy.c vs devfs 2001-11-26 17:44 ` Paul Bristow @ 2001-11-27 12:34 ` Borsenkow Andrej 2001-11-27 17:47 ` Paul Bristow 0 siblings, 1 reply; 6+ messages in thread From: Borsenkow Andrej @ 2001-11-27 12:34 UTC (permalink / raw) To: 'Paul Bristow'; +Cc: rgooch, linux-kernel > > This is made somewhat more complicated by the fact that ide-floppy disks > can use either the whole disk, with no partition table or, more > commonly, partition4. So a user-friendly solution would be to create a > floppy node that pointed to the partition, if it existed, or the whole > disk if it didn't. With appropriate code to handle that fact that > anyone can partition these disks in any way they like. > Where's the problem? Use .../disc for whole disc or .../part4 for "normal" access. (Or /dev/hdc and /dev/hdc4 if you prefer) It is nice if partition code can detect it but it is not ide-floppy driver problem. > Note this doesn't take account of the nice ATAPI command that sets the > disk into "ignore track 0" mode, making a partition 4 look like an > entire floppy with 1 less track. > Why complicate things more than needed? > Anyone up to telling me how this is handled in the SCSI layer? > When I boot without media in Jaz drive I get something like "no media inserted, assuming 1GB 512B per sector". Actually I modeled my patch from this - use some default values reported by drive when no media currently exists. -andrej ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: ide-floppy.c vs devfs 2001-11-27 12:34 ` Borsenkow Andrej @ 2001-11-27 17:47 ` Paul Bristow 2001-11-27 20:38 ` Mike Fedyk 0 siblings, 1 reply; 6+ messages in thread From: Paul Bristow @ 2001-11-27 17:47 UTC (permalink / raw) To: Borsenkow Andrej; +Cc: Richard Gooch, linux-kernel Borsenkow Andrej wrote: >>This is made somewhat more complicated by the fact that ide-floppy >> > disks > >>can use either the whole disk, with no partition table or, more >>commonly, partition4. So a user-friendly solution would be to create >> > a > >>floppy node that pointed to the partition, if it existed, or the whole >>disk if it didn't. With appropriate code to handle that fact that >>anyone can partition these disks in any way they like. >> >> > > Where's the problem? Use .../disc for whole disc or .../part4 for > "normal" access. (Or /dev/hdc and /dev/hdc4 if you prefer) It is nice if > partition code can detect it but it is not ide-floppy driver problem. Just wondering if we should be clever for the users here. Maybe I should leave that to user-space tools? Or is there anything in devfs that can take care of this? The nice solution for end-users might be a /dev/idefloppy that is a symlink to the relevant node in the /dev/ide... tree. >>Note this doesn't take account of the nice ATAPI command that sets the >>disk into "ignore track 0" mode, making a partition 4 look like an >>entire floppy with 1 less track. >> >> > > Why complicate things more than needed? Because you can boot from a zip or ls-120 drive, with the BIOS setting it to this mode. There are disks out there that are unreadable unless you ignore track zero, by formatting them in a PC like this. >>Anyone up to telling me how this is handled in the SCSI layer? >> >> > > When I boot without media in Jaz drive I get something like "no media > inserted, assuming 1GB 512B per sector". Actually I modeled my patch > from this - use some default values reported by drive when no media > currently exists. OK. This makes the most sense here. I'm happy to go with this. I'll dig out your patch - discovered I was on holiday when you originally submitted it - and code and test something over the next day or so. Thanks for the help > -andrej -- Paul Email: paul@paulbristow.net Web: http://paulbristow.net ICQ: 11965223 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: ide-floppy.c vs devfs 2001-11-27 17:47 ` Paul Bristow @ 2001-11-27 20:38 ` Mike Fedyk 2001-11-28 18:36 ` [PATCH] ide-floppy real devfs support for testing Paul Bristow 0 siblings, 1 reply; 6+ messages in thread From: Mike Fedyk @ 2001-11-27 20:38 UTC (permalink / raw) To: Paul Bristow; +Cc: Borsenkow Andrej, Richard Gooch, linux-kernel On Tue, Nov 27, 2001 at 06:47:03PM +0100, Paul Bristow wrote: > > > Borsenkow Andrej wrote: > > >>This is made somewhat more complicated by the fact that ide-floppy > >> > >disks > > > >>can use either the whole disk, with no partition table or, more > >>commonly, partition4. So a user-friendly solution would be to create > >> > >a > > > >>floppy node that pointed to the partition, if it existed, or the whole > >>disk if it didn't. With appropriate code to handle that fact that > >>anyone can partition these disks in any way they like. > >> > >> > > > >Where's the problem? Use .../disc for whole disc or .../part4 for > >"normal" access. (Or /dev/hdc and /dev/hdc4 if you prefer) It is nice if > >partition code can detect it but it is not ide-floppy driver problem. > > > Just wondering if we should be clever for the users here. Maybe I > should leave that to user-space tools? Or is there anything in devfs > that can take care of this? The nice solution for end-users might be > a /dev/idefloppy that is a symlink to the relevant node in the > /dev/ide... tree. > Can't devfsd be configured to do something like this? > >Why complicate things more than needed? > > Because you can boot from a zip or ls-120 drive, with the BIOS setting > it to this mode. There are disks out there that are unreadable unless > you ignore track zero, by formatting them in a PC like this. > If that's what is required to boot from ls-120 and zip, then it probably needs to be in kernel space. MF ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] ide-floppy real devfs support for testing 2001-11-27 20:38 ` Mike Fedyk @ 2001-11-28 18:36 ` Paul Bristow 0 siblings, 0 replies; 6+ messages in thread From: Paul Bristow @ 2001-11-28 18:36 UTC (permalink / raw) To: Mike Fedyk; +Cc: Borsenkow Andrej, Richard Gooch, linux-kernel [-- Attachment #1: Type: text/plain, Size: 727 bytes --] Right :-), the following patch depends on the previous via fix patch, which is also available at http://paulbristow.net/linux/idefloppy.html Both patches can be applied against 2.4.14-16 This patch implements devfs support in the ide-floppy driver, as it is documented in Richards FAQ. If there is a disk in the drive, a disc node and any partitions are created in /dev/ide/hostx/busx/targetx/lunx/ and a symlink is created in /dev/ide/fd/cxbxtxux to the disc node If there is no disk in the drive, you just get no partition information, a disc node is still created so you have something to revalidate against. Cheers, -- Paul Email: paul@paulbristow.net Web: http://paulbristow.net ICQ: 11965223 [-- Attachment #2: ide-floppy-devfs-patch --] [-- Type: text/plain, Size: 5683 bytes --] diff -burN -X dontdiff linux-2.4.16-clean/drivers/ide/ide-floppy.c linux-2.4.16/drivers/ide/ide-floppy.c --- linux-2.4.16-clean/drivers/ide/ide-floppy.c Wed Nov 28 19:25:34 2001 +++ linux-2.4.16/drivers/ide/ide-floppy.c Wed Nov 28 19:30:36 2001 @@ -1,10 +1,12 @@ /* - * linux/drivers/ide/ide-floppy.c Version 0.97.sv Jan 14 2001 + * linux/drivers/ide/ide-floppy.c * * Copyright (C) 1996 - 1999 Gadi Oxman <gadio@netvision.net.il> * Copyright (C) 2000 - 2001 Paul Bristow <paul@paulbristow.net> */ +#define IDEFLOPPY_VERSION "0.99-devfs-test4" + /* * IDE ATAPI floppy driver. * @@ -82,9 +84,9 @@ * msec works on my system. The variable ticks is exposed * in /proc/ide/hdx/settings. Each tick is 10 msec. If ticks is * set to zero, the driver reverts to the old algorithm. --Skip + * Ver 0.99 Nov 22 01 Add devfs support */ -#define IDEFLOPPY_VERSION "0.98" #include <linux/config.h> #include <linux/module.h> @@ -101,6 +103,7 @@ #include <linux/slab.h> #include <linux/cdrom.h> #include <linux/ide.h> +#include <linux/devfs_fs_kernel.h> #include <asm/byteorder.h> #include <asm/irq.h> @@ -275,6 +278,7 @@ */ typedef struct { ide_drive_t *drive; + devfs_handle_t de; /* devfs entry */ idefloppy_pc_t *pc; /* Current packet command */ idefloppy_pc_t *failed_pc; /* Last failed packet command */ @@ -673,6 +677,8 @@ #define IDEFLOPPY_MIN(a,b) ((a)<(b) ? (a):(b)) #define IDEFLOPPY_MAX(a,b) ((a)>(b) ? (a):(b)) +extern devfs_handle_t ide_devfs_handle; /* Hook into ide devfs chain */ + /* * Too bad. The drive wants to send us data which we are not ready to accept. * Just throw it away. @@ -1097,6 +1103,7 @@ return ide_started; } + /* * Issue a packet command */ @@ -1483,9 +1490,14 @@ if (memcmp (descriptor, &floppy->capacity, sizeof (idefloppy_capacity_descriptor_t))) printk (KERN_INFO "%s: %dkB, %d blocks, %d sector size\n", drive->name, blocks * length / 1024, blocks, length); floppy->capacity = *descriptor; - if (!length || length % 512) + if (!length || length % 512) { printk (KERN_NOTICE "%s: %d bytes block size not supported\n", drive->name, length); - else { + } else if (!i && descriptor->dc == CAPACITY_NO_CARTRIDGE && drive->removable && !(length % 512)) { + /* Set these two so that idefloppy_capacity returns a + positive value, needed for devfs registration. */ + floppy->blocks = blocks; + floppy->bs_factor = length / 512; + } else { floppy->blocks = blocks; floppy->block_size = length; if ((floppy->bs_factor = length / 512) != 1) @@ -2027,6 +2039,7 @@ ide_add_setting(drive, "ticks", SETTING_RW, -1, -1, TYPE_BYTE, 0, 255, 1, 1, &floppy->ticks, NULL); } + /* * Driver initialization. */ @@ -2035,6 +2048,9 @@ struct idefloppy_id_gcw gcw; int major = HWIF(drive)->major, i; int minor = drive->select.b.unit << PARTN_BITS; + char fname[64],iname[64]; /* for devfs */ + devfs_handle_t idefloppy_devfs_handle; /* for devfs */ + ide_hwif_t *hwif = HWIF(drive); *((unsigned short *) &gcw) = drive->id->config; drive->driver_data = floppy; @@ -2080,26 +2096,46 @@ set_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags); } - (void) idefloppy_get_capacity (drive); idefloppy_add_settings(drive); + for (i = 0; i < MAX_DRIVES; ++i) { - ide_hwif_t *hwif = HWIF(drive); if (drive != &hwif->drives[i]) continue; hwif->gd->de_arr[i] = drive->de; + if (drive->removable) hwif->gd->flags[i] |= GENHD_FL_REMOVABLE; break; } + + /* Always register drive with devfs */ + floppy->de = devfs_register (drive->de, "disc", DEVFS_FL_REMOVABLE, + major, minor, + S_IFBLK | S_IRUGO | S_IWUGO, + ide_fops, NULL); + /* Create ide/fd entry in devfs */ + idefloppy_devfs_handle = devfs_mk_dir(ide_devfs_handle,"fd",NULL); + + sprintf (fname, "c%db%dt%du%d", + (hwif->channel && hwif->mate) ? hwif->mate->index : hwif->index, + hwif->channel, i, hwif->drives[i].lun); + sprintf (iname, "../host%d/bus%d/target%d/lun%d/disc", + (hwif->channel && hwif->mate) ? hwif->mate->index : hwif->index, + hwif->channel, i, hwif->drives[i].lun); + devfs_mk_symlink(idefloppy_devfs_handle, fname, DEVFS_FL_REMOVABLE, iname, NULL, NULL); } + static int idefloppy_cleanup (ide_drive_t *drive) { idefloppy_floppy_t *floppy = drive->driver_data; if (ide_unregister_subdriver (drive)) return 1; + + devfs_unregister(floppy->de); + drive->driver_data = NULL; kfree (floppy); return 0; @@ -2212,6 +2248,7 @@ module_init(idefloppy_init); module_exit(idefloppy_exit); + MODULE_LICENSE("GPL"); MODULE_AUTHOR("Maintainer: Paul Bristow <paul@paulbristow.net>"); MODULE_DESCRIPTION("ATAPI Floppy Driver V"IDEFLOPPY_VERSION); diff -burN -X dontdiff linux-2.4.16-clean/drivers/ide/ide-probe.c linux-2.4.16/drivers/ide/ide-probe.c --- linux-2.4.16-clean/drivers/ide/ide-probe.c Mon Nov 26 14:29:17 2001 +++ linux-2.4.16/drivers/ide/ide-probe.c Wed Nov 28 18:49:38 2001 @@ -121,6 +121,7 @@ if (!strstr(id->model, "oppy") && !strstr(id->model, "poyp") && !strstr(id->model, "ZIP")) printk("cdrom or floppy?, assuming "); if (drive->media != ide_cdrom) { + drive->removable = 1; printk ("FLOPPY"); break; } ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2001-11-28 18:34 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2001-11-26 10:04 ide-floppy.c vs devfs Borsenkow Andrej 2001-11-26 17:44 ` Paul Bristow 2001-11-27 12:34 ` Borsenkow Andrej 2001-11-27 17:47 ` Paul Bristow 2001-11-27 20:38 ` Mike Fedyk 2001-11-28 18:36 ` [PATCH] ide-floppy real devfs support for testing Paul Bristow
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.