public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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
       [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

* 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

* 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

* 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-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

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