CVSROOT: /cvs/dm Module name: multipath-tools Branch: RHEL5_FC6 Changes by: bmarzins@xxxxxxxxxxxxxx 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; } -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel