* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl
@ 2001-09-04 21:43 Andries.Brouwer
2001-09-04 22:27 ` Ben LaHaise
0 siblings, 1 reply; 9+ messages in thread
From: Andries.Brouwer @ 2001-09-04 21:43 UTC (permalink / raw)
To: Andries.Brouwer, bcrl; +Cc: linux-kernel, torvalds
From bcrl@redhat.com Tue Sep 4 22:54:05 2001
On Tue, 4 Sep 2001 Andries.Brouwer@cwi.nl wrote:
> Then I am happy (as long as you don't take a reserved number).
So the patch below is okay?
Roughly speaking, yes.
(But why do you insist on using 110?
I wrote "A jump here: 108-111 have been used" because that is
what I recall: three groups using 108-109 and one shifting to
110-111. I have no details, so may misremember, but still..)
Andries
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl 2001-09-04 21:43 [resend PATCH] reserve BLKGETSIZE64 ioctl Andries.Brouwer @ 2001-09-04 22:27 ` Ben LaHaise 0 siblings, 0 replies; 9+ messages in thread From: Ben LaHaise @ 2001-09-04 22:27 UTC (permalink / raw) To: Andries.Brouwer; +Cc: linux-kernel, torvalds On Tue, 4 Sep 2001 Andries.Brouwer@cwi.nl wrote: > Roughly speaking, yes. > > (But why do you insist on using 110? That was what I'd changed to after the 108-109 conflict. > I wrote "A jump here: 108-111 have been used" because that is > what I recall: three groups using 108-109 and one shifting to > 110-111. I have no details, so may misremember, but still..) In case it wasn't me, here it is again using 114. I hope I never have to diff this patch again. -ben diff -urN v2.4.10-pre4/drivers/acorn/block/mfmhd.c work-v2.4.10-pre4/drivers/acorn/block/mfmhd.c --- v2.4.10-pre4/drivers/acorn/block/mfmhd.c Thu Aug 16 16:58:44 2001 +++ work-v2.4.10-pre4/drivers/acorn/block/mfmhd.c Tue Sep 4 18:17:42 2001 @@ -1210,6 +1210,8 @@ case BLKGETSIZE: return put_user (mfm[minor].nr_sects, (long *)arg); + case BLKGETSIZE64: + return put_user ((u64)mfm[minor].nr_sects << 9, (u64 *)arg); case BLKFRASET: if (!capable(CAP_SYS_ADMIN)) diff -urN v2.4.10-pre4/drivers/block/DAC960.c work-v2.4.10-pre4/drivers/block/DAC960.c --- v2.4.10-pre4/drivers/block/DAC960.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/DAC960.c Tue Sep 4 18:17:42 2001 @@ -5090,10 +5090,12 @@ sizeof(DiskGeometry_T)) ? -EFAULT : 0); case BLKGETSIZE: /* Get Device Size. */ - if ((long *) Argument == NULL) return -EINVAL; return put_user(Controller->GenericDiskInfo.part[MINOR(Inode->i_rdev)] .nr_sects, (long *) Argument); + case BLKGETSIZE64: + return put_user((u64)Controller->GenericDiskInfo.part[MINOR(Inode->i_rdev)].nr_sects << 9, + (u64 *) Argument); case BLKRAGET: case BLKRASET: case BLKFLSBUF: diff -urN v2.4.10-pre4/drivers/block/acsi.c work-v2.4.10-pre4/drivers/block/acsi.c --- v2.4.10-pre4/drivers/block/acsi.c Thu Aug 16 16:58:44 2001 +++ work-v2.4.10-pre4/drivers/block/acsi.c Tue Sep 4 18:17:42 2001 @@ -1138,6 +1138,10 @@ return put_user(acsi_part[MINOR(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: /* Return device size */ + return put_user((u64)acsi_part[MINOR(inode->i_rdev)].nr_sects << 9, + (u64 *) arg); + case BLKROSET: case BLKROGET: case BLKFLSBUF: diff -urN v2.4.10-pre4/drivers/block/amiflop.c work-v2.4.10-pre4/drivers/block/amiflop.c --- v2.4.10-pre4/drivers/block/amiflop.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/block/amiflop.c Tue Sep 4 18:17:42 2001 @@ -1556,6 +1556,9 @@ case BLKGETSIZE: return put_user(unit[drive].blocks,(long *)param); break; + case BLKGETSIZE64: + return put_user((u64)unit[drive].blocks << 9, (u64 *)param); + break; case FDSETPRM: case FDDEFPRM: return -EINVAL; diff -urN v2.4.10-pre4/drivers/block/blkpg.c work-v2.4.10-pre4/drivers/block/blkpg.c --- v2.4.10-pre4/drivers/block/blkpg.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/blkpg.c Tue Sep 4 18:17:42 2001 @@ -250,6 +250,7 @@ case BLKGETSIZE: /* Today get_gendisk() requires a linear scan; add this when dev has pointer type. */ + /* add BLKGETSIZE64 too */ g = get_gendisk(dev); if (!g) longval = 0; diff -urN v2.4.10-pre4/drivers/block/cciss.c work-v2.4.10-pre4/drivers/block/cciss.c --- v2.4.10-pre4/drivers/block/cciss.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/cciss.c Tue Sep 4 18:17:42 2001 @@ -400,8 +400,10 @@ put_user(hba[ctlr]->hd[MINOR(inode->i_rdev)].start_sect, &geo->start); return 0; case BLKGETSIZE: - if (!arg) return -EINVAL; put_user(hba[ctlr]->hd[MINOR(inode->i_rdev)].nr_sects, (long*)arg); + return 0; + case BLKGETSIZE64: + put_user((u64)hba[ctlr]->hd[MINOR(inode->i_rdev)].nr_sects << 9, (u64*)arg); return 0; case BLKRRPART: return revalidate_logvol(inode->i_rdev, 1); diff -urN v2.4.10-pre4/drivers/block/cpqarray.c work-v2.4.10-pre4/drivers/block/cpqarray.c --- v2.4.10-pre4/drivers/block/cpqarray.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/cpqarray.c Tue Sep 4 18:17:42 2001 @@ -1227,9 +1227,9 @@ case IDAGETDRVINFO: return copy_to_user(&io->c.drv,&hba[ctlr]->drv[dsk],sizeof(drv_info_t)); case BLKGETSIZE: - if (!arg) return -EINVAL; - put_user(ida[(ctlr<<CTLR_SHIFT)+MINOR(inode->i_rdev)].nr_sects, (long*)arg); - return 0; + return put_user(ida[(ctlr<<CTLR_SHIFT)+MINOR(inode->i_rdev)].nr_sects, (long*)arg); + case BLKGETSIZE64: + return put_user((u64)(ida[(ctlr<<CTLR_SHIFT)+MINOR(inode->i_rdev)].nr_sects) << 9, (u64*)arg); case BLKRRPART: return revalidate_logvol(inode->i_rdev, 1); case IDAPASSTHRU: diff -urN v2.4.10-pre4/drivers/block/floppy.c work-v2.4.10-pre4/drivers/block/floppy.c --- v2.4.10-pre4/drivers/block/floppy.c Mon Aug 13 15:12:07 2001 +++ work-v2.4.10-pre4/drivers/block/floppy.c Tue Sep 4 18:17:42 2001 @@ -3492,6 +3492,10 @@ case BLKGETSIZE: ECALL(get_floppy_geometry(drive, type, &g)); return put_user(g->size, (long *) param); + + case BLKGETSIZE64: + ECALL(get_floppy_geometry(drive, type, &g)); + return put_user((u64)g->size << 9, (u64 *) param); /* BLKRRPART is not defined as floppies don't have * partition tables */ } diff -urN v2.4.10-pre4/drivers/block/loop.c work-v2.4.10-pre4/drivers/block/loop.c --- v2.4.10-pre4/drivers/block/loop.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/loop.c Tue Sep 4 18:17:42 2001 @@ -849,11 +849,14 @@ err = -ENXIO; break; } - if (!arg) { - err = -EINVAL; + err = put_user(loop_sizes[lo->lo_number] << 1, (long *) arg); + break; + case BLKGETSIZE64: + if (lo->lo_state != Lo_bound) { + err = -ENXIO; break; } - err = put_user(loop_sizes[lo->lo_number] << 1, (long *) arg); + err = put_user((u64)loop_sizes[lo->lo_number] << 10, (u64*)arg); break; case BLKBSZGET: case BLKBSZSET: diff -urN v2.4.10-pre4/drivers/block/nbd.c work-v2.4.10-pre4/drivers/block/nbd.c --- v2.4.10-pre4/drivers/block/nbd.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/block/nbd.c Tue Sep 4 18:17:42 2001 @@ -446,6 +446,8 @@ #endif case BLKGETSIZE: return put_user(nbd_bytesizes[dev] >> 9, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)nbd_bytesizes[dev], (u64 *) arg); } return -EINVAL; } diff -urN v2.4.10-pre4/drivers/block/paride/pd.c work-v2.4.10-pre4/drivers/block/paride/pd.c --- v2.4.10-pre4/drivers/block/paride/pd.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/block/paride/pd.c Tue Sep 4 18:17:42 2001 @@ -535,6 +535,8 @@ if (err) return (err); put_user(pd_hd[dev].nr_sects,(long *) arg); return (0); + case BLKGETSIZE64: + return put_user((u64)pd_hd[dev].nr_sects << 9, (u64 *)arg); case BLKRRPART: if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/block/paride/pf.c work-v2.4.10-pre4/drivers/block/paride/pf.c --- v2.4.10-pre4/drivers/block/paride/pf.c Mon Feb 26 10:20:05 2001 +++ work-v2.4.10-pre4/drivers/block/paride/pf.c Tue Sep 4 18:17:42 2001 @@ -482,11 +482,9 @@ put_user(0,(long *)&geo->start); return 0; case BLKGETSIZE: - if (!arg) return -EINVAL; - err = verify_area(VERIFY_WRITE,(long *) arg,sizeof(long)); - if (err) return (err); - put_user(PF.capacity,(long *) arg); - return (0); + return put_user(PF.capacity,(long *) arg); + case BLKGETSIZE64: + return put_user((u64)PF.capacity << 9,(u64 *)arg); case BLKROSET: case BLKROGET: case BLKRASET: diff -urN v2.4.10-pre4/drivers/block/ps2esdi.c work-v2.4.10-pre4/drivers/block/ps2esdi.c --- v2.4.10-pre4/drivers/block/ps2esdi.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/ps2esdi.c Tue Sep 4 18:17:42 2001 @@ -1117,6 +1117,9 @@ } break; + case BLKGETSIZE64: + return put_user((u64)ps2esdi[MINOR(inode->i_rdev)].nr_sects << 9, (u64 *) arg); + case BLKRRPART: if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/block/rd.c work-v2.4.10-pre4/drivers/block/rd.c --- v2.4.10-pre4/drivers/block/rd.c Sun Jul 22 19:17:15 2001 +++ work-v2.4.10-pre4/drivers/block/rd.c Tue Sep 4 18:17:42 2001 @@ -269,6 +269,9 @@ if (!arg) return -EINVAL; return put_user(rd_kbsize[minor] << 1, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)rd_kbsize[minor] << 10, (u64*)arg); + case BLKROSET: case BLKROGET: case BLKSSZGET: diff -urN v2.4.10-pre4/drivers/block/xd.c work-v2.4.10-pre4/drivers/block/xd.c --- v2.4.10-pre4/drivers/block/xd.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/block/xd.c Tue Sep 4 18:17:42 2001 @@ -339,6 +339,8 @@ case BLKGETSIZE: if (!arg) return -EINVAL; return put_user(xd_struct[MINOR(inode->i_rdev)].nr_sects,(long *) arg); + case BLKGETSIZE64: + return put_user((u64)xd_struct[MINOR(inode->i_rdev)].nr_sects << 9, (u64 *)arg); case HDIO_SET_DMA: if (!capable(CAP_SYS_ADMIN)) return -EACCES; if (xdc_busy) return -EBUSY; diff -urN v2.4.10-pre4/drivers/i2o/i2o_block.c work-v2.4.10-pre4/drivers/i2o/i2o_block.c --- v2.4.10-pre4/drivers/i2o/i2o_block.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/i2o/i2o_block.c Tue Sep 4 18:17:42 2001 @@ -1141,6 +1141,8 @@ switch (cmd) { case BLKGETSIZE: return put_user(i2ob[minor].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)i2ob[minor].nr_sects << 9, (u64 *)arg); case HDIO_GETGEO: { diff -urN v2.4.10-pre4/drivers/ide/hd.c work-v2.4.10-pre4/drivers/ide/hd.c --- v2.4.10-pre4/drivers/ide/hd.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/ide/hd.c Tue Sep 4 18:17:42 2001 @@ -639,9 +639,11 @@ } case BLKGETSIZE: /* Return device size */ - if (!arg) return -EINVAL; return put_user(hd[MINOR(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)hd[MINOR(inode->i_rdev)].nr_sects << 9, + (u64 *) arg); case BLKRRPART: /* Re-read partition tables */ if (!capable(CAP_SYS_ADMIN)) diff -urN v2.4.10-pre4/drivers/ide/ide.c work-v2.4.10-pre4/drivers/ide/ide.c --- v2.4.10-pre4/drivers/ide/ide.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/ide/ide.c Tue Sep 4 18:17:42 2001 @@ -2663,6 +2663,8 @@ case BLKGETSIZE: /* Return device size */ return put_user(drive->part[MINOR(inode->i_rdev)&PARTN_MASK].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)drive->part[MINOR(inode->i_rdev)&PARTN_MASK].nr_sects << 9, (u64 *) arg); case BLKRRPART: /* Re-read partition tables */ if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/md/lvm.c work-v2.4.10-pre4/drivers/md/lvm.c --- v2.4.10-pre4/drivers/md/lvm.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/md/lvm.c Tue Sep 4 18:17:42 2001 @@ -906,6 +906,11 @@ return -EFAULT; break; + case BLKGETSIZE64: + if (put_user((u64)lv_ptr->lv_size << 9, (u64 *)arg)) + return -EFAULT; + break; + case BLKFLSBUF: /* flush buffer cache */ diff -urN v2.4.10-pre4/drivers/md/md.c work-v2.4.10-pre4/drivers/md/md.c --- v2.4.10-pre4/drivers/md/md.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/md/md.c Tue Sep 4 18:17:42 2001 @@ -2490,6 +2490,11 @@ (long *) arg); goto done; + case BLKGETSIZE64: /* Return device size */ + err = md_put_user((u64)md_hd_struct[minor].nr_sects << 9, + (u64 *) arg); + goto done; + case BLKRAGET: case BLKRASET: case BLKFLSBUF: diff -urN v2.4.10-pre4/drivers/mtd/ftl.c work-v2.4.10-pre4/drivers/mtd/ftl.c --- v2.4.10-pre4/drivers/mtd/ftl.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/mtd/ftl.c Tue Sep 4 18:17:42 2001 @@ -1174,10 +1174,10 @@ put_user(ftl_hd[minor].start_sect, (u_long *)&geo->start); break; case BLKGETSIZE: - ret = verify_area(VERIFY_WRITE, (long *)arg, sizeof(long)); - if (ret) return ret; - put_user(ftl_hd[minor].nr_sects, - (long *)arg); + ret = put_user(ftl_hd[minor].nr_sects, (long *)arg); + break; + case BLKGETSIZE64: + ret = put_user((u64)ftl_hd[minor].nr_sects << 9, (u64 *)arg); break; case BLKRRPART: ret = ftl_reread_partitions(minor); diff -urN v2.4.10-pre4/drivers/mtd/mtdblock.c work-v2.4.10-pre4/drivers/mtd/mtdblock.c --- v2.4.10-pre4/drivers/mtd/mtdblock.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/mtd/mtdblock.c Tue Sep 4 18:17:42 2001 @@ -529,10 +529,9 @@ switch (cmd) { case BLKGETSIZE: /* Return device size */ - if (!arg) - return -EFAULT; - return put_user((mtdblk->mtd->size >> 9), - (long *) arg)?-EFAULT:0; + return put_user((mtdblk->mtd->size >> 9), (long *) arg); + case BLKGETSIZE64: + return put_user((u64)mtdblk->mtd->size, (u64 *)arg); case BLKFLSBUF: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) diff -urN v2.4.10-pre4/drivers/mtd/mtdblock_ro.c work-v2.4.10-pre4/drivers/mtd/mtdblock_ro.c --- v2.4.10-pre4/drivers/mtd/mtdblock_ro.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/mtd/mtdblock_ro.c Tue Sep 4 18:17:42 2001 @@ -211,9 +211,9 @@ switch (cmd) { case BLKGETSIZE: /* Return device size */ - if (!arg) return -EFAULT; - return Put_user((mtd->size >> 9), - (long *) arg); + return put_user((mtd->size >> 9), (long *) arg); + case BLKGETSIZE64: + return put_user((u64)mtd->size, (u64 *)arg); case BLKFLSBUF: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) diff -urN v2.4.10-pre4/drivers/mtd/nftlcore.c work-v2.4.10-pre4/drivers/mtd/nftlcore.c --- v2.4.10-pre4/drivers/mtd/nftlcore.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/mtd/nftlcore.c Tue Sep 4 18:17:42 2001 @@ -791,9 +791,11 @@ return copy_to_user((void *)arg, &g, sizeof g) ? -EFAULT : 0; } case BLKGETSIZE: /* Return device size */ - if (!arg) return -EINVAL; return put_user(part_table[MINOR(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)part_table[MINOR(inode->i_rdev)].nr_sects << 9, + (u64 *)arg); case BLKFLSBUF: if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/s390/block/dasd.c work-v2.4.10-pre4/drivers/s390/block/dasd.c --- v2.4.10-pre4/drivers/s390/block/dasd.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/s390/block/dasd.c Tue Sep 4 18:17:42 2001 @@ -2189,11 +2189,13 @@ case BLKGETSIZE:{ /* Return device size */ long blocks = major_info->gendisk.sizes [MINOR (inp->i_rdev)] << 1; - rc = - copy_to_user ((long *) data, &blocks, - sizeof (long)); - if (rc) - rc = -EFAULT; + rc = put_user(blocks, (long *)arg); + break; + } + case BLKGETSIZE64:{ + u64 blocks = major_info->gendisk.sizes + [MINOR (inp->i_rdev)]; + rc = put_user(blocks << 10, (u64 *)arg); break; } case BLKRRPART:{ diff -urN v2.4.10-pre4/drivers/s390/block/xpram.c work-v2.4.10-pre4/drivers/s390/block/xpram.c --- v2.4.10-pre4/drivers/s390/block/xpram.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/s390/block/xpram.c Tue Sep 4 18:17:42 2001 @@ -647,14 +647,14 @@ case BLKGETSIZE: /* 0x1260 */ /* Return the device size, expressed in sectors */ - if (!arg) return -EINVAL; /* NULL pointer: not valid */ - err= 0; /* verify_area_20(VERIFY_WRITE, (long *) arg, sizeof(long)); - * if (err) return err; - */ - put_user ( 1024* xpram_sizes[MINOR(inode->i_rdev)] + return put_user( 1024* xpram_sizes[MINOR(inode->i_rdev)] / XPRAM_SOFTSECT, (long *) arg); - return 0; + + case BLKGETSIZE64: + return put_user( (u64)(1024* xpram_sizes[MINOR(inode->i_rdev)] + / XPRAM_SOFTSECT) << 9, + (u64 *) arg); case BLKFLSBUF: /* flush, 0x1261 */ fsync_dev(inode->i_rdev); diff -urN v2.4.10-pre4/drivers/sbus/char/jsflash.c work-v2.4.10-pre4/drivers/sbus/char/jsflash.c --- v2.4.10-pre4/drivers/sbus/char/jsflash.c Mon Feb 26 10:20:10 2001 +++ work-v2.4.10-pre4/drivers/sbus/char/jsflash.c Tue Sep 4 18:17:42 2001 @@ -454,6 +454,8 @@ switch (cmd) { case BLKGETSIZE: return put_user(jsfd_bytesizes[dev] >> 9, (long *) arg); + case BLKGETSIZE64: + return put_user(jsfd_bytesizes[dev], (u64 *) arg); #if 0 case BLKROSET: diff -urN v2.4.10-pre4/drivers/scsi/sd.c work-v2.4.10-pre4/drivers/scsi/sd.c --- v2.4.10-pre4/drivers/scsi/sd.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/scsi/sd.c Tue Sep 4 18:17:42 2001 @@ -227,9 +227,9 @@ return 0; } case BLKGETSIZE: /* Return device size */ - if (!arg) - return -EINVAL; return put_user(sd[SD_PARTITION(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)sd[SD_PARTITION(inode->i_rdev)].nr_sects << 9, (u64 *)arg); case BLKROSET: case BLKROGET: diff -urN v2.4.10-pre4/drivers/scsi/sr_ioctl.c work-v2.4.10-pre4/drivers/scsi/sr_ioctl.c --- v2.4.10-pre4/drivers/scsi/sr_ioctl.c Thu Aug 16 16:58:47 2001 +++ work-v2.4.10-pre4/drivers/scsi/sr_ioctl.c Tue Sep 4 18:17:42 2001 @@ -546,6 +546,8 @@ switch (cmd) { case BLKGETSIZE: return put_user(scsi_CDs[target].capacity, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)scsi_CDs[target].capacity << 9, (u64 *)arg); case BLKROSET: case BLKROGET: case BLKRASET: diff -urN v2.4.10-pre4/include/asm-i386/uaccess.h work-v2.4.10-pre4/include/asm-i386/uaccess.h --- v2.4.10-pre4/include/asm-i386/uaccess.h Tue Sep 4 16:26:04 2001 +++ work-v2.4.10-pre4/include/asm-i386/uaccess.h Tue Sep 4 18:17:42 2001 @@ -126,6 +126,7 @@ extern void __put_user_1(void); extern void __put_user_2(void); extern void __put_user_4(void); +extern void __put_user_8(void); extern void __put_user_bad(void); @@ -161,6 +162,13 @@ case 1: __put_user_asm(x,ptr,retval,"b","b","iq"); break; \ case 2: __put_user_asm(x,ptr,retval,"w","w","ir"); break; \ case 4: __put_user_asm(x,ptr,retval,"l","","ir"); break; \ + case 8: { \ + u32 *__put_ptr = (void*)(ptr); \ + u64 __put_val = (x); \ + __put_user_asm((u32)__put_val,__put_ptr,retval,"l","","ir"); \ + __put_user_asm((u32)(__put_val>>32),__put_ptr+1,retval,"l","","ir"); \ + break; \ + } \ default: __put_user_bad(); \ } \ } while (0) diff -urN v2.4.10-pre4/include/linux/fs.h work-v2.4.10-pre4/include/linux/fs.h --- v2.4.10-pre4/include/linux/fs.h Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/include/linux/fs.h Tue Sep 4 18:18:22 2001 @@ -166,7 +166,7 @@ #define BLKROSET _IO(0x12,93) /* set device read-only (0 = read-write) */ #define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */ #define BLKRRPART _IO(0x12,95) /* re-read partition table */ -#define BLKGETSIZE _IO(0x12,96) /* return device size */ +#define BLKGETSIZE _IO(0x12,96) /* return device size /512 (long *arg) */ #define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */ #define BLKRASET _IO(0x12,98) /* Set read ahead for block device */ #define BLKRAGET _IO(0x12,99) /* get current read ahead setting */ @@ -185,6 +185,7 @@ /* A jump here: 108-111 have been used for various private purposes. */ #define BLKBSZGET _IOR(0x12,112,sizeof(int)) #define BLKBSZSET _IOW(0x12,113,sizeof(int)) +#define BLKGETSIZE64 _IOR(0x12,114,sizeof(u64)) /* return device size in bytes (u64 *arg) */ #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl @ 2001-09-04 13:50 Andries.Brouwer 2001-09-04 20:54 ` Ben LaHaise 0 siblings, 1 reply; 9+ messages in thread From: Andries.Brouwer @ 2001-09-04 13:50 UTC (permalink / raw) To: Andries.Brouwer, bcrl; +Cc: linux-kernel, torvalds >> Soon we'll all need a BLKGETSIZE64 ioctl, that gives >> the size of a block device in bytes. > I'd accepted that suggestion Then I am happy (as long as you don't take a reserved number). Concerning policy, of course that is up to Linus - for myself I would prefer adding a well-motivated ioctl above reserving a number. After all, an ioctl is almost always about transporting some small amount of information, hence is implemented by a dozen lines of code or so, clean, and without impact on the rest of the kernel, so if it is going to be added eventually it might as well be added immediately. So, until Linus says otherwise, you might try once or twice to submit the actual ioctl instead of just the reservation. Andries ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl 2001-09-04 13:50 Andries.Brouwer @ 2001-09-04 20:54 ` Ben LaHaise 0 siblings, 0 replies; 9+ messages in thread From: Ben LaHaise @ 2001-09-04 20:54 UTC (permalink / raw) To: Andries.Brouwer; +Cc: linux-kernel, torvalds On Tue, 4 Sep 2001 Andries.Brouwer@cwi.nl wrote: > Then I am happy (as long as you don't take a reserved number). So the patch below is okay? > So, until Linus says otherwise, you might try once or twice > to submit the actual ioctl instead of just the reservation. Linus, comments? -ben ...blkgetsize64-4.diff... diff -urN v2.4.10-pre4/drivers/acorn/block/mfmhd.c work-v2.4.10-pre4/drivers/acorn/block/mfmhd.c --- v2.4.10-pre4/drivers/acorn/block/mfmhd.c Thu Aug 16 16:58:44 2001 +++ work-v2.4.10-pre4/drivers/acorn/block/mfmhd.c Tue Sep 4 16:01:24 2001 @@ -1210,6 +1210,8 @@ case BLKGETSIZE: return put_user (mfm[minor].nr_sects, (long *)arg); + case BLKGETSIZE64: + return put_user ((u64)mfm[minor].nr_sects << 9, (u64 *)arg); case BLKFRASET: if (!capable(CAP_SYS_ADMIN)) diff -urN v2.4.10-pre4/drivers/block/DAC960.c work-v2.4.10-pre4/drivers/block/DAC960.c --- v2.4.10-pre4/drivers/block/DAC960.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/DAC960.c Tue Sep 4 15:35:04 2001 @@ -5090,10 +5090,12 @@ sizeof(DiskGeometry_T)) ? -EFAULT : 0); case BLKGETSIZE: /* Get Device Size. */ - if ((long *) Argument == NULL) return -EINVAL; return put_user(Controller->GenericDiskInfo.part[MINOR(Inode->i_rdev)] .nr_sects, (long *) Argument); + case BLKGETSIZE64: + return put_user((u64)Controller->GenericDiskInfo.part[MINOR(Inode->i_rdev)].nr_sects << 9, + (u64 *) Argument); case BLKRAGET: case BLKRASET: case BLKFLSBUF: diff -urN v2.4.10-pre4/drivers/block/acsi.c work-v2.4.10-pre4/drivers/block/acsi.c --- v2.4.10-pre4/drivers/block/acsi.c Thu Aug 16 16:58:44 2001 +++ work-v2.4.10-pre4/drivers/block/acsi.c Tue Sep 4 15:29:44 2001 @@ -1138,6 +1138,10 @@ return put_user(acsi_part[MINOR(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: /* Return device size */ + return put_user((u64)acsi_part[MINOR(inode->i_rdev)].nr_sects << 9, + (u64 *) arg); + case BLKROSET: case BLKROGET: case BLKFLSBUF: diff -urN v2.4.10-pre4/drivers/block/amiflop.c work-v2.4.10-pre4/drivers/block/amiflop.c --- v2.4.10-pre4/drivers/block/amiflop.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/block/amiflop.c Tue Sep 4 15:55:32 2001 @@ -1556,6 +1556,9 @@ case BLKGETSIZE: return put_user(unit[drive].blocks,(long *)param); break; + case BLKGETSIZE64: + return put_user((u64)unit[drive].blocks << 9, (u64 *)param); + break; case FDSETPRM: case FDDEFPRM: return -EINVAL; diff -urN v2.4.10-pre4/drivers/block/blkpg.c work-v2.4.10-pre4/drivers/block/blkpg.c --- v2.4.10-pre4/drivers/block/blkpg.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/blkpg.c Tue Sep 4 15:31:14 2001 @@ -250,6 +250,7 @@ case BLKGETSIZE: /* Today get_gendisk() requires a linear scan; add this when dev has pointer type. */ + /* add BLKGETSIZE64 too */ g = get_gendisk(dev); if (!g) longval = 0; diff -urN v2.4.10-pre4/drivers/block/cciss.c work-v2.4.10-pre4/drivers/block/cciss.c --- v2.4.10-pre4/drivers/block/cciss.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/cciss.c Tue Sep 4 15:31:57 2001 @@ -400,8 +400,10 @@ put_user(hba[ctlr]->hd[MINOR(inode->i_rdev)].start_sect, &geo->start); return 0; case BLKGETSIZE: - if (!arg) return -EINVAL; put_user(hba[ctlr]->hd[MINOR(inode->i_rdev)].nr_sects, (long*)arg); + return 0; + case BLKGETSIZE64: + put_user((u64)hba[ctlr]->hd[MINOR(inode->i_rdev)].nr_sects << 9, (u64*)arg); return 0; case BLKRRPART: return revalidate_logvol(inode->i_rdev, 1); diff -urN v2.4.10-pre4/drivers/block/cpqarray.c work-v2.4.10-pre4/drivers/block/cpqarray.c --- v2.4.10-pre4/drivers/block/cpqarray.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/cpqarray.c Tue Sep 4 15:34:07 2001 @@ -1227,9 +1227,9 @@ case IDAGETDRVINFO: return copy_to_user(&io->c.drv,&hba[ctlr]->drv[dsk],sizeof(drv_info_t)); case BLKGETSIZE: - if (!arg) return -EINVAL; - put_user(ida[(ctlr<<CTLR_SHIFT)+MINOR(inode->i_rdev)].nr_sects, (long*)arg); - return 0; + return put_user(ida[(ctlr<<CTLR_SHIFT)+MINOR(inode->i_rdev)].nr_sects, (long*)arg); + case BLKGETSIZE64: + return put_user((u64)(ida[(ctlr<<CTLR_SHIFT)+MINOR(inode->i_rdev)].nr_sects) << 9, (u64*)arg); case BLKRRPART: return revalidate_logvol(inode->i_rdev, 1); case IDAPASSTHRU: diff -urN v2.4.10-pre4/drivers/block/floppy.c work-v2.4.10-pre4/drivers/block/floppy.c --- v2.4.10-pre4/drivers/block/floppy.c Mon Aug 13 15:12:07 2001 +++ work-v2.4.10-pre4/drivers/block/floppy.c Tue Sep 4 15:36:00 2001 @@ -3492,6 +3492,10 @@ case BLKGETSIZE: ECALL(get_floppy_geometry(drive, type, &g)); return put_user(g->size, (long *) param); + + case BLKGETSIZE64: + ECALL(get_floppy_geometry(drive, type, &g)); + return put_user((u64)g->size << 9, (u64 *) param); /* BLKRRPART is not defined as floppies don't have * partition tables */ } diff -urN v2.4.10-pre4/drivers/block/loop.c work-v2.4.10-pre4/drivers/block/loop.c --- v2.4.10-pre4/drivers/block/loop.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/loop.c Tue Sep 4 15:37:35 2001 @@ -849,11 +849,14 @@ err = -ENXIO; break; } - if (!arg) { - err = -EINVAL; + err = put_user(loop_sizes[lo->lo_number] << 1, (long *) arg); + break; + case BLKGETSIZE64: + if (lo->lo_state != Lo_bound) { + err = -ENXIO; break; } - err = put_user(loop_sizes[lo->lo_number] << 1, (long *) arg); + err = put_user((u64)loop_sizes[lo->lo_number] << 10, (u64*)arg); break; case BLKBSZGET: case BLKBSZSET: diff -urN v2.4.10-pre4/drivers/block/nbd.c work-v2.4.10-pre4/drivers/block/nbd.c --- v2.4.10-pre4/drivers/block/nbd.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/block/nbd.c Tue Sep 4 15:38:33 2001 @@ -446,6 +446,8 @@ #endif case BLKGETSIZE: return put_user(nbd_bytesizes[dev] >> 9, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)nbd_bytesizes[dev], (u64 *) arg); } return -EINVAL; } diff -urN v2.4.10-pre4/drivers/block/paride/pd.c work-v2.4.10-pre4/drivers/block/paride/pd.c --- v2.4.10-pre4/drivers/block/paride/pd.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/block/paride/pd.c Tue Sep 4 15:44:19 2001 @@ -535,6 +535,8 @@ if (err) return (err); put_user(pd_hd[dev].nr_sects,(long *) arg); return (0); + case BLKGETSIZE64: + return put_user((u64)pd_hd[dev].nr_sects << 9, (u64 *)arg); case BLKRRPART: if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/block/paride/pf.c work-v2.4.10-pre4/drivers/block/paride/pf.c --- v2.4.10-pre4/drivers/block/paride/pf.c Mon Feb 26 10:20:05 2001 +++ work-v2.4.10-pre4/drivers/block/paride/pf.c Tue Sep 4 15:45:09 2001 @@ -482,11 +482,9 @@ put_user(0,(long *)&geo->start); return 0; case BLKGETSIZE: - if (!arg) return -EINVAL; - err = verify_area(VERIFY_WRITE,(long *) arg,sizeof(long)); - if (err) return (err); - put_user(PF.capacity,(long *) arg); - return (0); + return put_user(PF.capacity,(long *) arg); + case BLKGETSIZE64: + return put_user((u64)PF.capacity << 9,(u64 *)arg); case BLKROSET: case BLKROGET: case BLKRASET: diff -urN v2.4.10-pre4/drivers/block/ps2esdi.c work-v2.4.10-pre4/drivers/block/ps2esdi.c --- v2.4.10-pre4/drivers/block/ps2esdi.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/block/ps2esdi.c Tue Sep 4 15:39:39 2001 @@ -1117,6 +1117,9 @@ } break; + case BLKGETSIZE64: + return put_user((u64)ps2esdi[MINOR(inode->i_rdev)].nr_sects << 9, (u64 *) arg); + case BLKRRPART: if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/block/rd.c work-v2.4.10-pre4/drivers/block/rd.c --- v2.4.10-pre4/drivers/block/rd.c Sun Jul 22 19:17:15 2001 +++ work-v2.4.10-pre4/drivers/block/rd.c Tue Sep 4 15:40:22 2001 @@ -269,6 +269,9 @@ if (!arg) return -EINVAL; return put_user(rd_kbsize[minor] << 1, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)rd_kbsize[minor] << 10, (u64*)arg); + case BLKROSET: case BLKROGET: case BLKSSZGET: diff -urN v2.4.10-pre4/drivers/block/xd.c work-v2.4.10-pre4/drivers/block/xd.c --- v2.4.10-pre4/drivers/block/xd.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/block/xd.c Tue Sep 4 15:41:15 2001 @@ -339,6 +339,8 @@ case BLKGETSIZE: if (!arg) return -EINVAL; return put_user(xd_struct[MINOR(inode->i_rdev)].nr_sects,(long *) arg); + case BLKGETSIZE64: + return put_user((u64)xd_struct[MINOR(inode->i_rdev)].nr_sects << 9, (u64 *)arg); case HDIO_SET_DMA: if (!capable(CAP_SYS_ADMIN)) return -EACCES; if (xdc_busy) return -EBUSY; diff -urN v2.4.10-pre4/drivers/i2o/i2o_block.c work-v2.4.10-pre4/drivers/i2o/i2o_block.c --- v2.4.10-pre4/drivers/i2o/i2o_block.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/i2o/i2o_block.c Tue Sep 4 15:46:14 2001 @@ -1141,6 +1141,8 @@ switch (cmd) { case BLKGETSIZE: return put_user(i2ob[minor].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)i2ob[minor].nr_sects << 9, (u64 *)arg); case HDIO_GETGEO: { diff -urN v2.4.10-pre4/drivers/ide/hd.c work-v2.4.10-pre4/drivers/ide/hd.c --- v2.4.10-pre4/drivers/ide/hd.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/ide/hd.c Tue Sep 4 15:47:02 2001 @@ -639,9 +639,11 @@ } case BLKGETSIZE: /* Return device size */ - if (!arg) return -EINVAL; return put_user(hd[MINOR(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)hd[MINOR(inode->i_rdev)].nr_sects << 9, + (u64 *) arg); case BLKRRPART: /* Re-read partition tables */ if (!capable(CAP_SYS_ADMIN)) diff -urN v2.4.10-pre4/drivers/ide/ide.c work-v2.4.10-pre4/drivers/ide/ide.c --- v2.4.10-pre4/drivers/ide/ide.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/ide/ide.c Tue Sep 4 15:47:48 2001 @@ -2663,6 +2663,8 @@ case BLKGETSIZE: /* Return device size */ return put_user(drive->part[MINOR(inode->i_rdev)&PARTN_MASK].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)drive->part[MINOR(inode->i_rdev)&PARTN_MASK].nr_sects << 9, (u64 *) arg); case BLKRRPART: /* Re-read partition tables */ if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/md/lvm.c work-v2.4.10-pre4/drivers/md/lvm.c --- v2.4.10-pre4/drivers/md/lvm.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/md/lvm.c Tue Sep 4 15:25:11 2001 @@ -906,6 +906,11 @@ return -EFAULT; break; + case BLKGETSIZE64: + if (put_user((u64)lv_ptr->lv_size << 9, (u64 *)arg)) + return -EFAULT; + break; + case BLKFLSBUF: /* flush buffer cache */ diff -urN v2.4.10-pre4/drivers/md/md.c work-v2.4.10-pre4/drivers/md/md.c --- v2.4.10-pre4/drivers/md/md.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/md/md.c Tue Sep 4 15:24:11 2001 @@ -2490,6 +2490,11 @@ (long *) arg); goto done; + case BLKGETSIZE64: /* Return device size */ + err = md_put_user((u64)md_hd_struct[minor].nr_sects << 9, + (u64 *) arg); + goto done; + case BLKRAGET: case BLKRASET: case BLKFLSBUF: diff -urN v2.4.10-pre4/drivers/mtd/ftl.c work-v2.4.10-pre4/drivers/mtd/ftl.c --- v2.4.10-pre4/drivers/mtd/ftl.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/mtd/ftl.c Tue Sep 4 15:49:54 2001 @@ -1174,10 +1174,10 @@ put_user(ftl_hd[minor].start_sect, (u_long *)&geo->start); break; case BLKGETSIZE: - ret = verify_area(VERIFY_WRITE, (long *)arg, sizeof(long)); - if (ret) return ret; - put_user(ftl_hd[minor].nr_sects, - (long *)arg); + ret = put_user(ftl_hd[minor].nr_sects, (long *)arg); + break; + case BLKGETSIZE64: + ret = put_user((u64)ftl_hd[minor].nr_sects << 9, (u64 *)arg); break; case BLKRRPART: ret = ftl_reread_partitions(minor); diff -urN v2.4.10-pre4/drivers/mtd/mtdblock.c work-v2.4.10-pre4/drivers/mtd/mtdblock.c --- v2.4.10-pre4/drivers/mtd/mtdblock.c Fri May 25 22:48:09 2001 +++ work-v2.4.10-pre4/drivers/mtd/mtdblock.c Tue Sep 4 15:50:51 2001 @@ -529,10 +529,9 @@ switch (cmd) { case BLKGETSIZE: /* Return device size */ - if (!arg) - return -EFAULT; - return put_user((mtdblk->mtd->size >> 9), - (long *) arg)?-EFAULT:0; + return put_user((mtdblk->mtd->size >> 9), (long *) arg); + case BLKGETSIZE64: + return put_user((u64)mtdblk->mtd->size, (u64 *)arg); case BLKFLSBUF: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) diff -urN v2.4.10-pre4/drivers/mtd/mtdblock_ro.c work-v2.4.10-pre4/drivers/mtd/mtdblock_ro.c --- v2.4.10-pre4/drivers/mtd/mtdblock_ro.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/mtd/mtdblock_ro.c Tue Sep 4 15:51:44 2001 @@ -211,9 +211,9 @@ switch (cmd) { case BLKGETSIZE: /* Return device size */ - if (!arg) return -EFAULT; - return Put_user((mtd->size >> 9), - (long *) arg); + return put_user((mtd->size >> 9), (long *) arg); + case BLKGETSIZE64: + return put_user((u64)mtd->size, (u64 *)arg); case BLKFLSBUF: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) diff -urN v2.4.10-pre4/drivers/mtd/nftlcore.c work-v2.4.10-pre4/drivers/mtd/nftlcore.c --- v2.4.10-pre4/drivers/mtd/nftlcore.c Tue Jul 3 21:15:02 2001 +++ work-v2.4.10-pre4/drivers/mtd/nftlcore.c Tue Sep 4 15:52:35 2001 @@ -791,9 +791,11 @@ return copy_to_user((void *)arg, &g, sizeof g) ? -EFAULT : 0; } case BLKGETSIZE: /* Return device size */ - if (!arg) return -EINVAL; return put_user(part_table[MINOR(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)part_table[MINOR(inode->i_rdev)].nr_sects << 9, + (u64 *)arg); case BLKFLSBUF: if (!capable(CAP_SYS_ADMIN)) return -EACCES; diff -urN v2.4.10-pre4/drivers/s390/block/dasd.c work-v2.4.10-pre4/drivers/s390/block/dasd.c --- v2.4.10-pre4/drivers/s390/block/dasd.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/s390/block/dasd.c Tue Sep 4 16:03:31 2001 @@ -2189,11 +2189,13 @@ case BLKGETSIZE:{ /* Return device size */ long blocks = major_info->gendisk.sizes [MINOR (inp->i_rdev)] << 1; - rc = - copy_to_user ((long *) data, &blocks, - sizeof (long)); - if (rc) - rc = -EFAULT; + rc = put_user(blocks, (long *)arg); + break; + } + case BLKGETSIZE64:{ + u64 blocks = major_info->gendisk.sizes + [MINOR (inp->i_rdev)]; + rc = put_user(blocks << 10, (u64 *)arg); break; } case BLKRRPART:{ diff -urN v2.4.10-pre4/drivers/s390/block/xpram.c work-v2.4.10-pre4/drivers/s390/block/xpram.c --- v2.4.10-pre4/drivers/s390/block/xpram.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/s390/block/xpram.c Tue Sep 4 16:07:07 2001 @@ -647,14 +647,14 @@ case BLKGETSIZE: /* 0x1260 */ /* Return the device size, expressed in sectors */ - if (!arg) return -EINVAL; /* NULL pointer: not valid */ - err= 0; /* verify_area_20(VERIFY_WRITE, (long *) arg, sizeof(long)); - * if (err) return err; - */ - put_user ( 1024* xpram_sizes[MINOR(inode->i_rdev)] + return put_user( 1024* xpram_sizes[MINOR(inode->i_rdev)] / XPRAM_SOFTSECT, (long *) arg); - return 0; + + case BLKGETSIZE64: + return put_user( (u64)(1024* xpram_sizes[MINOR(inode->i_rdev)] + / XPRAM_SOFTSECT) << 9, + (u64 *) arg); case BLKFLSBUF: /* flush, 0x1261 */ fsync_dev(inode->i_rdev); diff -urN v2.4.10-pre4/drivers/sbus/char/jsflash.c work-v2.4.10-pre4/drivers/sbus/char/jsflash.c --- v2.4.10-pre4/drivers/sbus/char/jsflash.c Mon Feb 26 10:20:10 2001 +++ work-v2.4.10-pre4/drivers/sbus/char/jsflash.c Tue Sep 4 16:00:40 2001 @@ -454,6 +454,8 @@ switch (cmd) { case BLKGETSIZE: return put_user(jsfd_bytesizes[dev] >> 9, (long *) arg); + case BLKGETSIZE64: + return put_user(jsfd_bytesizes[dev], (u64 *) arg); #if 0 case BLKROSET: diff -urN v2.4.10-pre4/drivers/scsi/sd.c work-v2.4.10-pre4/drivers/scsi/sd.c --- v2.4.10-pre4/drivers/scsi/sd.c Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/drivers/scsi/sd.c Tue Sep 4 15:53:16 2001 @@ -227,9 +227,9 @@ return 0; } case BLKGETSIZE: /* Return device size */ - if (!arg) - return -EINVAL; return put_user(sd[SD_PARTITION(inode->i_rdev)].nr_sects, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)sd[SD_PARTITION(inode->i_rdev)].nr_sects << 9, (u64 *)arg); case BLKROSET: case BLKROGET: diff -urN v2.4.10-pre4/drivers/scsi/sr_ioctl.c work-v2.4.10-pre4/drivers/scsi/sr_ioctl.c --- v2.4.10-pre4/drivers/scsi/sr_ioctl.c Thu Aug 16 16:58:47 2001 +++ work-v2.4.10-pre4/drivers/scsi/sr_ioctl.c Tue Sep 4 15:53:53 2001 @@ -546,6 +546,8 @@ switch (cmd) { case BLKGETSIZE: return put_user(scsi_CDs[target].capacity, (long *) arg); + case BLKGETSIZE64: + return put_user((u64)scsi_CDs[target].capacity << 9, (u64 *)arg); case BLKROSET: case BLKROGET: case BLKRASET: diff -urN v2.4.10-pre4/include/asm-i386/uaccess.h work-v2.4.10-pre4/include/asm-i386/uaccess.h --- v2.4.10-pre4/include/asm-i386/uaccess.h Tue Sep 4 16:26:04 2001 +++ work-v2.4.10-pre4/include/asm-i386/uaccess.h Tue Sep 4 16:40:13 2001 @@ -126,6 +126,7 @@ extern void __put_user_1(void); extern void __put_user_2(void); extern void __put_user_4(void); +extern void __put_user_8(void); extern void __put_user_bad(void); @@ -161,6 +162,13 @@ case 1: __put_user_asm(x,ptr,retval,"b","b","iq"); break; \ case 2: __put_user_asm(x,ptr,retval,"w","w","ir"); break; \ case 4: __put_user_asm(x,ptr,retval,"l","","ir"); break; \ + case 8: { \ + u32 *__put_ptr = (void*)(ptr); \ + u64 __put_val = (x); \ + __put_user_asm((u32)__put_val,__put_ptr,retval,"l","","ir"); \ + __put_user_asm((u32)(__put_val>>32),__put_ptr+1,retval,"l","","ir"); \ + break; \ + } \ default: __put_user_bad(); \ } \ } while (0) diff -urN v2.4.10-pre4/include/linux/fs.h work-v2.4.10-pre4/include/linux/fs.h --- v2.4.10-pre4/include/linux/fs.h Mon Sep 3 11:04:39 2001 +++ work-v2.4.10-pre4/include/linux/fs.h Tue Sep 4 16:26:04 2001 @@ -166,7 +166,7 @@ #define BLKROSET _IO(0x12,93) /* set device read-only (0 = read-write) */ #define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */ #define BLKRRPART _IO(0x12,95) /* re-read partition table */ -#define BLKGETSIZE _IO(0x12,96) /* return device size */ +#define BLKGETSIZE _IO(0x12,96) /* return device size /512 (long *arg) */ #define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */ #define BLKRASET _IO(0x12,98) /* Set read ahead for block device */ #define BLKRAGET _IO(0x12,99) /* get current read ahead setting */ @@ -182,7 +182,8 @@ /* This was here just to show that the number is taken - probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */ #endif -/* A jump here: 108-111 have been used for various private purposes. */ +/* A jump here: 108,109,111 have been used for various private purposes. */ +#define BLKGETSIZE64 _IOR(0x12,110,sizeof(u64)) /* return device size in bytes (u64 *arg) */ #define BLKBSZGET _IOR(0x12,112,sizeof(int)) #define BLKBSZSET _IOW(0x12,113,sizeof(int)) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl
@ 2001-09-03 20:57 Andries.Brouwer
2001-09-04 1:09 ` Ben LaHaise
0 siblings, 1 reply; 9+ messages in thread
From: Andries.Brouwer @ 2001-09-03 20:57 UTC (permalink / raw)
To: bcrl, torvalds; +Cc: linux-kernel
From: Ben LaHaise <bcrl@redhat.com>
Is there any problem with the patch below for reserving a 64 bit get block
device size ioctl?
+#define BLKBSZGET _IOR(0x12,110,sizeof(u64))
#define BLKBSZGET _IOR(0x12,112,sizeof(int))
Yes.
(1) As you can see you'll only get redefinition complaints.
In other words, there is a B too much in the ioctl name.
(2) We just concluded that 108-111 have been used for various
private purposes. If we avoid 108-111 in all official kernels
then nobody will be surprised if he ever uses some system
utility that uses one of these.
Thus, it is a very bad idea to want to use these again.
(3) Soon we'll all need a BLKGETSIZE64 ioctl, that gives
the size of a block device in bytes. Your proposed ioctl
gave the size in blocks if I recall correctly.
So, if you have to change the name and the number,
you might as well change the definition.
Andries
[We might reserve an area for private use - some ioctl numbers
that are guaranteed never to become part of an official kernel.]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl 2001-09-03 20:57 Andries.Brouwer @ 2001-09-04 1:09 ` Ben LaHaise 0 siblings, 0 replies; 9+ messages in thread From: Ben LaHaise @ 2001-09-04 1:09 UTC (permalink / raw) To: Andries.Brouwer; +Cc: torvalds, linux-kernel On Mon, 3 Sep 2001 Andries.Brouwer@cwi.nl wrote: > Yes. > > (1) As you can see you'll only get redefinition complaints. > In other words, there is a B too much in the ioctl name. Yeah, the previous version was actually matching the subject. > (2) We just concluded that 108-111 have been used for various > private purposes. If we avoid 108-111 in all official kernels > then nobody will be surprised if he ever uses some system > utility that uses one of these. > Thus, it is a very bad idea to want to use these again. Where was 110 used? That wasn't mentioned in the last thread. > (3) Soon we'll all need a BLKGETSIZE64 ioctl, that gives > the size of a block device in bytes. Your proposed ioctl > gave the size in blocks if I recall correctly. > So, if you have to change the name and the number, > you might as well change the definition. I'd accepted that suggestion, I suppose that it should be added to the comment. -ben ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <Pine.LNX.4.33.0109031119400.1610-100000@toomuch.toronto.re dhat.com>]
* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl [not found] <Pine.LNX.4.33.0109031119400.1610-100000@toomuch.toronto.re dhat.com> @ 2001-09-03 15:40 ` Anton Altaparmakov 0 siblings, 0 replies; 9+ messages in thread From: Anton Altaparmakov @ 2001-09-03 15:40 UTC (permalink / raw) To: Ben LaHaise; +Cc: torvalds, linux-kernel At 16:21 03/09/01, Ben LaHaise wrote: >Is there any problem with the patch below for reserving a 64 bit get block >device size ioctl? Aren't you making a define and then redefining the same define on the next line? Perhaps you meant to write "#define BLKBSZGET64 ..."? Anton >diff -urN v2.4.10-pre4/include/linux/fs.h work/include/linux/fs.h >--- v2.4.10-pre4/include/linux/fs.h Mon Sep 3 11:04:39 2001 >+++ work/include/linux/fs.h Mon Sep 3 11:18:44 2001 >@@ -182,7 +182,8 @@ > /* This was here just to show that the number is taken - > probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */ > #endif >-/* A jump here: 108-111 have been used for various private purposes. */ >+/* A jump here: 108,109,111 have been used for various private purposes. */ >+#define BLKBSZGET _IOR(0x12,110,sizeof(u64)) > #define BLKBSZGET _IOR(0x12,112,sizeof(int)) > #define BLKBSZSET _IOW(0x12,113,sizeof(int)) > > >- >To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >the body of a message to majordomo@vger.kernel.org >More majordomo info at http://vger.kernel.org/majordomo-info.html >Please read the FAQ at http://www.tux.org/lkml/ -- "Nothing succeeds like success." - Alexandre Dumas -- Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @) Linux NTFS Maintainer / WWW: http://linux-ntfs.sf.net/ ICQ: 8561279 / WWW: http://www-stu.christs.cam.ac.uk/~aia21/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [resend PATCH] reserve BLKGETSIZE64 ioctl
@ 2001-09-03 15:21 Ben LaHaise
2001-09-03 16:02 ` Andreas Schwab
0 siblings, 1 reply; 9+ messages in thread
From: Ben LaHaise @ 2001-09-03 15:21 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel
Hello,
Is there any problem with the patch below for reserving a 64 bit get block
device size ioctl?
-ben
diff -urN v2.4.10-pre4/include/linux/fs.h work/include/linux/fs.h
--- v2.4.10-pre4/include/linux/fs.h Mon Sep 3 11:04:39 2001
+++ work/include/linux/fs.h Mon Sep 3 11:18:44 2001
@@ -182,7 +182,8 @@
/* This was here just to show that the number is taken -
probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
#endif
-/* A jump here: 108-111 have been used for various private purposes. */
+/* A jump here: 108,109,111 have been used for various private purposes. */
+#define BLKBSZGET _IOR(0x12,110,sizeof(u64))
#define BLKBSZGET _IOR(0x12,112,sizeof(int))
#define BLKBSZSET _IOW(0x12,113,sizeof(int))
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [resend PATCH] reserve BLKGETSIZE64 ioctl 2001-09-03 15:21 Ben LaHaise @ 2001-09-03 16:02 ` Andreas Schwab 0 siblings, 0 replies; 9+ messages in thread From: Andreas Schwab @ 2001-09-03 16:02 UTC (permalink / raw) To: Ben LaHaise; +Cc: linux-kernel Ben LaHaise <bcrl@redhat.com> writes: |> Hello, |> |> Is there any problem with the patch below for reserving a 64 bit get block |> device size ioctl? Yes. |> diff -urN v2.4.10-pre4/include/linux/fs.h work/include/linux/fs.h |> --- v2.4.10-pre4/include/linux/fs.h Mon Sep 3 11:04:39 2001 |> +++ work/include/linux/fs.h Mon Sep 3 11:18:44 2001 |> @@ -182,7 +182,8 @@ |> /* This was here just to show that the number is taken - |> probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */ |> #endif |> -/* A jump here: 108-111 have been used for various private purposes. */ |> +/* A jump here: 108,109,111 have been used for various private purposes. */ |> +#define BLKBSZGET _IOR(0x12,110,sizeof(u64)) |> #define BLKBSZGET _IOR(0x12,112,sizeof(int)) ^^^^^^^^^ Conflicting definitions. Andreas. -- Andreas Schwab "And now for something Andreas.Schwab@suse.de completely different." SuSE Labs, SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2001-09-04 22:27 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-09-04 21:43 [resend PATCH] reserve BLKGETSIZE64 ioctl Andries.Brouwer
2001-09-04 22:27 ` Ben LaHaise
-- strict thread matches above, loose matches on Subject: below --
2001-09-04 13:50 Andries.Brouwer
2001-09-04 20:54 ` Ben LaHaise
2001-09-03 20:57 Andries.Brouwer
2001-09-04 1:09 ` Ben LaHaise
[not found] <Pine.LNX.4.33.0109031119400.1610-100000@toomuch.toronto.re dhat.com>
2001-09-03 15:40 ` Anton Altaparmakov
2001-09-03 15:21 Ben LaHaise
2001-09-03 16:02 ` Andreas Schwab
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox