u8 cap_desc[8];
        /* Copy of the flexible disk page */
        u8 flexible_disk_page[32];
-       /* Write protect */
-       int wp;
-       /* Supports format progress report */
-       int srfp;
 } idefloppy_floppy_t;
 
 #define IDEFLOPPY_TICKS_DELAY  HZ/20   /* default delay for ZIP 100 (50ms) */
                                " parameters\n");
                return 1;
        }
-       floppy->wp = !!(pc.buf[3] & 0x80);
-       set_disk_ro(disk, floppy->wp);
+
+       if (pc.buf[3] & 0x80)
+               drive->atapi_flags |= IDE_AFLAG_WP;
+       else
+               drive->atapi_flags &= ~IDE_AFLAG_WP;
+
+       set_disk_ro(disk, !!(drive->atapi_flags & IDE_AFLAG_WP));
+
        page = &pc.buf[8];
 
        transfer_rate = be16_to_cpup((__be16 *)&pc.buf[8 + 2]);
        idefloppy_floppy_t *floppy = drive->driver_data;
        struct ide_atapi_pc pc;
 
-       floppy->srfp = 0;
+       drive->atapi_flags &= ~IDE_AFLAG_SRFP;
 
        idefloppy_create_mode_sense_cmd(&pc, IDEFLOPPY_CAPABILITIES_PAGE);
        pc.flags |= PC_FLAG_SUPPRESS_ERROR;
        if (ide_queue_pc_tail(drive, floppy->disk, &pc))
                return 1;
 
-       floppy->srfp = pc.buf[8 + 2] & 0x40;
+       if (pc.buf[8 + 2] & 0x40)
+               drive->atapi_flags |= IDE_AFLAG_SRFP;
+
        return 0;
 }
 
        struct ide_atapi_pc pc;
        int progress_indication = 0x10000;
 
-       if (floppy->srfp) {
+       if (drive->atapi_flags & IDE_AFLAG_SRFP) {
                idefloppy_create_request_sense_cmd(&pc);
                if (ide_queue_pc_tail(drive, floppy->disk, &pc))
                        return -EIO;
                        goto out_put_floppy;
                }
 
-               if (floppy->wp && (filp->f_mode & 2)) {
+               if ((drive->atapi_flags & IDE_AFLAG_WP) && (filp->f_mode & 2)) {
                        ret = -EROFS;
                        goto out_put_floppy;
                }
 
        IDE_AFLAG_CLIK_DRIVE            = (1 << 19),
        /* Requires BH algorithm for packets */
        IDE_AFLAG_ZIP_DRIVE             = (1 << 20),
+       /* Write protect */
+       IDE_AFLAG_WP                    = (1 << 21),
+       /* Supports format progress report */
+       IDE_AFLAG_SRFP                  = (1 << 22),
 
        /* ide-tape */
-       IDE_AFLAG_IGNORE_DSC            = (1 << 21),
+       IDE_AFLAG_IGNORE_DSC            = (1 << 23),
        /* 0 When the tape position is unknown */
-       IDE_AFLAG_ADDRESS_VALID         = (1 << 22),
+       IDE_AFLAG_ADDRESS_VALID         = (1 << 24),
        /* Device already opened */
-       IDE_AFLAG_BUSY                  = (1 << 23),
+       IDE_AFLAG_BUSY                  = (1 << 25),
        /* Attempt to auto-detect the current user block size */
-       IDE_AFLAG_DETECT_BS             = (1 << 24),
+       IDE_AFLAG_DETECT_BS             = (1 << 26),
        /* Currently on a filemark */
-       IDE_AFLAG_FILEMARK              = (1 << 25),
+       IDE_AFLAG_FILEMARK              = (1 << 27),
        /* 0 = no tape is loaded, so we don't rewind after ejecting */
-       IDE_AFLAG_MEDIUM_PRESENT        = (1 << 26),
+       IDE_AFLAG_MEDIUM_PRESENT        = (1 << 28),
 
-       IDE_AFLAG_NO_AUTOCLOSE          = (1 << 27),
+       IDE_AFLAG_NO_AUTOCLOSE          = (1 << 29),
 };
 
 struct ide_drive_s {