[dm-devel] multipath-tools/path_priority/pp_alua rtpg.c
bmarzins at sourceware.org
bmarzins at sourceware.org
Wed Apr 8 21:38:45 UTC 2009
CVSROOT: /cvs/dm
Module name: multipath-tools
Branch: RHEL5_FC6
Changes by: bmarzins at sourceware.org 2009-04-08 21:38:45
Modified files:
path_priority/pp_alua: rtpg.c
Log message:
Fix for bz #490633. Adjust SCSI RTPG request buffer size in ALUA prioritizer.
Already upstream.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/path_priority/pp_alua/rtpg.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.3&r2=1.3.2.1
--- multipath-tools/path_priority/pp_alua/rtpg.c 2006/07/13 19:49:23 1.3
+++ multipath-tools/path_priority/pp_alua/rtpg.c 2009/04/08 21:38:44 1.3.2.1
@@ -21,6 +21,7 @@
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
+#include <inttypes.h>
#define __user
#include <scsi/sg.h>
@@ -251,14 +252,38 @@
int
get_asymmetric_access_state(int fd, unsigned int tpg)
{
- unsigned char buf[128];
+ unsigned char *buf;
struct rtpg_data * tpgd;
struct rtpg_tpg_dscr * dscr;
int rc;
+ int buflen;
+ uint32_t scsi_buflen;
- rc = do_rtpg(fd, buf, sizeof(buf));
+ buflen = 128; /* Initial value from old code */
+ buf = (unsigned char *)malloc(buflen);
+ if (!buf) {
+ PRINT_DEBUG ("malloc failed: could not allocate"
+ "%u bytes\n", buflen);
+ return -RTPG_RTPG_FAILED;
+ }
+ rc = do_rtpg(fd, buf, buflen);
if (rc < 0)
return rc;
+ scsi_buflen = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
+ if (buflen < (scsi_buflen + 4)) {
+ free(buf);
+ buf = (unsigned char *)malloc(scsi_buflen);
+ if (!buf) {
+ PRINT_DEBUG ("malloc failed: could not allocate"
+ "%u bytes\n", scsi_buflen);
+ return -RTPG_RTPG_FAILED;
+ }
+ buflen = scsi_buflen;
+ rc = do_rtpg(fd, buf, buflen);
+ if (rc < 0)
+ goto out;
+ }
+
tpgd = (struct rtpg_data *) buf;
rc = -RTPG_TPG_NOT_FOUND;
@@ -274,7 +299,8 @@
}
}
}
-
+out:
+ free(buf);
return rc;
}
More information about the dm-devel
mailing list