* hot scsi disk resize
@ 2003-03-03 17:21 Alex Tomas
2003-03-03 18:15 ` Christoph Hellwig
2003-03-04 9:31 ` Fabien Salvi
0 siblings, 2 replies; 9+ messages in thread
From: Alex Tomas @ 2003-03-03 17:21 UTC (permalink / raw)
To: linux-scsi; +Cc: James Bottomley, Jens Axboe, Alex Tomas
Hello!
Here is patch to implement hot scsi resize function.
Modern storage boxes support virtualization feature and
may change logical volume size online. I think it would
be great if linux supports such abilities. Look at
this example:
root@zefir:# dmesg | tail
scsi0:A:1:0: Tagged Queuing enabled. Depth 32
SCSI device sda: 2097152 512-byte hdwr sectors (1074 MB)
SCSI device sda: drive cache: write through
sda: unknown partition table
Attached scsi disk sda at scsi0, channel 0, id 1, lun 0
root@zefir:# mount -treiserfs /dev/sda /mnt
root@zefir:# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/hda1 ext3 1.9G 1.8G 138M 93% /
/dev/sda reiserfs 1.0G 33M 991M 4% /mnt
root@zefir:# echo 'scsi rescan 0 0 1 0' >/proc/scsi/scsi
root@zefir:# dmesg|tail -n1
SCSI device sda: 20971520 512-byte hdwr sectors (10737 MB)
root@zefir:# resize_reiserfs /dev/sda
<-------------resize_reiserfs, 2002------------->
reiserfsprogs 3.6.4
root@zefir:# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/hda1 ext3 1.9G 1.8G 138M 93% /
/dev/sda reiserfs 10G 33M 9.9G 1% /mnt
I think it's really useful for for high-availability systems.
MS Windows has supported online disk resize since 2000. I Would
be happy to hear any comments and suggestions.
diff -uNr linux/drivers/scsi/hosts.h edited/drivers/scsi/hosts.h
--- linux/drivers/scsi/hosts.h Thu Feb 20 13:18:16 2003
+++ edited/drivers/scsi/hosts.h Mon Mar 3 18:48:16 2003
@@ -558,6 +558,7 @@
void (*detach)(Scsi_Device *);
int (*init_command)(Scsi_Cmnd *); /* Used by new queueing code.
Selects command for blkdevs */
+ void (*rescan)(Scsi_Device *);
struct device_driver scsi_driverfs_driver;
};
diff -uNr linux/drivers/scsi/scsi.c edited/drivers/scsi/scsi.c
--- linux/drivers/scsi/scsi.c Thu Feb 20 13:18:17 2003
+++ edited/drivers/scsi/scsi.c Mon Mar 3 18:48:16 2003
@@ -1510,6 +1510,21 @@
up_read(&scsi_devicelist_mutex);
}
+void scsi_rescan_device(struct scsi_device *sdev)
+{
+ struct Scsi_Device_Template *sdt;
+
+ down_read(&scsi_devicelist_mutex);
+ list_for_each_entry(sdt, &scsi_devicelist, list) {
+ if (!try_module_get(sdt->module))
+ continue;
+ if (*sdt->rescan)
+ (*sdt->rescan)(sdev);
+ module_put(sdt->module);
+ }
+ up_read(&scsi_devicelist_mutex);
+}
+
int scsi_device_get(struct scsi_device *sdev)
{
if (!try_module_get(sdev->host->hostt->module))
diff -uNr linux/drivers/scsi/scsi_proc.c edited/drivers/scsi/scsi_proc.c
--- linux/drivers/scsi/scsi_proc.c Thu Feb 20 13:18:17 2003
+++ edited/drivers/scsi/scsi_proc.c Mon Mar 3 18:48:16 2003
@@ -551,6 +551,18 @@
lun = simple_strtoul(p + 1, &p, 0);
err = scsi_remove_single_device(host, channel, id, lun);
+ if (err >= 0)
+ err = length;
+ } else if (!strncmp("rescan", buffer + 5, 6)) {
+ p = buffer + 12;
+
+ host = simple_strtoul(p, &p, 0);
+ channel = simple_strtoul(p + 1, &p, 0);
+ id = simple_strtoul(p + 1, &p, 0);
+ lun = simple_strtoul(p + 1, &p, 0);
+ err = scsi_rescan_single_device(host, channel, id, lun);
+ if (err >= 0)
+ err = length;
}
out:
diff -uNr linux/drivers/scsi/scsi_scan.c edited/drivers/scsi/scsi_scan.c
--- linux/drivers/scsi/scsi_scan.c Thu Feb 20 13:18:17 2003
+++ edited/drivers/scsi/scsi_scan.c Mon Mar 3 18:48:16 2003
@@ -1796,6 +1796,24 @@
return error;
}
+int scsi_rescan_single_device(uint host, uint channel, uint id, uint lun)
+{
+ struct scsi_device *sdev;
+ struct Scsi_Host *shost;
+
+ shost = scsi_host_hn_get(host);
+ if (!shost)
+ return -ENODEV;
+ sdev = scsi_find_device(shost, channel, id, lun);
+ if (!sdev)
+ goto out;
+
+ scsi_rescan_device(sdev);
+out:
+ scsi_host_put(shost);
+ return 0;
+}
+
/**
* scsi_scan_target - scan a target id, possibly including all LUNs on the
* target.
diff -uNr linux/drivers/scsi/sd.c edited/drivers/scsi/sd.c
--- linux/drivers/scsi/sd.c Mon Jan 20 02:23:42 2003
+++ edited/drivers/scsi/sd.c Mon Mar 3 19:19:25 2003
@@ -93,10 +93,12 @@
static int sd_attach(struct scsi_device *);
static void sd_detach(struct scsi_device *);
+static void sd_rescan(struct scsi_device *);
static int sd_init_command(struct scsi_cmnd *);
static int sd_synchronize_cache(struct scsi_disk *, int);
static int sd_notifier(struct notifier_block *, unsigned long, void *);
-
+static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname,
+ struct scsi_request *SRpnt, unsigned char *buffer);
static struct notifier_block sd_notifier_block = {sd_notifier, NULL, 0};
static struct Scsi_Device_Template sd_template = {
@@ -106,6 +108,7 @@
.scsi_type = TYPE_DISK,
.attach = sd_attach,
.detach = sd_detach,
+ .rescan = sd_rescan,
.init_command = sd_init_command,
.scsi_driverfs_driver = {
.name = "sd",
@@ -627,6 +630,38 @@
not_present:
set_media_not_present(sdkp);
return 1;
+}
+
+static void sd_rescan(struct scsi_device * sdp)
+{
+ unsigned char *buffer;
+ struct scsi_disk *sdkp = sd_find_by_sdev(sdp);
+ struct gendisk *gd;
+ struct scsi_request *SRpnt;
+
+ if (!sdkp || sdp->online == FALSE || !sdkp->media_present)
+ return;
+
+ gd = sdkp->disk;
+
+ SCSI_LOG_HLQUEUE(3, printk("sd_rescan: disk=%s\n", gd->disk_name));
+
+ SRpnt = scsi_allocate_request(sdp);
+ if (!SRpnt) {
+ printk(KERN_WARNING "(sd_rescan:) Request allocation "
+ "failure.\n");
+ return;
+ }
+
+ if (sdkp->device->host->unchecked_isa_dma)
+ buffer = kmalloc(512, GFP_DMA);
+ else
+ buffer = kmalloc(512, GFP_KERNEL);
+
+ sd_read_capacity(sdkp, gd->disk_name, SRpnt, buffer);
+ set_capacity(gd, sdkp->capacity);
+ scsi_release_request(SRpnt);
+ kfree(buffer);
}
static int sd_revalidate_disk(struct gendisk *disk)
diff -uNr linux/fs/block_dev.c edited/fs/block_dev.c
--- linux/fs/block_dev.c Mon Jan 20 02:23:49 2003
+++ edited/fs/block_dev.c Mon Mar 3 18:49:47 2003
@@ -623,6 +623,8 @@
up(&whole->bd_sem);
}
} else {
+ if (!part)
+ bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
put_disk(disk);
module_put(owner);
if (bdev->bd_contains == bdev) {
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-03 17:21 hot scsi disk resize Alex Tomas
@ 2003-03-03 18:15 ` Christoph Hellwig
2003-03-04 5:37 ` Alex Tomas
2003-03-04 7:00 ` alexey
2003-03-04 9:31 ` Fabien Salvi
1 sibling, 2 replies; 9+ messages in thread
From: Christoph Hellwig @ 2003-03-03 18:15 UTC (permalink / raw)
To: Alex Tomas; +Cc: linux-scsi, James Bottomley, Jens Axboe
On Mon, Mar 03, 2003 at 08:21:24PM +0300, Alex Tomas wrote:
> + if (err >= 0)
> + err = length;
> + } else if (!strncmp("rescan", buffer + 5, 6)) {
> + p = buffer + 12;
> +
> + host = simple_strtoul(p, &p, 0);
> + channel = simple_strtoul(p + 1, &p, 0);
> + id = simple_strtoul(p + 1, &p, 0);
> + lun = simple_strtoul(p + 1, &p, 0);
> + err = scsi_rescan_single_device(host, channel, id, lun);
> + if (err >= 0)
> + err = length;
Please don't add more procfs option. A resize attribute for the
sysfs node of the scsi_device is the better choice in my opinion.
> + buffer = kmalloc(512, GFP_DMA);
> + else
> + buffer = kmalloc(512, GFP_KERNEL);
> +
> + sd_read_capacity(sdkp, gd->disk_name, SRpnt, buffer);
> + set_capacity(gd, sdkp->capacity);
> + scsi_release_request(SRpnt);
> + kfree(buffer);
Don't you need some kind of serialization here?
> --- linux/fs/block_dev.c Mon Jan 20 02:23:49 2003
> +++ edited/fs/block_dev.c Mon Mar 3 18:49:47 2003
> @@ -623,6 +623,8 @@
> up(&whole->bd_sem);
> }
> } else {
> + if (!part)
> + bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
This needs more explanation.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-03 18:15 ` Christoph Hellwig
@ 2003-03-04 5:37 ` Alex Tomas
2003-03-04 7:00 ` alexey
1 sibling, 0 replies; 9+ messages in thread
From: Alex Tomas @ 2003-03-04 5:37 UTC (permalink / raw)
To: Christoph Hellwig
Cc: linux-scsi, James Bottomley, Jens Axboe, Dennis Gerasimov
Hi!
>>>>> Christoph Hellwig (CH) writes:
CH> On Mon, Mar 03, 2003 at 08:21:24PM +0300, Alex Tomas wrote:
>> + if (err >= 0) + err = length; + } else if (!strncmp("rescan",
>> buffer + 5, 6)) { + p = buffer + 12; + + host = simple_strtoul(p,
>> &p, 0); + channel = simple_strtoul(p + 1, &p, 0); + id =
>> simple_strtoul(p + 1, &p, 0); + lun = simple_strtoul(p + 1, &p,
>> 0); + err = scsi_rescan_single_device(host, channel, id, lun); +
>> if (err >= 0) + err = length;
CH> Please don't add more procfs option. A resize attribute for the
CH> sysfs node of the scsi_device is the better choice in my opinion.
I like your idea.
>> + buffer = kmalloc(512, GFP_DMA); + else + buffer = kmalloc(512,
>> GFP_KERNEL); + + sd_read_capacity(sdkp, gd->disk_name, SRpnt,
>> buffer); + set_capacity(gd, sdkp->capacity); +
>> scsi_release_request(SRpnt); + kfree(buffer);
CH> Don't you need some kind of serialization here?
Well. I think all changes sd_read_capacity() and set_capacity() make
need not to be protected. Am I right?
>> --- linux/fs/block_dev.c Mon Jan 20 02:23:49 2003 +++
>> edited/fs/block_dev.c Mon Mar 3 18:49:47 2003 @@ -623,6 +623,8 @@
>> up(&whole->bd_sem); } } else { + if (!part) +
>> bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
CH> This needs more explanation.
This is required because open("/dev/sd*",) should see new size of
disk being used. James Bottomley suggested to introduce new ioctl, but
I hope we may implmenent the feature w/o touching userspace tools.
with best regards, Alex
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-03 18:15 ` Christoph Hellwig
2003-03-04 5:37 ` Alex Tomas
@ 2003-03-04 7:00 ` alexey
2003-03-17 16:21 ` James Bottomley
1 sibling, 1 reply; 9+ messages in thread
From: alexey @ 2003-03-04 7:00 UTC (permalink / raw)
To: Christoph Hellwig
Cc: linux-scsi, James Bottomley, Jens Axboe, alexey, Dennis Gerasimov
Hi!
Here is new version of the patch. All procfs-related stuff has been removed.
One may rescan device size writing something to /sysfs/.../<scsi device>/rescan:
root@zefir:~# echo 1 >/sysfs/bus/scsi/devices/0\:0\:1\:0/rescan
root@zefir:~# dmesg
scsi0:A:1:0: Tagged Queuing enabled. Depth 64
scsi: host 0 channel 0 id 1 lun16384 has a LUN larger than allowed by the host adapter
SCSI device sda: 2097152 512-byte hdwr sectors (1074 MB)
SCSI device sda: drive cache: write through
sda: unknown partition table
Attached scsi disk sda at scsi0, channel 0, id 1, lun 0
SCSI device sda: 125829120 512-byte hdwr sectors (64425 MB)
root@zefir:~#
diff -uNr linux/drivers/scsi/hosts.h edited/drivers/scsi/hosts.h
--- linux/drivers/scsi/hosts.h Thu Feb 20 13:18:16 2003
+++ edited/drivers/scsi/hosts.h Mon Mar 3 18:48:16 2003
@@ -558,6 +558,7 @@
void (*detach)(Scsi_Device *);
int (*init_command)(Scsi_Cmnd *); /* Used by new queueing code.
Selects command for blkdevs */
+ void (*rescan)(Scsi_Device *);
struct device_driver scsi_driverfs_driver;
};
diff -uNr linux/drivers/scsi/scsi.c edited/drivers/scsi/scsi.c
--- linux/drivers/scsi/scsi.c Thu Feb 20 13:18:17 2003
+++ edited/drivers/scsi/scsi.c Mon Mar 3 18:48:16 2003
@@ -1510,6 +1510,21 @@
up_read(&scsi_devicelist_mutex);
}
+void scsi_rescan_device(struct scsi_device *sdev)
+{
+ struct Scsi_Device_Template *sdt;
+
+ down_read(&scsi_devicelist_mutex);
+ list_for_each_entry(sdt, &scsi_devicelist, list) {
+ if (!try_module_get(sdt->module))
+ continue;
+ if (*sdt->rescan)
+ (*sdt->rescan)(sdev);
+ module_put(sdt->module);
+ }
+ up_read(&scsi_devicelist_mutex);
+}
+
int scsi_device_get(struct scsi_device *sdev)
{
if (!try_module_get(sdev->host->hostt->module))
diff -uNr linux/drivers/scsi/scsi_sysfs.c edited/drivers/scsi/scsi_sysfs.c
--- linux/drivers/scsi/scsi_sysfs.c Thu Feb 20 13:18:17 2003
+++ edited/drivers/scsi/scsi_sysfs.c Tue Mar 4 09:15:42 2003
@@ -219,6 +219,25 @@
sdev_rd_attr (rev, "%.4s\n");
sdev_rw_attr_bit (online);
+static ssize_t
+show_rescan_field (struct device *dev, char *buf)
+{
+ return 0;
+}
+
+static ssize_t
+store_rescan_field (struct device *dev, const char *buf, size_t count)
+{
+ int ret = ENODEV;
+ struct scsi_device *sdev;
+ sdev = to_scsi_device(dev);
+ if (sdev)
+ ret = scsi_rescan_device(sdev);
+ return ret;
+}
+
+static DEVICE_ATTR(rescan, S_IRUGO | S_IWUSR, show_rescan_field, store_rescan_field)
+
static struct device_attribute * const sdev_attrs[] = {
&dev_attr_device_blocked,
&dev_attr_queue_depth,
@@ -229,6 +248,7 @@
&dev_attr_model,
&dev_attr_rev,
&dev_attr_online,
+ &dev_attr_rescan,
};
/**
diff -uNr linux/drivers/scsi/sd.c edited/drivers/scsi/sd.c
--- linux/drivers/scsi/sd.c Mon Jan 20 02:23:42 2003
+++ edited/drivers/scsi/sd.c Mon Mar 3 19:19:25 2003
@@ -93,10 +93,12 @@
static int sd_attach(struct scsi_device *);
static void sd_detach(struct scsi_device *);
+static void sd_rescan(struct scsi_device *);
static int sd_init_command(struct scsi_cmnd *);
static int sd_synchronize_cache(struct scsi_disk *, int);
static int sd_notifier(struct notifier_block *, unsigned long, void *);
-
+static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname,
+ struct scsi_request *SRpnt, unsigned char *buffer);
static struct notifier_block sd_notifier_block = {sd_notifier, NULL, 0};
static struct Scsi_Device_Template sd_template = {
@@ -106,6 +108,7 @@
.scsi_type = TYPE_DISK,
.attach = sd_attach,
.detach = sd_detach,
+ .rescan = sd_rescan,
.init_command = sd_init_command,
.scsi_driverfs_driver = {
.name = "sd",
@@ -627,6 +630,38 @@
not_present:
set_media_not_present(sdkp);
return 1;
+}
+
+static void sd_rescan(struct scsi_device * sdp)
+{
+ unsigned char *buffer;
+ struct scsi_disk *sdkp = sd_find_by_sdev(sdp);
+ struct gendisk *gd;
+ struct scsi_request *SRpnt;
+
+ if (!sdkp || sdp->online == FALSE || !sdkp->media_present)
+ return;
+
+ gd = sdkp->disk;
+
+ SCSI_LOG_HLQUEUE(3, printk("sd_rescan: disk=%s\n", gd->disk_name));
+
+ SRpnt = scsi_allocate_request(sdp);
+ if (!SRpnt) {
+ printk(KERN_WARNING "(sd_rescan:) Request allocation "
+ "failure.\n");
+ return;
+ }
+
+ if (sdkp->device->host->unchecked_isa_dma)
+ buffer = kmalloc(512, GFP_DMA);
+ else
+ buffer = kmalloc(512, GFP_KERNEL);
+
+ sd_read_capacity(sdkp, gd->disk_name, SRpnt, buffer);
+ set_capacity(gd, sdkp->capacity);
+ scsi_release_request(SRpnt);
+ kfree(buffer);
}
static int sd_revalidate_disk(struct gendisk *disk)
diff -uNr linux/fs/block_dev.c edited/fs/block_dev.c
--- linux/fs/block_dev.c Mon Jan 20 02:23:49 2003
+++ edited/fs/block_dev.c Mon Mar 3 18:49:47 2003
@@ -546,7 +546,7 @@
return res;
}
-static void bd_set_size(struct block_device *bdev, loff_t size)
+void bd_set_size(struct block_device *bdev, loff_t size)
{
unsigned bsize = bdev_hardsect_size(bdev);
bdev->bd_inode->i_size = size;
@@ -623,6 +623,8 @@
up(&whole->bd_sem);
}
} else {
+ if (!part)
+ bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
put_disk(disk);
module_put(owner);
if (bdev->bd_contains == bdev) {
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-03 17:21 hot scsi disk resize Alex Tomas
2003-03-03 18:15 ` Christoph Hellwig
@ 2003-03-04 9:31 ` Fabien Salvi
2003-03-04 9:42 ` alexey
1 sibling, 1 reply; 9+ messages in thread
From: Fabien Salvi @ 2003-03-04 9:31 UTC (permalink / raw)
To: Alex Tomas; +Cc: linux-scsi, James Bottomley, Jens Axboe
Alex Tomas a écrit:
> Hello!
>
> Here is patch to implement hot scsi resize function.
> Modern storage boxes support virtualization feature and
> may change logical volume size online. I think it would
> be great if linux supports such abilities. Look at
> this example:
>
> root@zefir:# dmesg | tail
> scsi0:A:1:0: Tagged Queuing enabled. Depth 32
> SCSI device sda: 2097152 512-byte hdwr sectors (1074 MB)
> SCSI device sda: drive cache: write through
> sda: unknown partition table
> Attached scsi disk sda at scsi0, channel 0, id 1, lun 0
>
> root@zefir:# mount -treiserfs /dev/sda /mnt
>
> root@zefir:# df -Th
> Filesystem Type Size Used Avail Use% Mounted on
> /dev/hda1 ext3 1.9G 1.8G 138M 93% /
> /dev/sda reiserfs 1.0G 33M 991M 4% /mnt
>
> root@zefir:# echo 'scsi rescan 0 0 1 0' >/proc/scsi/scsi
> root@zefir:# dmesg|tail -n1
> SCSI device sda: 20971520 512-byte hdwr sectors (10737 MB)
> root@zefir:# resize_reiserfs /dev/sda
>
> <-------------resize_reiserfs, 2002------------->
> reiserfsprogs 3.6.4
>
> root@zefir:# df -Th
> Filesystem Type Size Used Avail Use% Mounted on
> /dev/hda1 ext3 1.9G 1.8G 138M 93% /
> /dev/sda reiserfs 10G 33M 9.9G 1% /mnt
Well, I also think it's a very important and needed feature for HA systems.
I'm very interested in such things...
But, I thought resize_reiserfs only resize *unmounted* filesystem :
http://www.reiserfs.org/resize_reiserfs.html
Will it work under IO load ?
Reiserfs has a way to do it dynamically while using it, with mount option :
http://www.reiserfs.org/mount-options.html
I've tested this without a lot of success (I encounter a lot of problems).
I'm afraid that even if scsi subsystem support the resize option,
FileSystems won't support it correctly...
Maybe with LVM ?
Did someone test it ?
--
Fabien SALVI Centre de Ressources Informatiques
Archamps, France -- http://www.cri74.org
PingOO GNU/linux distribution : http://www.pingoo.org
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-04 9:31 ` Fabien Salvi
@ 2003-03-04 9:42 ` alexey
2003-03-05 10:18 ` Fabien Salvi
0 siblings, 1 reply; 9+ messages in thread
From: alexey @ 2003-03-04 9:42 UTC (permalink / raw)
To: Fabien Salvi
Cc: linux-scsi, James Bottomley, Jens Axboe, alexey, Dennis Gerasimov
>>>>> Fabien Salvi (FS) writes:
FS> Well, I also think it's a very important and needed feature for
FS> HA systems. I'm very interested in such things...
FS> But, I thought resize_reiserfs only resize *unmounted* filesystem
FS> : http://www.reiserfs.org/resize_reiserfs.html
citate from this URL: "The resize_reiserfs program allows to grow a
reiserfs on-line if there is a free space on block device."
FS> Will it work under IO load ?
I tested it several times under different load (read-only, write-only,
read-write, single-thread and multi-thread tests). I think reiserfs
team may give comments.
FS> Reiserfs has a way to do it dynamically while using it, with
FS> mount option : http://www.reiserfs.org/mount-options.html
FS> I've tested this without a lot of success (I encounter a lot of
FS> problems).
what kind of problem have you seen? what versions of kernel/reiserfs/tools?
FS> I'm afraid that even if scsi subsystem support the resize option,
FS> FileSystems won't support it correctly... Maybe with LVM ?
FS> Did someone test it ?
>From filesystem point of view, LVM and resizable SCSI HDD are the same
think - just block device which may grow.
I think this patch is just one more step in the right direction.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-04 9:42 ` alexey
@ 2003-03-05 10:18 ` Fabien Salvi
0 siblings, 0 replies; 9+ messages in thread
From: Fabien Salvi @ 2003-03-05 10:18 UTC (permalink / raw)
To: alexey; +Cc: linux-scsi, James Bottomley, Jens Axboe, Dennis Gerasimov
alexey@technomagesinc.com a écrit:
>>>>>>Fabien Salvi (FS) writes:
>>>>>
>
> FS> Well, I also think it's a very important and needed feature for
> FS> HA systems. I'm very interested in such things...
>
> FS> But, I thought resize_reiserfs only resize *unmounted* filesystem
> FS> : http://www.reiserfs.org/resize_reiserfs.html
>
> citate from this URL: "The resize_reiserfs program allows to grow a
> reiserfs on-line if there is a free space on block device."
Yes, you're right !
I haven't seen this...
It's a bit strange, it contradicts what is said on the first line :)
> FS> Will it work under IO load ?
>
> I tested it several times under different load (read-only, write-only,
> read-write, single-thread and multi-thread tests). I think reiserfs
> team may give comments.
> FS> Reiserfs has a way to do it dynamically while using it, with
> FS> mount option : http://www.reiserfs.org/mount-options.html
>
> FS> I've tested this without a lot of success (I encounter a lot of
> FS> problems).
>
> what kind of problem have you seen? what versions of kernel/reiserfs/tools?
Well, I made some tests one year ago, I will try this again, as you say
it seems to work well, it's interested...
I will let you know my new results.
> FS> I'm afraid that even if scsi subsystem support the resize option,
> FS> FileSystems won't support it correctly... Maybe with LVM ?
>
> FS> Did someone test it ?
>
>>From filesystem point of view, LVM and resizable SCSI HDD are the same
> think - just block device which may grow.
>
> I think this patch is just one more step in the right direction.
Yes, surely !
--
Fabien SALVI Centre de Ressources Informatiques
Archamps, France -- http://www.cri74.org
PingOO GNU/linux distribution : http://www.pingoo.org
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-04 7:00 ` alexey
@ 2003-03-17 16:21 ` James Bottomley
2003-03-17 16:30 ` Christoph Hellwig
0 siblings, 1 reply; 9+ messages in thread
From: James Bottomley @ 2003-03-17 16:21 UTC (permalink / raw)
To: alexey
Cc: Christoph Hellwig, SCSI Mailing List, Jens Axboe,
Dennis Gerasimov, viro
On Tue, 2003-03-04 at 01:00, alexey@technomagesinc.com wrote:
> Here is new version of the patch. All procfs-related stuff has been removed.
> One may rescan device size writing something to /sysfs/.../<scsi device>/rescan:
I applied all of this, except this piece:
> diff -uNr linux/fs/block_dev.c edited/fs/block_dev.c
> --- linux/fs/block_dev.c Mon Jan 20 02:23:49 2003
> +++ edited/fs/block_dev.c Mon Mar 3 18:49:47 2003
> @@ -623,6 +623,8 @@
> up(&whole->bd_sem);
> }
> } else {
> + if (!part)
> + bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
> put_disk(disk);
> module_put(owner);
> if (bdev->bd_contains == bdev) {
>
>
Because adding this in will break the initial ramdisk. Thus, although
the SCSI layer does resize, the block layer may not.
I've copied Al Viro because he's more familiar with the block layer
device code than I and may have been planning to add this feature. Al,
can you tell us what needs to happen to allow for hot resizing a SCSI
disc?
Thanks,
James
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: hot scsi disk resize
2003-03-17 16:21 ` James Bottomley
@ 2003-03-17 16:30 ` Christoph Hellwig
0 siblings, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2003-03-17 16:30 UTC (permalink / raw)
To: James Bottomley
Cc: alexey, SCSI Mailing List, Jens Axboe, Dennis Gerasimov, viro
On Mon, Mar 17, 2003 at 10:21:41AM -0600, James Bottomley wrote:
> > --- linux/fs/block_dev.c Mon Jan 20 02:23:49 2003
> > +++ edited/fs/block_dev.c Mon Mar 3 18:49:47 2003
> > @@ -623,6 +623,8 @@
> > up(&whole->bd_sem);
> > }
> > } else {
> > + if (!part)
> > + bd_set_size(bdev,(loff_t)get_capacity(disk)<<9);
> > put_disk(disk);
> > module_put(owner);
> > if (bdev->bd_contains == bdev) {
> >
> >
>
> Because adding this in will break the initial ramdisk. Thus, although
> the SCSI layer does resize, the block layer may not.
What about moving the size setting into ->open?
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2003-03-17 16:30 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-03-03 17:21 hot scsi disk resize Alex Tomas
2003-03-03 18:15 ` Christoph Hellwig
2003-03-04 5:37 ` Alex Tomas
2003-03-04 7:00 ` alexey
2003-03-17 16:21 ` James Bottomley
2003-03-17 16:30 ` Christoph Hellwig
2003-03-04 9:31 ` Fabien Salvi
2003-03-04 9:42 ` alexey
2003-03-05 10:18 ` Fabien Salvi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox