View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001395 | channel: elrepo/el8 | --elrepo--request-for-enhancement-- | public | 2023-10-24 00:24 | 2024-03-26 18:36 |
Reporter | tqhoang | Assigned To | toracat | ||
Priority | normal | Severity | minor | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Platform | x86_64 | OS | Rocky Linux | OS Version | 8.8 |
Summary | 0001395: Request kmod-floppy | ||||
Description | The EL8.8 floppy driver does not compile from source. After doing some comparisons, it appears that the block device drivers in the EL8.8 kernel are similar to the 5.19 kernel. I attached a tarball with the stock driver and also a patch to compile under EL8.8. It is tested working with mtools and mount [-t vfat]. | ||||
Tags | No tags attached. | ||||
Attached Files | floppy-fix-el8.patch (2,928 bytes)
--- floppy/floppy.el8.c 2023-04-05 12:44:47.000000000 -0400 +++ floppy/floppy.c 2023-10-24 00:05:23.464458678 -0400 @@ -572,6 +572,7 @@ static void floppy_release_irq_and_dma(v * output_byte is automatically disabled when reset is set. */ static void reset_fdc(void); +static int floppy_revalidate(struct gendisk *disk); /* * These are global variables, as that's the easiest way to give @@ -3222,7 +3223,8 @@ static int invalidate_drive(struct block /* invalidate the buffer track to force a reread */ set_bit((long)bdev->bd_disk->private_data, &fake_change); process_fd_request(); - check_disk_change(bdev); + if (bdev_check_media_change(bdev)) + floppy_revalidate(bdev->bd_disk); return 0; } @@ -4033,7 +4035,8 @@ static int floppy_open(struct block_devi if (mode & (FMODE_READ|FMODE_WRITE)) { UDRS->last_checked = 0; clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags); - check_disk_change(bdev); + if (bdev_check_media_change(bdev)) + floppy_revalidate(bdev->bd_disk); if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags)) goto out; if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags)) @@ -4490,17 +4493,6 @@ static bool floppy_available(int drive) return true; } -static struct kobject *floppy_find(dev_t dev, int *part, void *data) -{ - int drive = (*part & 3) | ((*part & 0x80) >> 5); - if (drive >= N_DRIVE || !floppy_available(drive)) - return NULL; - if (((*part >> 2) & 0x1f) >= ARRAY_SIZE(floppy_type)) - return NULL; - *part = 0; - return get_disk_and_module(disks[drive]); -} - static int __init do_floppy_init(void) { int i, unit, drive, err; @@ -4553,9 +4545,6 @@ static int __init do_floppy_init(void) if (err) goto out_unreg_blkdev; - blk_register_region(MKDEV(FLOPPY_MAJOR, 0), 256, THIS_MODULE, - floppy_find, NULL, NULL); - for (i = 0; i < 256; i++) if (ITYPE(i)) floppy_sizes[i] = floppy_type[ITYPE(i)].size; @@ -4584,7 +4573,7 @@ static int __init do_floppy_init(void) if (fdc_state[0].address == -1) { cancel_delayed_work(&fd_timeout); err = -ENODEV; - goto out_unreg_region; + goto out_unreg_driver; } #if N_FDC > 1 fdc_state[1].address = FDC2; @@ -4595,7 +4584,7 @@ static int __init do_floppy_init(void) if (err) { cancel_delayed_work(&fd_timeout); err = -EBUSY; - goto out_unreg_region; + goto out_unreg_driver; } /* initialise drive state */ @@ -4690,8 +4679,7 @@ out_remove_drives: out_release_dma: if (atomic_read(&usage_count)) floppy_release_irq_and_dma(); -out_unreg_region: - blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); +out_unreg_driver: platform_driver_unregister(&floppy_driver); out_unreg_blkdev: unregister_blkdev(FLOPPY_MAJOR, "fd"); @@ -4918,7 +4906,6 @@ static void __exit floppy_module_exit(vo { int drive; - blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); unregister_blkdev(FLOPPY_MAJOR, "fd"); platform_driver_unregister(&floppy_driver); | ||||
|
Thanks for the submission. The following package has been built and will appear on our mirror sites shortly: kmod-floppy-0.0-1.el8_8.elrepo.x86_64.rpm |
|
You're welcome. Glad to help when I can. I tested the floppy kmod and it works great! |
|
Excellent. Now closing as resolved/fixed. |
Date Modified | Username | Field | Change |
---|---|---|---|
2023-10-24 00:24 | tqhoang | New Issue | |
2023-10-24 00:24 | tqhoang | Status | new => assigned |
2023-10-24 00:24 | tqhoang | Assigned To | => toracat |
2023-10-24 00:24 | tqhoang | File Added: floppy-0.0.tar.gz | |
2023-10-24 00:24 | tqhoang | File Added: floppy-fix-el8.patch | |
2023-10-24 13:20 | toracat | Note Added: 0009388 | |
2023-10-24 17:47 | tqhoang | Note Added: 0009389 | |
2023-10-24 17:53 | toracat | Status | assigned => resolved |
2023-10-24 17:53 | toracat | Resolution | open => fixed |
2023-10-24 17:53 | toracat | Note Added: 0009390 | |
2024-03-26 18:36 | tqhoang | Status | resolved => closed |