public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fix read capacity for large disks when CONFIG_LBD=n (updated)
@ 2005-01-04 16:59 Tony Battersby
  2005-01-04 17:45 ` James Bottomley
  0 siblings, 1 reply; 4+ messages in thread
From: Tony Battersby @ 2005-01-04 16:59 UTC (permalink / raw)
  To: 'James Bottomley'; +Cc: linux-scsi

(updated - this patch is correct for the case that sdkp->fix_capacity is set)

If CONFIG_LBD=n, then sd_read_capacity computes the capacity of a large
disk on a 32-bit platform as 1 + 0xffffffff = 0.  Make it 0xffffffff
instead.

Anthony J. Battersby
Cybernetics

--- linux-2.6.10/drivers/scsi/sd.c.orig	Fri Dec 24 16:35:23 2004
+++ linux-2.6.10/drivers/scsi/sd.c	Tue Jan  4 11:52:01 2005
@@ -1082,9 +1082,13 @@ repeat:
 				       " READ CAPACITY(16).\n", diskname);
 				longrc = 1;
 				goto repeat;
-			} else {
-				printk(KERN_ERR "%s: too big for kernel.  Assuming maximum 2Tb\n", diskname);
 			}
+			printk(KERN_ERR "%s: too big for kernel.  Assuming "
+			                "maximum 2TB\n", diskname);
+			/* Don't add 1 as is normally done to avoid
+			 * overflow. */
+			sdkp->capacity = 0xffffffff;
+			goto got_data;
 		}
 		sdkp->capacity = 1 + (((sector_t)buffer[0] << 24) |
 			(buffer[1] << 16) |


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] fix read capacity for large disks when CONFIG_LBD=n (updated)
  2005-01-04 16:59 [PATCH] fix read capacity for large disks when CONFIG_LBD=n (updated) Tony Battersby
@ 2005-01-04 17:45 ` James Bottomley
  2005-01-04 17:56   ` [PATCH] fix read capacity for large disks when CONFIG_LBD=n(updated) Tony Battersby
  2005-01-04 18:11   ` Tony Battersby
  0 siblings, 2 replies; 4+ messages in thread
From: James Bottomley @ 2005-01-04 17:45 UTC (permalink / raw)
  To: tonyb; +Cc: SCSI Mailing List

On Tue, 2005-01-04 at 11:59 -0500, Tony Battersby wrote:
> If CONFIG_LBD=n, then sd_read_capacity computes the capacity of a large
> disk on a 32-bit platform as 1 + 0xffffffff = 0.  Make it 0xffffffff
> instead.

Actually, I don't think this is at all a good idea.  Not allowing a LBD
device to be configured if the user hasn't enabled LBD (which is
accidentally what the current code does) seems better to me.

Imagine a 4TB fs.  Plug it in to a system like this and you're going to
corrupt it because you can't see half the disc.

James



^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] fix read capacity for large disks when CONFIG_LBD=n(updated)
  2005-01-04 17:45 ` James Bottomley
@ 2005-01-04 17:56   ` Tony Battersby
  2005-01-04 18:11   ` Tony Battersby
  1 sibling, 0 replies; 4+ messages in thread
From: Tony Battersby @ 2005-01-04 17:56 UTC (permalink / raw)
  To: 'James Bottomley'; +Cc: 'SCSI Mailing List'

> Actually, I don't think this is at all a good idea.  Not 
> allowing a LBD
> device to be configured if the user hasn't enabled LBD (which is
> accidentally what the current code does) seems better to me.

That's fine with me.

Anthony J. Battersby
Cybernetics


^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] fix read capacity for large disks when CONFIG_LBD=n(updated)
  2005-01-04 17:45 ` James Bottomley
  2005-01-04 17:56   ` [PATCH] fix read capacity for large disks when CONFIG_LBD=n(updated) Tony Battersby
@ 2005-01-04 18:11   ` Tony Battersby
  1 sibling, 0 replies; 4+ messages in thread
From: Tony Battersby @ 2005-01-04 18:11 UTC (permalink / raw)
  To: 'James Bottomley'; +Cc: 'SCSI Mailing List'

Here's an alternate patch that corrects the kernel message and sets the
capacity to 0 explicitly.

Anthony J. Battersby
Cybernetics

--- linux-2.6.10/drivers/scsi/sd.c.orig	Fri Dec 24 16:35:23 2004
+++ linux-2.6.10/drivers/scsi/sd.c	Tue Jan  4 13:03:59 2005
@@ -1082,9 +1082,12 @@ repeat:
 				       " READ CAPACITY(16).\n", diskname);
 				longrc = 1;
 				goto repeat;
-			} else {
-				printk(KERN_ERR "%s: too big for kernel.  Assuming maximum 2Tb\n", diskname);
 			}
+			printk(KERN_ERR "%s: too big for this kernel.  Use a "
+			       "kernel compiled with support for large block "
+			       "devices.\n", diskname);
+			sdkp->capacity = 0;
+			goto got_data;
 		}
 		sdkp->capacity = 1 + (((sector_t)buffer[0] << 24) |
 			(buffer[1] << 16) |



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-01-04 18:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-04 16:59 [PATCH] fix read capacity for large disks when CONFIG_LBD=n (updated) Tony Battersby
2005-01-04 17:45 ` James Bottomley
2005-01-04 17:56   ` [PATCH] fix read capacity for large disks when CONFIG_LBD=n(updated) Tony Battersby
2005-01-04 18:11   ` Tony Battersby

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox