multipath-tools: add 'void' for no arguments functions
[multipath-tools/.git] / libmpathpersist / mpath_pr_ioctl.c
index 018e8de..48d36e9 100644 (file)
 #include <string.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
-#include "mpath_pr_ioctl.h" 
-#include <mpath_persist.h> 
+#include <libudev.h>
+#include "mpath_pr_ioctl.h"
+#include "mpath_persist.h"
 
-#include <debug.h>
+#include "debug.h"
 
 #define FILE_NAME_SIZE          256
 
 int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp *resp, int noisy);
 void mpath_format_readkeys(struct prin_resp *pr_buff, int len , int noisy);
 void mpath_format_readfullstatus(struct prin_resp *pr_buff, int len, int noisy);
-int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr, SenseData_t Sensedata, int noisy);
+int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr,
+                             SenseData_t *Sensedata, int noisy);
 void dumpHex(const char* str, int len, int no_ascii);
 int prout_do_scsi_ioctl( char * dev, int rq_servact, int rq_scope,
-                unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy);
+               unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy);
 uint32_t  format_transportids(struct prout_param_descriptor *paramp);
 void mpath_reverse_uint32_byteorder(uint32_t *num);
 void mpath_reverse_uint16_byteorder(uint16_t *num);
@@ -37,7 +39,7 @@ int mpath_isLittleEndian(void);
 extern unsigned int mpath_mx_alloc_len;
 
 int prout_do_scsi_ioctl(char * dev, int rq_servact, int rq_scope,
-                unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy)
+               unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy)
 {
 
        int status, paramlen = 24, ret = 0;
@@ -63,7 +65,7 @@ int prout_do_scsi_ioctl(char * dev, int rq_servact, int rq_scope,
        {
                translen = format_transportids(paramp);
                paramlen = 24 + translen;
-       }       
+       }
        else
                paramlen = 24;
 
@@ -74,7 +76,7 @@ int prout_do_scsi_ioctl(char * dev, int rq_servact, int rq_scope,
        cdb[8] = (unsigned char)(paramlen & 0xff);
 
 retry :
-       condlog(3, "%s: rq_servact = %d", dev, rq_servact); 
+       condlog(3, "%s: rq_servact = %d", dev, rq_servact);
        condlog(3, "%s: rq_scope = %d ", dev, rq_scope);
        condlog(3, "%s: rq_type = %d ", dev, rq_type);
        condlog(3, "%s: paramlen = %d", dev, paramlen);
@@ -112,13 +114,13 @@ retry :
 
        condlog(2, "%s: Duration=%u (ms)", dev, io_hdr.duration);
 
-       status = mpath_translate_response(dev, io_hdr, Sensedata, noisy);
+       status = mpath_translate_response(dev, io_hdr, &Sensedata, noisy);
        condlog(3, "%s: status = %d", dev, status);
 
        if (status == MPATH_PR_SENSE_UNIT_ATTENTION && (retry > 0))
        {
                --retry;
-               condlog(2, "%s: retrying for Unit Attention. Remaining retries = %d", 
+               condlog(2, "%s: retrying for Unit Attention. Remaining retries = %d",
                        dev, retry);
                goto retry;
        }
@@ -133,13 +135,13 @@ retry :
                goto retry;
        }
 
-       close(fd);      
+       close(fd);
        return status;
 }
 
 uint32_t  format_transportids(struct prout_param_descriptor *paramp)
 {
-       int i = 0, len; 
+       int i = 0, len;
        uint32_t buff_offset = 4;
        memset(paramp->private_buffer, 0, MPATH_MAX_PARAM_LEN);
        for (i=0; i < paramp->num_transportid; i++ )
@@ -162,43 +164,43 @@ uint32_t  format_transportids(struct prout_param_descriptor *paramp)
                                break;
                        case MPATH_PROTOCOL_ID_ISCSI:
                                buff_offset += 1;
-                               len = (paramp->trnptid_list[i]->iscsi_name[1] & 0xff)+2;        
+                               len = (paramp->trnptid_list[i]->iscsi_name[1] & 0xff)+2;
                                memcpy(&paramp->private_buffer[buff_offset], &paramp->trnptid_list[i]->iscsi_name,len);
-                               buff_offset += len ; 
+                               buff_offset += len ;
                                break;
                }
 
        }
