linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* AACRAID driver update patch version - 26400
@ 2010-04-08  3:55 Rajashekhara, Mahesh
  2010-05-01 19:03 ` James Bottomley
  0 siblings, 1 reply; 9+ messages in thread
From: Rajashekhara, Mahesh @ 2010-04-08  3:55 UTC (permalink / raw)
  To: linux-scsi@vger.kernel.org, James.Bottomley@suse.de; +Cc: AACRAID

[-- Attachment #1: Type: text/plain, Size: 799 bytes --]

(Resending in plain text as the earlier email got bounced)

Hi All,

We have prepared driver patch from latest driver source.

We worked on a issue related to SMARTCTL([Bugme-new] [Bug 15623] New: doesn't allow SMART-passthrough on Adaptec Series 5 controller) 
and found the  root cause of this problem. We have responded to this bug, stating that we will be releasing the driver patch for addressing this problem.
Also, in our recent program releases we have addressed some more issues.

Please look into the release notes.

Please find the attachments.
1. aacraid-version-26400-040510-patch - Driver patch
2. aacraid-scsi-misc-2.6-warnings.txt - Warning message text 
3. Release notes


Thanks & Regards,
Mahesh
Linux Driver Development Engineer,
Adaptec ODC, Bangalore



[-- Attachment #2: aacraid-version-26400-040510-patch --]
[-- Type: application/octet-stream, Size: 12879 bytes --]

diff -ru a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
--- a/drivers/scsi/aacraid/aachba.c	2010-04-03 05:49:52.000000000 -0700
+++ b/drivers/scsi/aacraid/aachba.c	2010-04-07 12:35:36.468017040 -0700
@@ -109,6 +109,16 @@
 #define BYTE2(x) (unsigned char)((x) >> 16)
 #define BYTE3(x) (unsigned char)((x) >> 24)
 
+
+/* ATA pass thru commands */
+#ifndef ATA_12
+#define ATA_12                0xa1      /* 12-byte pass-thru */
+#endif
+
+#ifndef ATA_16
+#define ATA_16                0x85      /* 16-byte pass-thru */
+#endif
+
 /*------------------------------------------------------------------------------
  *              S T R U C T S / T Y P E D E F S
  *----------------------------------------------------------------------------*/
@@ -213,6 +223,11 @@
 MODULE_PARM_DESC(expose_physicals, "Expose physical components of the arrays."
 	" -1=protect 0=off, 1=on");
 
+int expose_hidden_space = -1;
+module_param(expose_hidden_space, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(expose_hidden_space, "Expose hidden space of the Array."
+	" -1=protect 0=off, 1=on");
+
 int aac_reset_devices;
 module_param_named(reset_devices, aac_reset_devices, int, S_IRUGO|S_IWUSR);
 MODULE_PARM_DESC(reset_devices, "Force an adapter reset at initialization.");
@@ -296,7 +311,6 @@
 	/* Do not set XferState to zero unless receives a response from F/W */
 	if (status >= 0)
 		aac_fib_complete(fibptr);
-
 	/* Send a CT_COMMIT_CONFIG to enable discovery of devices */
 	if (status >= 0) {
 		if ((aac_commit == 1) || commit_flag) {
@@ -328,6 +342,16 @@
 	return status;
 }
 
+static void aac_expose_phy_device(struct scsi_cmnd *scsicmd)
+{
+	char inq_data;
+	scsi_sg_copy_to_buffer(scsicmd,  &inq_data, sizeof(inq_data));
+	if ((inq_data & 0x20) && (inq_data & 0x1f) == TYPE_DISK) {
+		inq_data &= 0xdf;
+		scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
+	}
+}
+
 /**
  *	aac_get_containers	-	list containers
  *	@common: adapter to probe
@@ -1158,6 +1182,7 @@
 	srbcmd->lun      = cpu_to_le32(cmd->device->lun);
 	srbcmd->flags    = cpu_to_le32(flag);
 	timeout = cmd->request->timeout/HZ;
+
 	if (timeout == 0)
 		timeout = 1;
 	srbcmd->timeout  = cpu_to_le32(timeout);  // timeout in seconds
@@ -1289,7 +1314,6 @@
 			if (!fibptr)
 				return -ENOMEM;
 		}
-
 	}
 
 
@@ -1647,6 +1671,27 @@
 		count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
 		break;
 	}
+
+	if (expose_hidden_space <= 0) {
+		if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
+			int cid = scmd_id(scsicmd);
+			dprintk((KERN_DEBUG "aacraid: Illegal lba\n"));
+			scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
+				SAM_STAT_CHECK_CONDITION;
+			set_sense(&dev->fsa_dev[cid].sense_data,
+				HARDWARE_ERROR,
+				SENCODE_INTERNAL_TARGET_FAILURE,
+				ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
+			memcpy(scsicmd->sense_buffer,
+				&dev->fsa_dev[cid].sense_data,
+				min_t(size_t,
+				sizeof(dev->fsa_dev[cid].sense_data),
+				SCSI_SENSE_BUFFERSIZE));
+			scsicmd->scsi_done(scsicmd);
+			return 1;
+		}
+	}
+
 	dprintk((KERN_DEBUG "aac_read[cpu %d]: lba = %llu, t = %ld.\n",
 	  smp_processor_id(), (unsigned long long)lba, jiffies));
 	if (aac_adapter_bounds(dev,scsicmd,lba))
@@ -1727,6 +1772,26 @@
 		count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
 		fua = scsicmd->cmnd[1] & 0x8;
 	}
+
+	if (expose_hidden_space <= 0) {
+		if ((lba + count) > (dev->fsa_dev[scmd_id(scsicmd)].size)) {
+			int cid = scmd_id(scsicmd);
+			dprintk((KERN_DEBUG "aacraid: Illegal lba\n"));
+			scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
+			SAM_STAT_CHECK_CONDITION;
+			set_sense(&dev->fsa_dev[cid].sense_data,
+			HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
+			ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
+			memcpy(scsicmd->sense_buffer,
+			&dev->fsa_dev[cid].sense_data,
+			min_t(size_t,
+			sizeof(dev->fsa_dev[cid].sense_data),
+			SCSI_SENSE_BUFFERSIZE));
+
+			scsicmd->scsi_done(scsicmd);
+			return 1;
+		}
+	}
 	dprintk((KERN_DEBUG "aac_write[cpu %d]: lba = %llu, t = %ld.\n",
 	  smp_processor_id(), (unsigned long long)lba, jiffies));
 	if (aac_adapter_bounds(dev,scsicmd,lba))
@@ -2572,6 +2637,11 @@
 		       - le32_to_cpu(srbreply->data_xfer_length));
 
 	scsi_dma_unmap(scsicmd);
+	/* expose physical device if expose_physicald flag is on */
+	if (scsicmd->cmnd[0] == INQUIRY
+	&& !(scsicmd->cmnd[1] & 0x01)
+	&& expose_physicals > 0)
+		aac_expose_phy_device(scsicmd);
 
 	/*
 	 * First check the fib status
@@ -2678,8 +2748,22 @@
 			scsicmd->cmnd[0],
 			le32_to_cpu(srbreply->scsi_status));
 #endif
-		scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8;
-		break;
+		if ((scsicmd->cmnd[0] == ATA_12)
+		|| (scsicmd->cmnd[0] == ATA_16)) {
+			if (scsicmd->cmnd[2] & (0x01 << 5)) {
+				scsicmd->result = DID_OK << 16
+				| COMMAND_COMPLETE << 8;
+				break;
+			} else {
+				scsicmd->result = DID_ERROR << 16
+				| COMMAND_COMPLETE << 8;
+				break;
+			}
+		} else {
+			scsicmd->result = DID_ERROR << 16
+			| COMMAND_COMPLETE << 8;
+			break;
+		}
 	}
 	if (le32_to_cpu(srbreply->scsi_status) == SAM_STAT_CHECK_CONDITION) {
 		int len;
diff -ru a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
--- a/drivers/scsi/aacraid/aacraid.h	2010-04-03 05:49:52.000000000 -0700
+++ b/drivers/scsi/aacraid/aacraid.h	2010-04-07 14:17:18.409380952 -0700
@@ -1,6 +1,7 @@
 #ifndef dprintk
 # define dprintk(x)
 #endif
+#define AAC_DEBUG_INSTRUMENT_AIF_DELETE
 /* eg: if (nblank(dprintk(x))) */
 #define _nblank(x) #x
 #define nblank(x) _nblank(x)[0]
@@ -12,7 +13,7 @@
  *----------------------------------------------------------------------------*/
 
 #ifndef AAC_DRIVER_BUILD
-# define AAC_DRIVER_BUILD 24702
+# define AAC_DRIVER_BUILD 26400
 # define AAC_DRIVER_BRANCH "-ms"
 #endif
 #define MAXIMUM_NUM_CONTAINERS	32
@@ -1038,7 +1039,6 @@
 	u8			msi;
 	int			management_fib_count;
 	spinlock_t		manage_lock;
-
 };
 
 #define aac_adapter_interrupt(dev) \
@@ -1065,6 +1065,10 @@
 #define aac_adapter_ioremap(dev, size) \
 	(dev)->a_ops.adapter_ioremap(dev, size)
 
+#define aac_adapter_intr(dev) \
+	((dev)->a_ops.adapter_intr((dev)->pdev->irq, \
+	(void *)dev))
+
 #define aac_adapter_deliver(fib) \
 	((fib)->dev)->a_ops.adapter_deliver(fib)
 
diff -ru a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
--- a/drivers/scsi/aacraid/commctrl.c	2010-04-03 05:49:52.000000000 -0700
+++ b/drivers/scsi/aacraid/commctrl.c	2010-04-07 12:52:53.803318104 -0700
@@ -128,13 +128,13 @@
 		retval = aac_fib_send(le16_to_cpu(kfib->header.Command), fibptr,
 				le16_to_cpu(kfib->header.Size) , FsaNormal,
 				1, 1, NULL, NULL);
-		if (retval) {
-			goto cleanup;
-		}
 		if (aac_fib_complete(fibptr) != 0) {
+			if (!retval)
 			retval = -EINVAL;
-			goto cleanup;
+		goto cleanup;
 		}
+		if (retval)
+			goto cleanup;
 	}
 	/*
 	 *	Make sure that the size returned by the adapter (which includes
diff -ru a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
--- a/drivers/scsi/aacraid/commsup.c	2010-04-03 05:49:52.000000000 -0700
+++ b/drivers/scsi/aacraid/commsup.c	2010-04-07 15:11:44.857805312 -0700
@@ -493,7 +493,6 @@
 		spin_unlock_irqrestore(&dev->manage_lock, mflags);
 		spin_lock_irqsave(&fibptr->event_lock, flags);
 	}
-
 	if (aac_adapter_deliver(fibptr) != 0) {
 		printk(KERN_ERR "aac_fib_send: returned -EBUSY\n");
 		if (wait) {
@@ -505,7 +504,6 @@
 		return -EBUSY;
 	}
 
-
 	/*
 	 *	If the caller wanted us to wait for response wait now.
 	 */
@@ -534,6 +532,13 @@
 						  "update mother board BIOS or consider utilizing one of\n"
 						  "the SAFE mode kernel options (acpi, apic etc)\n");
 					}
+					spin_lock_irqsave(&fibptr->event_lock,
+					flags);
+					fibptr->done = 2;
+					spin_unlock_irqrestore(
+					&fibptr->event_lock,
+					flags);
+					dprintk((KERN_ERR "aacraid: sync. command timed out after 180 seconds\n"));
 					return -ETIMEDOUT;
 				}
 				if ((blink = aac_adapter_check_health(dev)) > 0) {
@@ -550,7 +555,6 @@
 			/* Do nothing ... satisfy
 			 * down_interruptible must_check */
 		}
-
 		spin_lock_irqsave(&fibptr->event_lock, flags);
 		if (fibptr->done == 0) {
 			fibptr->done = 2; /* Tell interrupt we aborted */
@@ -725,10 +729,11 @@
 	struct hw_fib * hw_fib = fibptr->hw_fib_va;
 
 	/*
-	 *	Check for a fib which has already been completed
+	 *	Check for a fib which has already been completed or with a
+	 *	status wait timeout
 	 */
 
-	if (hw_fib->header.XferState == 0)
+	if (hw_fib->header.XferState == 0 || fibptr->done == 2)
 		return 0;
 	/*
 	 *	If we plan to do anything check the structure type first.
@@ -748,7 +753,6 @@
 		return 0;
 	}
 	spin_unlock_irqrestore(&fibptr->event_lock, flags);
-
 	if((hw_fib->header.XferState & cpu_to_le32(SentFromHost)) &&
 		(hw_fib->header.XferState & cpu_to_le32(AdapterProcessed)))
 	{
@@ -966,6 +970,18 @@
 			device_config_needed =
 			  (((__le32 *)aifcmd->data)[0] ==
 			    cpu_to_le32(AifEnAddJBOD)) ? ADD : DELETE;
+
+			if (device_config_needed == ADD) {
+				device = scsi_device_lookup(
+				dev->scsi_host_ptr,
+				channel,
+				id,
+				lun);
+				if (device) {
+					scsi_remove_device(device);
+					scsi_device_put(device);
+				}
+			}
 			break;
 
 		case AifEnEnclosureManagement:
@@ -1246,19 +1262,27 @@
 	aac->fsa_dev = NULL;
 	quirks = aac_get_driver_ident(index)->quirks;
 	if (quirks & AAC_QUIRK_31BIT) {
-		if (((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(31)))) ||
-		  ((retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(31)))))
+		retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(31));
+		if (retval)
+			goto out;
+		retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(31));
+		if (retval)
 			goto out;
 	} else {
-		if (((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32)))) ||
-		  ((retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(32)))))
+		retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32));
+		if (retval)
+			goto out;
+		retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(32));
+		if (retval)
 			goto out;
 	}
 	if ((retval = (*(aac_get_driver_ident(index)->init))(aac)))
 		goto out;
-	if (quirks & AAC_QUIRK_31BIT)
-		if ((retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32))))
+	if (quirks & AAC_QUIRK_31BIT) {
+		retval = pci_set_dma_mask(aac->pdev, DMA_BIT_MASK(32));
+		if (retval)
 			goto out;
+	}
 	if (jafo) {
 		aac->thread = kthread_run(aac_command_thread, aac, aac->name);
 		if (IS_ERR(aac->thread)) {
diff -ru a/drivers/scsi/aacraid/dpcsup.c b/drivers/scsi/aacraid/dpcsup.c
--- a/drivers/scsi/aacraid/dpcsup.c	2010-04-03 05:49:52.000000000 -0700
+++ b/drivers/scsi/aacraid/dpcsup.c	2010-04-07 14:51:38.245238304 -0700
@@ -348,7 +348,6 @@
 				aac_fib_complete(fib);
 				aac_fib_free(fib);
 			}
-
 		}
 		return 0;
 	}
diff -ru a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
--- a/drivers/scsi/aacraid/linit.c	2010-04-03 05:49:52.000000000 -0700
+++ b/drivers/scsi/aacraid/linit.c	2010-04-07 14:13:47.827394280 -0700
@@ -181,8 +181,8 @@
 	{ aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* PERC 3/Di (Boxster/PERC3DiB) */
 	{ aac_rx_init, "aacraid",  "ADAPTEC ", "catapult        ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* catapult */
 	{ aac_rx_init, "aacraid",  "ADAPTEC ", "tomcat          ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* tomcat */
-	{ aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2120S   ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG },		      /* Adaptec 2120S (Crusader) */
-	{ aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2200S   ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG },		      /* Adaptec 2200S (Vulcan) */
+	{ aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2120S   ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Adaptec 2120S (Crusader) */
+	{ aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2200S   ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Adaptec 2200S (Vulcan) */
 	{ aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2200S   ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2200S (Vulcan-2m) */
 	{ aac_rx_init, "aacraid",  "Legend  ", "Legend S220     ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Legend S220 (Legend Crusader) */
 	{ aac_rx_init, "aacraid",  "Legend  ", "Legend S230     ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Legend S230 (Legend Vulcan) */
@@ -884,10 +884,7 @@
 	if (le32_to_cpu(dev->adapter_info.serial[0]) != 0xBAD0)
 		len = snprintf(buf, PAGE_SIZE, "%06X\n",
 		  le32_to_cpu(dev->adapter_info.serial[0]));
-	if (len &&
-	  !memcmp(&dev->supplement_adapter_info.MfgPcbaSerialNo[
-	    sizeof(dev->supplement_adapter_info.MfgPcbaSerialNo)-len],
-	  buf, len-1))
+	if (len)
 		len = snprintf(buf, PAGE_SIZE, "%.*s\n",
 		  (int)sizeof(dev->supplement_adapter_info.MfgPcbaSerialNo),
 		  dev->supplement_adapter_info.MfgPcbaSerialNo);

[-- Attachment #3: aacraid-scsi-misc-2.6-warnings.txt --]
[-- Type: text/plain, Size: 1450 bytes --]


This attached patch is against current scsi-misc-2.6.

ObligatoryDisclaimer: Please accept my condolences regarding Outlook's handling of patch attachments.

Signed-off-by: Mahesh Rajashekhara <aacraid@adaptec.com>

 drivers/scsi/aacraid/aachba.c   |   92 ++++++++++++++++++++++++++++++++++++++--
 drivers/scsi/aacraid/aacraid.h  |    8 ++-
 drivers/scsi/aacraid/commctrl.c |    8 +--
 drivers/scsi/aacraid/commsup.c  |   48 +++++++++++++++-----
 drivers/scsi/aacraid/dpcsup.c   |    1 
 drivers/scsi/aacraid/linit.c    |    9 +--
 6 files changed, 137 insertions(+), 29 deletions(-)

Regards - Mahesh Rajashekhara
WARNING: suspect code indent for conditional statements (24, 24)
#231: FILE: drivers/scsi/aacraid/commctrl.c:132:
+			if (!retval)
 			retval = -EINVAL;

WARNING: line over 80 characters
#269: FILE: drivers/scsi/aacraid/commsup.c:541:
+					dprintk((KERN_ERR "aacraid: sync. command timed out after 180 seconds\n"));

WARNING: line over 80 characters
#331: FILE: drivers/scsi/aacraid/commsup.c:1268:
+		retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(31));

WARNING: line over 80 characters
#340: FILE: drivers/scsi/aacraid/commsup.c:1275:
+		retval = pci_set_consistent_dma_mask(aac->pdev, DMA_BIT_MASK(32));

total: 0 errors, 4 warnings, 322 lines checked

/tmp/kd.diff.16755.3 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

[-- Attachment #4: Release-notes.txt --]
[-- Type: text/plain, Size: 1997 bytes --]

AACRAID Driver for Linux - version 26400
----------------------------------------

Addressed issues:
----------------
1. The default driver setting is "expose_physicals=0", which means raw physical drives not exposed to OS. 
   If the user wants to expose connected physical drives, enable "expose_physicals" module parameter.
   With the new JBOD firmware, physical drives are not available for "expose_physicals>0".
   In function "aac_expose_phy_device", added to reset the appropriate bit in the first byte of inquiry data.
   This fix exposes the connected physical drives.

2. Added support for handling ATA pass-through commands.
   When the "CC" bit is set by the host in ATA pass-through CDB, driver is supposed to return DID_OK
   When the "CC" bit is reset by the host, driver should return DID_ERROR

3. Firmware exposes lesser container capacity than the actual one.
   It exposes [actaul size - hidden reserved space(10MB)] to the OS, IO's to the 10MB should be prohibhited from the Linux driver.		
   When the IO's falls into hidden reserved space, driver internally sets sensekey to HARDWARE_ERROR and sends notification to the SCSI mid layer.
   Added "expose_hidden_space" flag, by default the fix will be executed. 
   Only if the user sets "expose_hidden_space=1", user can access beyond the array reported size(hidden reserved space 10MB).

4. Based on the notification from firmware, the driver sets up SDV_OFFLINE flag for a deleted array and 
   the SCSI mid layer comes to know the attached  SCSI device has gone offline. But with 
   this notification, scsi device entries are not being removed. 
   Enabled "AAC_DEBUG_INSTRUMENT_AIF_DELETE" flag  in the header file, with this flag the driver uses "scsi_remove_device".	
   On the notification from firmware, the driver calls "scsi_remove_device" for the deleted array.
   This call not only informs the scsi device status to the SCSI mid layer but also
   removes corresponding scsi device entry from the linux sysfs.	

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

end of thread, other threads:[~2010-05-17  2:59 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-08  3:55 AACRAID driver update patch version - 26400 Rajashekhara, Mahesh
2010-05-01 19:03 ` James Bottomley
2010-05-10 11:05   ` Rajashekhara, Mahesh
2010-05-10 11:12   ` [PATCH 2/5] AACRAID driver update Rajashekhara, Mahesh
2010-05-17  2:54     ` James Bottomley
2010-05-10 11:17   ` [PATCH 3/5] " Rajashekhara, Mahesh
2010-05-10 11:24   ` [PATCH 4/5] " Rajashekhara, Mahesh
2010-05-17  2:59     ` James Bottomley
2010-05-10 11:29   ` [PATCH 5/5] " Rajashekhara, Mahesh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).