DPRINT("Disk type is undefined after "
"disk change\n");
current_type[drive] = NULL;
- floppy_sizes[TOMINOR(drive)] = MAX_DISK_SIZE;
+ floppy_sizes[TOMINOR(drive)] = MAX_DISK_SIZE << 1;
}
/*USETF(FD_DISK_NEWCHANGE);*/
return;
}
current_type[current_drive] = _floppy;
- floppy_sizes[TOMINOR(current_drive) ]=
- (_floppy->size+1)>>1;
+ floppy_sizes[TOMINOR(current_drive) ]= _floppy->size;
break;
}
DPRINT("Auto-detected floppy type %s in fd%d\n",
_floppy->name,current_drive);
current_type[current_drive] = _floppy;
- floppy_sizes[TOMINOR(current_drive)] = (_floppy->size+1) >> 1;
+ floppy_sizes[TOMINOR(current_drive)] = _floppy->size;
probing = 0;
}
floppy_type[type].name="user format";
for (cnt = type << 2; cnt < (type << 2) + 4; cnt++)
floppy_sizes[cnt]= floppy_sizes[cnt+0x80]=
- (floppy_type[type].size+1)>>1;
+ floppy_type[type].size+1;
process_fd_request();
for (cnt = 0; cnt < N_DRIVE; cnt++){
if (ITYPE(drive_state[cnt].fd_device) == type &&
if (buffer_drive == drive)
SUPBOUND(buffer_max, user_params[drive].sect);
current_type[drive] = &user_params[drive];
- floppy_sizes[drive] = (user_params[drive].size+1) >> 1;
+ floppy_sizes[drive] = user_params[drive].size;
if (cmd == FDDEFPRM)
DRS->keep_data = -1;
else
case FDCLRPRM:
LOCK_FDC(drive,1);
current_type[drive] = NULL;
- floppy_sizes[drive] = MAX_DISK_SIZE;
+ floppy_sizes[drive] = MAX_DISK_SIZE << 1;
UDRS->keep_data = 0;
return invalidate_drive(inode->i_bdev);
case FDSETPRM:
int try;
char *tmp;
- if (!filp) {
- DPRINT("Weird, open called with filp=0\n");
- return -EIO;
- }
-
filp->private_data = (void*) 0;
drive = DRIVE(inode->i_rdev);
#define NO_GEOM (!current_type[drive] && !TYPE(dev))
int drive=DRIVE(dev);
int cf;
+ int res = 0;
if (UTESTF(FD_DISK_CHANGED) ||
UTESTF(FD_VERIFY) ||
UDRS->generation++;
if (NO_GEOM){
/* auto-sensing */
- return floppy_read_block_0(dev);
+ res = floppy_read_block_0(dev);
+ } else {
+ if (cf)
+ poll_drive(0, FD_RAW_NEED_DISK);
+ process_fd_request();
}
- if (cf)
- poll_drive(0, FD_RAW_NEED_DISK);
- process_fd_request();
}
set_capacity(&disks[drive], floppy_sizes[minor(dev)]);
- return 0;
+ return res;
}
static struct block_device_operations floppy_fops = {
for (i=0; i<256; i++)
if (ITYPE(i))
- floppy_sizes[i] = (floppy_type[ITYPE(i)].size+1) >> 1;
+ floppy_sizes[i] = floppy_type[ITYPE(i)].size;
else
- floppy_sizes[i] = MAX_DISK_SIZE;
+ floppy_sizes[i] = MAX_DISK_SIZE << 1;
blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), do_fd_request, &floppy_lock);
reschedule_timeout(MAXTIMEOUT, "floppy init", MAXTIMEOUT);