-       buff_offset -= 4; 
+       buff_offset -= 4;
        paramp->private_buffer[0] = (unsigned char)((buff_offset >> 24) & 0xff);
        paramp->private_buffer[1] = (unsigned char)((buff_offset >> 16) & 0xff);
        paramp->private_buffer[2] = (unsigned char)((buff_offset >> 8) & 0xff);
        paramp->private_buffer[3] = (unsigned char)(buff_offset & 0xff);
-       buff_offset += 4; 
-       return buff_offset;     
+       buff_offset += 4;
+       return buff_offset;
 }
 
 void mpath_format_readkeys( struct prin_resp *pr_buff, int len, int noisy)
 {
-        mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.prgeneration);
-        mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.additional_length);
+       mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.prgeneration);
+       mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.additional_length);
 }
 
 void mpath_format_readresv(struct prin_resp *pr_buff, int len, int noisy)
 {
 
-        mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.prgeneration);
-        mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.additional_length);
+       mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.prgeneration);
+       mpath_reverse_uint32_byteorder(&pr_buff->prin_descriptor.prin_readkeys.additional_length);
 
-        return;
+       return;
 }
 
 void mpath_format_reportcapabilities(struct prin_resp *pr_buff, int len, int noisy)
 {
-        mpath_reverse_uint16_byteorder(&pr_buff->prin_descriptor.prin_readcap.length);
-        mpath_reverse_uint16_byteorder(&pr_buff->prin_descriptor.prin_readcap.pr_type_mask);
+       mpath_reverse_uint16_byteorder(&pr_buff->prin_descriptor.prin_readcap.length);
+       mpath_reverse_uint16_byteorder(&pr_buff->prin_descriptor.prin_readcap.pr_type_mask);
 
-        return;
+       return;
 }
 
 void mpath_format_readfullstatus(struct prin_resp *pr_buff, int len, int noisy)
