

Patch from Stephen Cameron <steve.cameron@hp.com>

Add CCISS_GETLUNINFO ioctl.

This ioctl returns the LUNID, number of partitions, and current number of
opens on a logical volume.  Used by the array config utility or any app that
needs to send passthrough commands to a particular logical disk.




 drivers/block/cciss.c       |   18 ++++++++++++++++++
 include/linux/cciss_ioctl.h |    6 ++++++
 2 files changed, 24 insertions(+)

diff -puN drivers/block/cciss.c~cciss-getluninfo-ioctl drivers/block/cciss.c
--- 25/drivers/block/cciss.c~cciss-getluninfo-ioctl	Thu Feb 27 14:38:26 2003
+++ 25-akpm/drivers/block/cciss.c	Thu Feb 27 14:38:26 2003
@@ -577,6 +577,24 @@ static int cciss_ioctl(struct inode *ino
 	case CCISS_REVALIDVOLS:
                 return( revalidate_allvol(inode->i_rdev));
 
+ 	case CCISS_GETLUNINFO: {
+ 		LogvolInfo_struct luninfo;
+ 		struct gendisk *disk = hba[ctlr]->gendisk[dsk];
+ 		drive_info_struct *drv = &hba[ctlr]->drv[dsk];
+ 		int i;
+ 		
+ 		luninfo.LunID = drv->LunID;
+ 		luninfo.num_opens = drv->usage_count;
+ 		luninfo.num_parts = 0;
+ 		/* count partitions 1 to 15 with sizes > 0 */
+ 		for(i=1; i <MAX_PART; i++)
+ 			if (disk->part[i].nr_sects != 0)
+ 				luninfo.num_parts++;
+ 		if (copy_to_user((void *) arg, &luninfo,
+ 				sizeof(LogvolInfo_struct)))
+ 			return -EFAULT;
+ 		return(0);
+ 	}
 	case CCISS_DEREGDISK:
 		return( deregister_disk(ctlr,dsk));
 
diff -puN include/linux/cciss_ioctl.h~cciss-getluninfo-ioctl include/linux/cciss_ioctl.h
--- 25/include/linux/cciss_ioctl.h~cciss-getluninfo-ioctl	Thu Feb 27 14:38:26 2003
+++ 25-akpm/include/linux/cciss_ioctl.h	Thu Feb 27 14:38:26 2003
@@ -169,6 +169,11 @@ typedef struct _IOCTL_Command_struct {
   BYTE			   *buf;
 } IOCTL_Command_struct;
 
+typedef struct _LogvolInfo_struct{
+	__u32	LunID;
+	int	num_opens;  /* number of opens on the logical volume */
+	int	num_parts;  /* number of partitions configured on logvol */
+} LogvolInfo_struct;
 
 #define CCISS_GETPCIINFO _IOR(CCISS_IOC_MAGIC, 1, cciss_pci_info_struct)
 
@@ -190,5 +195,6 @@ typedef struct _IOCTL_Command_struct {
 #define CCISS_REGNEWDISK  _IOW(CCISS_IOC_MAGIC, 13, int)
 
 #define CCISS_REGNEWD	   _IO(CCISS_IOC_MAGIC, 14)
+#define CCISS_GETLUNINFO   _IOR(CCISS_IOC_MAGIC, 17, LogvolInfo_struct)
 
 #endif  

_
