[PATCH] switch ataflop

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2008-03-02 09:23:54 -05:00
parent 94562c1751
commit 60ad234007

View file

@ -361,13 +361,13 @@ static void finish_fdc( void );
static void finish_fdc_done( int dummy ); static void finish_fdc_done( int dummy );
static void setup_req_params( int drive ); static void setup_req_params( int drive );
static void redo_fd_request( void); static void redo_fd_request( void);
static int fd_ioctl( struct inode *inode, struct file *filp, unsigned int static int fd_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
cmd, unsigned long param); cmd, unsigned long param);
static void fd_probe( int drive ); static void fd_probe( int drive );
static int fd_test_drive_present( int drive ); static int fd_test_drive_present( int drive );
static void config_types( void ); static void config_types( void );
static int floppy_open( struct inode *inode, struct file *filp ); static int floppy_open(struct block_device *bdev, fmode_t mode);
static int floppy_release( struct inode * inode, struct file * filp ); static int floppy_release(struct gendisk *disk, fmode_t mode);
/************************* End of Prototypes **************************/ /************************* End of Prototypes **************************/
@ -1483,10 +1483,10 @@ void do_fd_request(struct request_queue * q)
atari_enable_irq( IRQ_MFP_FDC ); atari_enable_irq( IRQ_MFP_FDC );
} }
static int fd_ioctl(struct inode *inode, struct file *filp, static int fd_ioctl(struct block_device *bdev, fmode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = bdev->bd_disk;
struct atari_floppy_struct *floppy = disk->private_data; struct atari_floppy_struct *floppy = disk->private_data;
int drive = floppy - unit; int drive = floppy - unit;
int type = floppy->type; int type = floppy->type;
@ -1661,7 +1661,7 @@ static int fd_ioctl(struct inode *inode, struct file *filp,
/* invalidate the buffer track to force a reread */ /* invalidate the buffer track to force a reread */
BufferDrive = -1; BufferDrive = -1;
set_bit(drive, &fake_change); set_bit(drive, &fake_change);
check_disk_change(inode->i_bdev); check_disk_change(bdev);
return 0; return 0;
default: default:
return -EINVAL; return -EINVAL;
@ -1804,37 +1804,36 @@ static void __init config_types( void )
* drive with different device numbers. * drive with different device numbers.
*/ */
static int floppy_open( struct inode *inode, struct file *filp ) static int floppy_open(struct block_device *bdev, fmode_t mode)
{ {
struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data; struct atari_floppy_struct *p = bdev->bd_disk->private_data;
int type = iminor(inode) >> 2; int type = MINOR(bdev->bd_dev) >> 2;
DPRINT(("fd_open: type=%d\n",type)); DPRINT(("fd_open: type=%d\n",type));
if (p->ref && p->type != type) if (p->ref && p->type != type)
return -EBUSY; return -EBUSY;
if (p->ref == -1 || (p->ref && filp->f_mode & FMODE_EXCL)) if (p->ref == -1 || (p->ref && mode & FMODE_EXCL))
return -EBUSY; return -EBUSY;
if (filp->f_mode & FMODE_EXCL) if (mode & FMODE_EXCL)
p->ref = -1; p->ref = -1;
else else
p->ref++; p->ref++;
p->type = type; p->type = type;
if (filp->f_mode & FMODE_NDELAY) if (mode & FMODE_NDELAY)
return 0; return 0;
if (filp->f_mode & (FMODE_READ|FMODE_WRITE)) { if (mode & (FMODE_READ|FMODE_WRITE)) {
check_disk_change(inode->i_bdev); check_disk_change(bdev);
if (filp->f_mode & FMODE_WRITE) { if (mode & FMODE_WRITE) {
if (p->wpstat) { if (p->wpstat) {
if (p->ref < 0) if (p->ref < 0)
p->ref = 0; p->ref = 0;
else else
p->ref--; p->ref--;
floppy_release(inode, filp);
return -EROFS; return -EROFS;
} }
} }
@ -1843,9 +1842,9 @@ static int floppy_open( struct inode *inode, struct file *filp )
} }
static int floppy_release( struct inode * inode, struct file * filp ) static int floppy_release(struct gendisk *disk, fmode_t mode)
{ {
struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data; struct atari_floppy_struct *p = disk->private_data;
if (p->ref < 0) if (p->ref < 0)
p->ref = 0; p->ref = 0;
else if (!p->ref--) { else if (!p->ref--) {
@ -1857,9 +1856,9 @@ static int floppy_release( struct inode * inode, struct file * filp )
static struct block_device_operations floppy_fops = { static struct block_device_operations floppy_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.__open = floppy_open, .open = floppy_open,
.__release = floppy_release, .release = floppy_release,
.__ioctl = fd_ioctl, .locked_ioctl = fd_ioctl,
.media_changed = check_floppy_change, .media_changed = check_floppy_change,
.revalidate_disk= floppy_revalidate, .revalidate_disk= floppy_revalidate,
}; };