@@ -303,17 +305,22 @@ int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp * resp, int
        {MPATH_PRIN_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
        snprintf(devname, FILE_NAME_SIZE, "/dev/%s",dev);
-        fd = open(devname, O_WRONLY);
-        if(fd < 0){
-               condlog(0, "%s: Unable to open device ", dev);
+       fd = open(devname, O_WRONLY);
+       if(fd < 0){
+               condlog(0, "%s: Unable to open device ", dev);
                return MPATH_PR_FILE_ERROR;
-         }
+       }
 
        if (mpath_mx_alloc_len)
                mx_resp_len = mpath_mx_alloc_len;
        else
                mx_resp_len = get_prin_length(rq_servact);
 
+       if (mx_resp_len == 0) {
+               status = MPATH_PR_SYNTAX_ERROR;
+               goto out;
+       }
+
        cdb[1] = (unsigned char)(rq_servact & 0x1f);
        cdb[7] = (unsigned char)((mx_resp_len >> 8) & 0xff);
        cdb[8] = (unsigned char)(mx_resp_len & 0xff);
@@ -347,7 +354,7 @@ retry :
        condlog(2, "%s: duration = %u (ms)", dev, io_hdr.duration);
        condlog(2, "%s: persistent reservation in: requested %d bytes but got %d bytes)", dev, mx_resp_len, got);
 
-       status = mpath_translate_response(dev, io_hdr, Sensedata, noisy);
+       status = mpath_translate_response(dev, io_hdr, &Sensedata, noisy);
 
        if (status == MPATH_PR_SENSE_UNIT_ATTENTION && (retry > 0))
        {
@@ -392,26 +399,25 @@ out:
        return status;
 }
 
-int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr, SenseData_t Sensedata, int noisy)
+int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr,
+                             SenseData_t *Sensedata, int noisy)
 {
-       condlog(3, "%s: status driver:%02x host:%02x scsi:%02x", dev, 
+       condlog(3, "%s: status driver:%02x host:%02x scsi:%02x", dev,
                        io_hdr.driver_status, io_hdr.host_status ,io_hdr.status);
        io_hdr.status &= 0x7e;
-       if ((0 == io_hdr.status) && (0 == io_hdr.host_status) &&
-                       (0 == io_hdr.driver_status))
-       {
+       if ((0 == io_hdr.status) &&
+           (0 == io_hdr.host_status) &&
+           (0 == io_hdr.driver_status))
                return MPATH_PR_SUCCESS;
-       }
 
-       switch(io_hdr.status)
-       {
+       switch(io_hdr.status) {
                case SAM_STAT_GOOD:
                        break;
                case SAM_STAT_CHECK_CONDITION:
-                       condlog(2, "%s: Sense_Key=%02x, ASC=%02x ASCQ=%02x", dev,
-                                       Sensedata.Sense_Key, Sensedata.ASC, Sensedata.ASCQ);
-                       switch(Sensedata.Sense_Key)
-                       {
+                       condlog(2, "%s: Sense_Key=%02x, ASC=%02x ASCQ=%02x",
+                               dev, Sensedata->Sense_Key,
+                               Sensedata->ASC, Sensedata->ASCQ);
+                       switch(Sensedata->Sense_Key) {
                                case NO_SENSE:
                                        return MPATH_PR_NO_SENSE;
                                case RECOVERED_ERROR:
@@ -444,8 +450,7 @@ int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr, SenseData_t S
                        return  MPATH_PR_OTHER;
        }
 
-       switch(io_hdr.host_status)
-       {
+       switch(io_hdr.host_status) {
                case DID_OK :
                        break;
                default :
@@ -461,7 +466,7 @@ int mpath_translate_response (char * dev, struct sg_io_hdr io_hdr, SenseData_t S
        return MPATH_PR_SUCCESS;
 }
 
-int mpath_isLittleEndian()
+int mpath_isLittleEndian(void)
 {
        int num = 1;
        if(*(char *)&num == 1)
@@ -516,7 +521,6 @@ void
 dumpHex(const char* str, int len, int log)
 {
        const char * p = str;
-       const char * formatstr;
        unsigned char c;
        char buff[82];
        const int bpstart = 5;
@@ -525,7 +529,6 @@ dumpHex(const char* str, int len, int log)
 
        if (len <= 0)
                return;
-       formatstr = (0 == log) ? "%.76s\n" : "%.56s\n";
        memset(buff, ' ', 80);
        buff[80] = '\0';
        for (k = 0; k < len; k++) {
@@ -556,21 +559,25 @@ dumpHex(const char* str, int len, int log)
 
 int get_prin_length(int rq_servact)
 {
-        int mx_resp_len;
-        switch (rq_servact)
-        {
-                case MPATH_PRIN_RKEY_SA:
-                        mx_resp_len =  sizeof(struct prin_readdescr);
-                        break;
-                case MPATH_PRIN_RRES_SA :
-                        mx_resp_len =  sizeof(struct prin_resvdescr);
-                        break;
-                case MPATH_PRIN_RCAP_SA :
-                        mx_resp_len = sizeof(struct prin_capdescr);
-                        break;
-                case MPATH_PRIN_RFSTAT_SA:
-                        mx_resp_len = sizeof(struct print_fulldescr_list) + sizeof(struct prin_fulldescr *)*32;
-                        break;
-        }
-        return mx_resp_len;
+       int mx_resp_len;
+       switch (rq_servact)
+       {
+               case MPATH_PRIN_RKEY_SA:
+                       mx_resp_len =  sizeof(struct prin_readdescr);
+                       break;
+               case MPATH_PRIN_RRES_SA :
+                       mx_resp_len =  sizeof(struct prin_resvdescr);
+                       break;
+               case MPATH_PRIN_RCAP_SA :
+                       mx_resp_len = sizeof(struct prin_capdescr);
+                       break;
+               case MPATH_PRIN_RFSTAT_SA:
+                       mx_resp_len = sizeof(struct print_fulldescr_list) + sizeof(struct prin_fulldescr *)*32;
+                       break;
+               default:
+                       condlog(0, "invalid service action, %d", rq_servact);
+                       mx_resp_len = 0;
+                       break;
+       }
+       return mx_resp_len;
 }