WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [linux-2.6.18-xen] xen, vscsi: >2TB patch

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] xen, vscsi: >2TB patch
From: "Xen patchbot-linux-2.6.18-xen" <patchbot@xxxxxxx>
Date: Tue, 25 Jan 2011 06:20:05 -0800
Delivery-date: Tue, 25 Jan 2011 06:20:13 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1295964567 0
# Node ID 49c12b99f537810f985f76a1d47039ff6c8b8f7a
# Parent  3cdab8f7ff5873f3325d2c19bb7be712d26c6724
xen, vscsi: >2TB patch

This patch fixes current 2TB limitation of the xen vscsi driver.
Both frontend (command size) and backend (missing READ_16/WRITE_16
commands) driver need a fix. Also an scsi command added to support
ALUA. Tested thoroughly on 4TB external RAID.

I also enabled some more commands to allow operating LTO tape
drives and autoloaders (tested on HP Ultrium 1/8 + Bacula).

Still more scsi commands might be missing for other specific
devices (why not to enable all scsi commands by default ?).

Signed-off-by: Samuel Kvasnica <samuel.kvasnica@xxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 drivers/xen/scsiback/emulate.c    |   92 ++++++++++++++++++++------------------
 drivers/xen/scsifront/scsifront.c |    5 ++
 drivers/xen/scsifront/xenbus.c    |    7 ++
 3 files changed, 61 insertions(+), 43 deletions(-)

diff -r 3cdab8f7ff58 -r 49c12b99f537 drivers/xen/scsiback/emulate.c
--- a/drivers/xen/scsiback/emulate.c    Fri Jan 14 15:45:52 2011 +0000
+++ b/drivers/xen/scsiback/emulate.c    Tue Jan 25 14:09:27 2011 +0000
@@ -28,6 +28,11 @@
  * IN THE SOFTWARE.
  */
 
+/*
+* Patched to support >2TB drives + allow tape & autoloader operations
+* 2010, Samuel Kvasnica, IMS Nanofabrication AG
+*/
+
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
@@ -384,85 +389,88 @@ void scsiback_emulation_init(void)
        /*
          Following commands do not require emulation.
        */
-       NO_EMULATE(TEST_UNIT_READY);       /*0x00*/
-       NO_EMULATE(REZERO_UNIT);           /*0x01*/
+       NO_EMULATE(TEST_UNIT_READY);       /*0x00*/ /* sd,st */
+       NO_EMULATE(REZERO_UNIT);           /*0x01*/ /* st */
        NO_EMULATE(REQUEST_SENSE);         /*0x03*/
        NO_EMULATE(FORMAT_UNIT);           /*0x04*/
-       NO_EMULATE(READ_BLOCK_LIMITS);     /*0x05*/
+       NO_EMULATE(READ_BLOCK_LIMITS);     /*0x05*/ /* st */
        /*NO_EMULATE(REASSIGN_BLOCKS);       *//*0x07*/
-       /*NO_EMULATE(INITIALIZE_ELEMENT_STATUS); *//*0x07*/
-       NO_EMULATE(READ_6);                /*0x08*/
-       NO_EMULATE(WRITE_6);               /*0x0a*/
-       /*NO_EMULATE(SEEK_6);                *//*0x0b*/
+       NO_EMULATE(INITIALIZE_ELEMENT_STATUS); /*0x07*/ /* ch */
+       NO_EMULATE(READ_6);                /*0x08*/ /* sd,st */
+       NO_EMULATE(WRITE_6);               /*0x0a*/ /* sd,st */
+       NO_EMULATE(SEEK_6);                /*0x0b*/
        /*NO_EMULATE(READ_REVERSE);          *//*0x0f*/
-       NO_EMULATE(WRITE_FILEMARKS);       /*0x10*/
-       NO_EMULATE(SPACE);                 /*0x11*/
+       NO_EMULATE(WRITE_FILEMARKS);       /*0x10*/ /* st */
+       NO_EMULATE(SPACE);                 /*0x11*/ /* st */
        NO_EMULATE(INQUIRY);               /*0x12*/
        /*NO_EMULATE(RECOVER_BUFFERED_DATA); *//*0x14*/
-       /*NO_EMULATE(MODE_SELECT);           *//*0x15*/
+       NO_EMULATE(MODE_SELECT);           /*0x15*/ /* st */
        /*NO_EMULATE(RESERVE);               *//*0x16*/
        /*NO_EMULATE(RELEASE);               *//*0x17*/
        /*NO_EMULATE(COPY);                  *//*0x18*/
-       NO_EMULATE(ERASE);                 /*0x19*/
-       NO_EMULATE(MODE_SENSE);            /*0x1a*/
-       /*NO_EMULATE(START_STOP);            *//*0x1b*/
-       /*NO_EMULATE(RECEIVE_DIAGNOSTIC);    *//*0x1c*/
+       NO_EMULATE(ERASE);                 /*0x19*/ /* st */
+       NO_EMULATE(MODE_SENSE);            /*0x1a*/ /* st */
+       NO_EMULATE(START_STOP);            /*0x1b*/ /* sd,st */
+       NO_EMULATE(RECEIVE_DIAGNOSTIC);    /*0x1c*/
        NO_EMULATE(SEND_DIAGNOSTIC);       /*0x1d*/
-       /*NO_EMULATE(ALLOW_MEDIUM_REMOVAL);  *//*0x1e*/
+       NO_EMULATE(ALLOW_MEDIUM_REMOVAL);  /*0x1e*/
 
        /*NO_EMULATE(SET_WINDOW);            *//*0x24*/
-       NO_EMULATE(READ_CAPACITY);         /*0x25*/
-       NO_EMULATE(READ_10);               /*0x28*/
-       NO_EMULATE(WRITE_10);              /*0x2a*/
-       /*NO_EMULATE(SEEK_10);               *//*0x2b*/
-       /*NO_EMULATE(POSITION_TO_ELEMENT);   *//*0x2b*/
+       NO_EMULATE(READ_CAPACITY);         /*0x25*/ /* sd */
+       NO_EMULATE(READ_10);               /*0x28*/ /* sd */
+       NO_EMULATE(WRITE_10);              /*0x2a*/ /* sd */
+       NO_EMULATE(SEEK_10);               /*0x2b*/ /* st */
+       NO_EMULATE(POSITION_TO_ELEMENT);   /*0x2b*/ /* ch */
        /*NO_EMULATE(WRITE_VERIFY);          *//*0x2e*/
        /*NO_EMULATE(VERIFY);                *//*0x2f*/
        /*NO_EMULATE(SEARCH_HIGH);           *//*0x30*/
        /*NO_EMULATE(SEARCH_EQUAL);          *//*0x31*/
        /*NO_EMULATE(SEARCH_LOW);            *//*0x32*/
-       /*NO_EMULATE(SET_LIMITS);            *//*0x33*/
-       /*NO_EMULATE(PRE_FETCH);             *//*0x34*/
-       /*NO_EMULATE(READ_POSITION);         *//*0x34*/
-       /*NO_EMULATE(SYNCHRONIZE_CACHE);     *//*0x35*/
-       /*NO_EMULATE(LOCK_UNLOCK_CACHE);     *//*0x36*/
-       /*NO_EMULATE(READ_DEFECT_DATA);      *//*0x37*/
-       /*NO_EMULATE(MEDIUM_SCAN);           *//*0x38*/
+       NO_EMULATE(SET_LIMITS);            /*0x33*/
+       NO_EMULATE(PRE_FETCH);             /*0x34*/ /* st! */
+       NO_EMULATE(READ_POSITION);          /*0x34*/ /* st */
+       NO_EMULATE(SYNCHRONIZE_CACHE);      /*0x35*/ /* sd */
+       NO_EMULATE(LOCK_UNLOCK_CACHE);     /*0x36*/
+       NO_EMULATE(READ_DEFECT_DATA);      /*0x37*/
+       NO_EMULATE(MEDIUM_SCAN);           /*0x38*/
        /*NO_EMULATE(COMPARE);               *//*0x39*/
        /*NO_EMULATE(COPY_VERIFY);           *//*0x3a*/
-       /*NO_EMULATE(WRITE_BUFFER);          *//*0x3b*/
-       /*NO_EMULATE(READ_BUFFER);           *//*0x3c*/
+       NO_EMULATE(WRITE_BUFFER);          /*0x3b*/
+       NO_EMULATE(READ_BUFFER);           /*0x3c*/ /* osst */
        /*NO_EMULATE(UPDATE_BLOCK);          *//*0x3d*/
        /*NO_EMULATE(READ_LONG);             *//*0x3e*/
        /*NO_EMULATE(WRITE_LONG);            *//*0x3f*/
        /*NO_EMULATE(CHANGE_DEFINITION);     *//*0x40*/
        /*NO_EMULATE(WRITE_SAME);            *//*0x41*/
-       /*NO_EMULATE(READ_TOC);              *//*0x43*/
-       /*NO_EMULATE(LOG_SELECT);            *//*0x4c*/
-       /*NO_EMULATE(LOG_SENSE);             *//*0x4d*/
+       NO_EMULATE(READ_TOC);              /*0x43*/ /* sr */
+       NO_EMULATE(LOG_SELECT);            /*0x4c*/
+       NO_EMULATE(LOG_SENSE);             /*0x4d*/ /* st! */
        /*NO_EMULATE(MODE_SELECT_10);        *//*0x55*/
        /*NO_EMULATE(RESERVE_10);            *//*0x56*/
        /*NO_EMULATE(RELEASE_10);            *//*0x57*/
-       /*NO_EMULATE(MODE_SENSE_10);         *//*0x5a*/
+       NO_EMULATE(MODE_SENSE_10);         /*0x5a*/ /* scsi_lib */
        /*NO_EMULATE(PERSISTENT_RESERVE_IN); *//*0x5e*/
        /*NO_EMULATE(PERSISTENT_RESERVE_OUT); *//*0x5f*/
        /*           REPORT_LUNS             *//*0xa0*//*Full emulaiton*/
-       /*NO_EMULATE(MOVE_MEDIUM);           *//*0xa5*/
-       /*NO_EMULATE(EXCHANGE_MEDIUM);       *//*0xa6*/
+       NO_EMULATE(MAINTENANCE_IN);           /*0xa3*/ /* IFT alua */
+       NO_EMULATE(MAINTENANCE_OUT);       /*0xa4*/ /* IFT alua */
+       NO_EMULATE(MOVE_MEDIUM);           /*0xa5*/ /* ch */
+       NO_EMULATE(EXCHANGE_MEDIUM);       /*0xa6*/ /* ch */
        /*NO_EMULATE(READ_12);               *//*0xa8*/
        /*NO_EMULATE(WRITE_12);              *//*0xaa*/
        /*NO_EMULATE(WRITE_VERIFY_12);       *//*0xae*/
        /*NO_EMULATE(SEARCH_HIGH_12);        *//*0xb0*/
        /*NO_EMULATE(SEARCH_EQUAL_12);       *//*0xb1*/
        /*NO_EMULATE(SEARCH_LOW_12);         *//*0xb2*/
-       /*NO_EMULATE(READ_ELEMENT_STATUS);   *//*0xb8*/
-       /*NO_EMULATE(SEND_VOLUME_TAG);       *//*0xb6*/
+       NO_EMULATE(READ_ELEMENT_STATUS);   /*0xb8*/ /* ch */
+       NO_EMULATE(SEND_VOLUME_TAG);       /*0xb6*/ /* ch */
        /*NO_EMULATE(WRITE_LONG_2);          *//*0xea*/
-       /*NO_EMULATE(READ_16);               *//*0x88*/
-       /*NO_EMULATE(WRITE_16);              *//*0x8a*/
-       /*NO_EMULATE(VERIFY_16);              *//*0x8f*/
-       /*NO_EMULATE(SERVICE_ACTION_IN);     *//*0x9e*/
-
+       NO_EMULATE(READ_16);               /*0x88*/ /* sd >2TB */
+       NO_EMULATE(WRITE_16);              /*0x8a*/ /* sd >2TB */
+       NO_EMULATE(VERIFY_16);             /*0x8f*/
+       NO_EMULATE(SERVICE_ACTION_IN);     /*0x9e*/ /* sd >2TB */
+
+/* st: QFA_REQUEST_BLOCK, QFA_SEEK_BLOCK might be needed ? */
        /*
          Following commands require emulation.
        */
diff -r 3cdab8f7ff58 -r 49c12b99f537 drivers/xen/scsifront/scsifront.c
--- a/drivers/xen/scsifront/scsifront.c Fri Jan 14 15:45:52 2011 +0000
+++ b/drivers/xen/scsifront/scsifront.c Tue Jan 25 14:09:27 2011 +0000
@@ -357,6 +357,11 @@ static int scsifront_queuecommand(struct
        int ref_cnt;
        uint16_t rqid;
 
+/* debug printk to identify more missing scsi commands
+       printk(KERN_INFO "scsicmd: len=%i, 
0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x",sc->cmd_len,
+               sc->cmnd[0],sc->cmnd[1],sc->cmnd[2],sc->cmnd[3],sc->cmnd[4],
+               sc->cmnd[5],sc->cmnd[6],sc->cmnd[7],sc->cmnd[8],sc->cmnd[9]);
+*/
        if (RING_FULL(&info->ring)) {
                goto out_host_busy;
        }
diff -r 3cdab8f7ff58 -r 49c12b99f537 drivers/xen/scsifront/xenbus.c
--- a/drivers/xen/scsifront/xenbus.c    Fri Jan 14 15:45:52 2011 +0000
+++ b/drivers/xen/scsifront/xenbus.c    Tue Jan 25 14:09:27 2011 +0000
@@ -27,7 +27,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
+
+/*
+* Patched to support >2TB drives
+* 2010, Samuel Kvasnica, IMS Nanofabrication AG
+*/
 
 #include <linux/version.h>
 #include "common.h"
@@ -219,6 +223,7 @@ static int scsifront_probe(struct xenbus
        host->max_channel = 0;
        host->max_lun     = VSCSIIF_MAX_LUN;
        host->max_sectors = (VSCSIIF_SG_TABLESIZE - 1) * PAGE_SIZE / 512;
+       host->max_cmd_len = VSCSIIF_MAX_COMMAND_SIZE;
 
        err = scsi_add_host(host, &dev->dev);
        if (err) {

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [linux-2.6.18-xen] xen, vscsi: >2TB patch, Xen patchbot-linux-2.6.18-xen <=