diff --git a/.cvsignore b/.cvsignore index f542d8d..bdf0f72 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,8 +1 @@ -multipath-tools-0.4.5.59.tgz -multipath-tools-0.4.7.tgz -multipath-tools-0.4.7.1.tgz -multipath-tools-0.4.7.2.tgz -multipath-tools-0.4.7.3.tgz -multipath-tools-0.4.7.4.tgz -multipath-tools-0.4.7.head1.tgz -multipath-tools-0.4.7.head2.tgz +multipath-tools-080519.tgz diff --git a/cciss_id.patch b/cciss_id.patch new file mode 100644 index 0000000..a84c650 --- /dev/null +++ b/cciss_id.patch @@ -0,0 +1,199 @@ +Index: multipath-tools-080519/cciss_id/cciss_id.c +=================================================================== +--- /dev/null ++++ multipath-tools-080519/cciss_id/cciss_id.c +@@ -0,0 +1,128 @@ ++/* ++ ***************************************************************************** ++ * * ++ * (C) Copyright 2007 Hewlett-Packard Development Company, L.P * ++ * * ++ * This program is free software; you can redistribute it and/or modify it * ++ * under the terms of the GNU General Public License as published by the Free* ++ * Software Foundation; either version 2 of the License, or (at your option)* ++ * any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, but * ++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY* ++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * ++ * for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License along * ++ * with this program; if not, write to the Free Software Foundation, Inc., * ++ * 675 Mass Ave, Cambridge, MA 02139, USA. * ++ * * ++ * * ++ * * ++ * * ++ ***************************************************************************** ++*/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define LEN_PAGE83_CCISSDEV 0x20 /* Page length of 83h for cciss devices */ ++#define LEN_DEVICEFILE 255 /* Length of device file name */ ++#define PATH_CCISSDEV "/dev/cciss/" /* Path of CCISS devices */ ++int main(int argc, char *argv[]) ++{ ++ const int resp_len = LEN_PAGE83_CCISSDEV; ++ unsigned char resp[resp_len+1]; ++ char dev_name[LEN_DEVICEFILE] = "\0" ; ++ unsigned int lun_id = 0; ++ int fd, status, i; ++ struct stat file_stat; ++ ++ LogvolInfo_struct lvi; // logical "volume" info ++ IOCTL_Command_struct cic; // cciss ioctl command ++ ++ if(argc < 2) { ++ fprintf(stderr, "Usage: %s /dev/cciss/cNdN\n", argv[0]); ++ return -1; ++ } ++ ++ if ( strncmp(PATH_CCISSDEV, argv[1], strlen(PATH_CCISSDEV) ) != 0 ) { ++ if ( strchr(argv[1], '!') ) { ++ sprintf(dev_name, "%s%s", PATH_CCISSDEV, ++ strchr(argv[1], '!')+1); ++ } ++ //fprintf(stderr, "dev_name is: -%s-", dev_name); ++ } else { ++ sprintf(dev_name, "%s", argv[1]); ++ } ++ ++ if (stat(dev_name, &file_stat) < 0) { ++ fprintf (stderr, "Stat failed for file %s. Errno=%d\n", dev_name, errno); ++ return -1; ++ } ++ if (!S_ISBLK(file_stat.st_mode)) { ++ fprintf (stderr, "File %s is not a block device. \n", dev_name); ++ return -1; ++ } ++ ++ ++ if((fd = open(dev_name, O_RDWR)) < 0) { ++ fprintf(stderr, "Open failed for file %s. Errno=%d\n", dev_name, errno); ++ return -1; ++ } ++ ++ if (ioctl(fd, CCISS_GETLUNINFO, &lvi) < 0) { ++ fprintf(stderr, "IOCTL failure CCISS_GETLUNINFO for file %s Errno=%d\n", dev_name, errno); ++ close(fd); ++ return -1; ++ } else { ++ lun_id = lvi.LunID; ++ } ++ ++ memset(&cic, 0, sizeof(IOCTL_Command_struct)); ++ memset(resp, 0, resp_len+1); ++ cic.LUN_info.LogDev.Mode = 0x01; /* logical volume addressing */ ++ cic.LUN_info.LogDev.VolId = lun_id & 0x3FFFFFFF; ++ cic.Request.CDBLen = 6; ++ cic.Request.Type.Type = TYPE_CMD; // It is a command. ++ cic.Request.Type.Attribute = ATTR_SIMPLE; ++ cic.Request.Type.Direction = XFER_READ; // Read ++ cic.Request.Timeout = 0; // Don't time out ++ cic.Request.CDB[0] = 0x12; ++ cic.Request.CDB[1] = 0x01; /* EVPD (enable vital product data) */ ++ cic.Request.CDB[2] = 0x83; ++ cic.Request.CDB[4] = resp_len & 0xFF; ++ cic.buf_size = resp_len; ++ cic.buf = resp; ++ status = ioctl(fd, CCISS_PASSTHRU, &cic); ++ if(status) { ++ fprintf(stderr, "IOCTL failure CCISS_PASSTHRU for file %s Errno=%d\n", dev_name, errno); ++ close(fd); ++ return -1; ++ } ++ else { ++ if ((cic.error_info.CommandStatus | cic.error_info.ScsiStatus )) { ++ fprintf(stderr, "CCISS command status error for Inquiry on %s\n", ++ dev_name); ++ close(fd); ++ return -1; ++ } ++ printf("3"); ++ for(i=8; i<24; i++) ++ /* printf("Buff[%d] =%x\n", i, resp[i]); */ ++ printf("%02x", resp[i]); ++ printf("\n"); ++ } ++ ++ close(fd); ++ return 0; ++} +Index: multipath-tools-080519/cciss_id/Makefile +=================================================================== +--- /dev/null ++++ multipath-tools-080519/cciss_id/Makefile +@@ -0,0 +1,47 @@ ++ ++# ***************************************************************************** ++# * * ++# * (C) Copyright 2007 Hewlett-Packard Development Company, L.P * ++# * * ++# * This program is free software; you can redistribute it and/or modify it * ++# * under the terms of the GNU General Public License as published by the Free* ++# * Software Foundation; either version 2 of the License, or (at your option)* ++# * any later version. * ++# * * ++# * This program is distributed in the hope that it will be useful, but * ++# * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY* ++# * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * ++# * for more details. * ++# * * ++# * You should have received a copy of the GNU General Public License along * ++# * with this program; if not, write to the Free Software Foundation, Inc., * ++# * 675 Mass Ave, Cambridge, MA 02139, USA. * ++# * * ++# * * ++# * * ++# * * ++# ***************************************************************************** ++ ++include ../Makefile.inc ++ ++OBJS = cciss_id.o ++CFLAGS = -pipe -g -Wall -Wunused -Wstrict-prototypes ++ ++LDFLAGS = -ldevmapper ++ ++EXEC = cciss_id ++ ++all: $(EXEC) ++ ++$(EXEC): $(OBJS) ++ $(CC) $(OBJS) -o $(EXEC) $(LDFLAGS) ++ ++install: ++ $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) ++ $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ ++ ++uninstall: ++ rm $(DESTDIR)$(bindir)/$(EXEC) ++ ++clean: ++ rm -f core.* *.o $(EXEC) *.gz +Index: multipath-tools-080519/Makefile +=================================================================== +--- multipath-tools-080519.orig/Makefile ++++ multipath-tools-080519/Makefile +@@ -25,7 +25,8 @@ BUILDDIRS = \ + libmultipath/checkers \ + multipath \ + multipathd \ +- kpartx ++ kpartx \ ++ cciss_id + + ifeq ($(MULTIPATH_VERSION),) + VERSION = $(shell basename ${PWD} | cut -d'-' -f3) diff --git a/config_files.patch b/config_files.patch new file mode 100644 index 0000000..ea5b1c3 --- /dev/null +++ b/config_files.patch @@ -0,0 +1,936 @@ +diff -urpN multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-clean/multipath.conf.annotated multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-patched/multipath.conf.annotated +--- multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-clean/multipath.conf.annotated 2008-04-30 06:25:16.000000000 -0500 ++++ multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-patched/multipath.conf.annotated 2008-05-02 18:22:48.000000000 -0500 +@@ -19,6 +19,7 @@ + # # name : polling_interval + # # scope : multipathd + # # desc : interval between two path checks in seconds ++# # values : n > 0 + # # default : 5 + # # + # polling_interval 10 +@@ -38,6 +39,13 @@ + # # scope : multipath + # # desc : the default path grouping policy to apply to unspecified + # # multipaths ++# # values : failover = 1 path per priority group ++# # multibus = all valid paths in 1 priority group ++# # group_by_serial = 1 priority group per detected serial ++# # number ++# # group_by_prio = 1 priority group per path priority ++# # value ++# # group_by_node_name = 1 priority group per target node name + # # default : failover + # # + # path_grouping_policy multibus +@@ -59,16 +67,27 @@ + # # exploitable prio value for example. + # # default : (null) + # # +-# #prio "alua" ++# prio "alua" + # + # # +-# # name : path_checker ++# # name : features ++# # scope : multipath ++# # desc : The default extra features of multipath devices. The ++# # only existing feature currently is queue_if_no_path, which ++# # is the same as setting no_path_retry to queue. ++# # values : "1 queue_if_no_path" ++# # default : (null) ++# # ++# features "1 queue_if_no_path" ++# ++# # ++# # name : path_checker, checker + # # scope : multipath & multipathd + # # desc : the default method used to determine the paths' state +-# # values : readsector0|tur|emc_clariion|hp_sw|directio ++# # values : readsector0|tur|emc_clariion|hp_sw|directio|rdac|cciss_tur + # # default : directio + # # +-# #path_checker directio ++# path_checker directio + # + # # + # # name : rr_min_io +@@ -103,8 +122,8 @@ + # # name : failback + # # scope : multipathd + # # desc : tell the daemon to manage path group failback, or not to. +-# # 0 means immediate failback, values >0 means deffered failback +-# # expressed in seconds. ++# # 0 means immediate failback, values >0 means deffered ++# # failback expressed in seconds. + # # values : manual|immediate|n > 0 + # # default : manual + # # +@@ -119,7 +138,7 @@ + # # values : queue|fail|n (>0) + # # default : (null) + # # +-# #no_path_retry queue ++# no_path_retry queue + # + # # + # # name : user_friendly_names +@@ -140,13 +159,16 @@ + ## name : blacklist + ## scope : multipath & multipathd + ## desc : list of device names to discard as not multipath candidates +-## default : cciss, fd, hd, md, dm, sr, scd, st, ram, raw, loop ++## Devices can be identified by their device node name "devnode", ++## their WWID "wwid", or their vender and product strings ++## "device" ++## default : fd, hd, md, dm, sr, scd, st, ram, raw, loop, dcssblk + ## + #blacklist { + # wwid 26353900f02796769 + # devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" +-# devnode "^hd[a-z][[0-9]*]" +-# devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]" ++# devnode "^hd[a-z]" ++# devnode "^dcssblk[0-9]*" + # device { + # vendor DEC.* + # product MSA[15]00 +@@ -199,57 +221,59 @@ + # # name : path_grouping_policy + # # scope : multipath + # # desc : path grouping policy to apply to this multipath +-# # values : failover, multibus, group_by_serial +-# # default : failover ++# # multibus = all valid paths in 1 priority ++# # group ++# # group_by_serial = 1 priority group per detected ++# # serial number ++# # group_by_prio = 1 priority group per path ++# # priority value ++# # group_by_node_name = 1 priority group per target ++# # node name + # # +-# path_grouping_policy multibus ++# path_grouping_policy failover + # + # # +-# # name : path_checker +-# # scope : multipathd +-# # desc : path checking alorithm to use to check path state +-# # values : readsector0|tur|emc_clariion|hp_sw|directio +-# # default : directio +-# # +-# # path_checker directio +-# +-# # + # # name : path_selector + # # desc : the path selector algorithm to use for this mpath + # # these algo are offered by the kernel mpath target + # # values : "round-robin 0" +-# # default : "round-robin 0" + # # + # path_selector "round-robin 0" + # + # # + # # name : failback + # # scope : multipathd +-# # desc : tell the daemon to manage path group failback, or not to. +-# # 0 means immediate failback, values >0 means deffered failback +-# # expressed in seconds. ++# # desc : tell the daemon to manage path group failback, or ++# # not to. 0 means immediate failback, values >0 means ++# # deffered failback expressed in seconds. + # # values : manual|immediate|n > 0 +-# # default : manual + # # +-# failback immediate ++# failback manual ++# ++# # ++# # name : rr_weight ++# # scope : multipath ++# # desc : if set to priorities the multipath configurator will ++# # assign path weights as "path prio * rr_min_io" ++# # values : priorities|uniform ++# # ++# rr_weight priorities + # + # # + # # name : no_path_retry + # # scope : multipath & multipathd +-# # desc : tell the number of retries until disable queueing, or +-# # "fail" means immediate failure (no queueing), ++# # desc : tell the number of retries until disable queueing, ++# # or "fail" means immediate failure (no queueing), + # # "queue" means never stop queueing + # # values : queue|fail|n (>0) +-# # default : (null) + # # +-# #no_path_retry queue ++# no_path_retry queue + # + # # + # # name : rr_min_io + # # scope : multipath + # # desc : the number of IO to route to a path before switching + # # to the next in the same path group +-# # default : 1000 + # # + # rr_min_io 100 + # } +@@ -283,83 +307,120 @@ + # product "HSV110 (C)COMPAQ" + # + # # ++# # name : product_blacklist ++# # scope : multipath & multipathd ++# # desc : product strings to blacklist for this vendor ++# # default : none ++# # ++# product_blacklist LUNZ ++# ++# # + # # name : path_grouping_policy + # # scope : multipath + # # desc : path grouping policy to apply to multipath hosted + # # by this storage controller +-# # values : failover = 1 path per priority group +-# # multibus = all valid paths in 1 priority +-# # group +-# # group_by_serial = 1 priority group per detected +-# # serial number +-# # default : failover ++# # values : failover = 1 path per priority group ++# # multibus = all valid paths in 1 priority ++# # group ++# # group_by_serial = 1 priority group per detected ++# # serial number ++# # group_by_prio = 1 priority group per path ++# # priority value ++# # group_by_node_name = 1 priority group per target + # # +-# path_grouping_policy multibus ++# path_grouping_policy failover + # + # # + # # name : getuid_callout + # # scope : multipath + # # desc : the program and args to callout to obtain a unique + # # path identifier. Absolute path required +-# # default : /lib/udev/scsi_id -g -u -s + # # + # getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" + # + # # +-# # name : prio +-# # scope : multipath +-# # desc : the function to call to obtain a path +-# # weight. Weights are summed for each path group to +-# # determine the next PG to use case of failure. +-# # default : no callout, all paths equals ++# # name : path_selector ++# # desc : the path selector algorithm to use for this mpath ++# # these algo are offered by the kernel mpath target ++# # values : "round-robin 0" + # # +-# prio "hp_sw" ++# path_selector "round-robin 0" + # + # # +-# # name : path_checker ++# # name : path_checker, checker + # # scope : multipathd + # # desc : path checking alorithm to use to check path state +-# # values : readsector0|tur|emc_clariion|hp_sw|directio +-# # default : directio ++# # values : readsector0|tur|emc_clariion|hp_sw|directio|rdac| ++# # cciss_tur + # # + # path_checker directio + # + # # +-# # name : path_selector +-# # desc : the path selector algorithm to use for this mpath +-# # these algo are offered by the kernel mpath target +-# # values : "round-robin 0" +-# # default : "round-robin 0" ++# # name : features ++# # scope : multipath ++# # desc : The extra features of multipath devices. The only ++# # existing feature currently is queue_if_no_path, ++# # which is the same as setting no_path_retry to queue. ++# # values : "1 queue_if_no_path" + # # +-# path_selector "round-robin 0" ++# features "1 queue_if_no_path" ++# ++# # ++# # name : hardware_handler ++# # scope : multipath ++# # desc : If set, it specifies a module that will be used to ++# # perform hardware specific actions when switching ++# # path groups or handling IO errors ++# # values : "0"|"1 emc" ++# # default : "0" ++# # ++# hardware_handler "1 emc" ++# ++# # ++# # name : prio ++# # scope : multipath ++# # desc : the function to call to obtain a path ++# # weight. Weights are summed for each path group to ++# # determine the next PG to use case of failure. ++# # ++# prio "hp_sw" + # + # # + # # name : failback + # # scope : multipathd +-# # desc : tell the daemon to manage path group failback, or not to. +-# # 0 means immediate failback, values >0 means deffered failback +-# # expressed in seconds. ++# # desc : tell the daemon to manage path group failback, or ++# # not to. 0 means immediate failback, values >0 means ++# # deffered failback expressed in seconds. + # # values : manual|immediate|n > 0 +-# # default : manual + # # + # failback 30 + # + # # +-# # name : rr_min_io ++# # name : rr_weight + # # scope : multipath +-# # desc : the number of IO to route to a path before switching +-# # to the next in the same path group +-# # default : 1000 ++# # desc : if set to priorities the multipath configurator will ++# # assign path weights as "path prio * rr_min_io" ++# # values : priorities|uniform + # # +-# rr_min_io 100 ++# rr_weight priorities + # + # # +-# # name : product_blacklist ++# # name : no_path_retry + # # scope : multipath & multipathd +-# # desc : product strings to blacklist for this vendor +-# # default : none ++# # desc : tell the number of retries until disable queueing, ++# # or "fail" means immediate failure (no queueing), ++# # "queue" means never stop queueing ++# # values : queue|fail|n (>0) + # # +-# product_blacklist LUN_Z ++# no_path_retry queue ++# ++# # ++# # name : rr_min_io ++# # scope : multipath ++# # desc : the number of IO to route to a path before switching ++# # to the next in the same path group ++# # ++# rr_min_io 100 + # } + # device { + # vendor "COMPAQ " +diff -urpN multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-clean/multipath.conf.defaults multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-patched/multipath.conf.defaults +--- multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-clean/multipath.conf.defaults 1969-12-31 18:00:00.000000000 -0600 ++++ multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-patched/multipath.conf.defaults 2008-05-02 18:54:06.000000000 -0500 +@@ -0,0 +1,574 @@ ++# These are the compiled in default settings. They will be used unless you ++# overwrite these values in your config file. ++ ++#defaults { ++# udev_dir /dev ++# polling_interval 5 ++# selector "round-robin 0" ++# path_grouping_policy failover ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# prio const ++# path_checker directio ++# rr_min_io 1000 ++# rr_weight uniform ++# failback manual ++# no_path_retry fail ++# user_friendly_names no ++#} ++# ++#blacklist { ++# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" ++# devnode "^hd[a-z]" ++# devnode "^dcssblk[0-9]*" ++#} ++# ++#devices { ++# device { ++# vendor "APPLE*" ++# product "Xserve RAID" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "3PARdata" ++# product "VV" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "DEC" ++# product "HSG80" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "1 hp-sw" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker hp_sw ++# prio hp_sw ++# } ++# device { ++# vendor "HP" ++# product "A6189A" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "(COMPAQ|HP)" ++# product "(MSA|HSV)1.0.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "1 hp-sw" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker hp_sw ++# prio hp_sw ++# } ++# device { ++# vendor "HP" ++# product "MSA VOLUME" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker tur ++# prio alua ++# } ++# device { ++# vendor "HP" ++# product "MSA2000s*" ++# getuid_callout "/sbin/cciss_id %n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "(COMPAQ|HP)" ++# product "HSV1[01]1|HSV2[01]0|HSV300" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker tur ++# prio alua ++# } ++# device { ++# vendor "HP" ++# product "MSA2[02]12*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# failback immediate ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "HP" ++# product "LOGICAL VOLUME.*" ++# getuid_callout "/lib/udev/scsi_id -n -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# failback immediate ++# rr_weight uniform ++# no_path_retry 12 ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "DDN" ++# product "SAN DataDirector" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "EMC" ++# product "SYMMETRIX" ++# getuid_callout "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "DGC" ++# product ".*" ++# product_blacklist "LUNZ" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# prio_callout "/sbin/mpath_prio_emc /dev/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "1 emc" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry 60 ++# rr_min_io 1000 ++# path_checker emc_clariion ++# prio emc ++# } ++# device { ++# vendor "FSC" ++# product "CentricStor" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_serial ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "(HITACHI|HP)" ++# product "OPEN-.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 100 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "HITACHI" ++# product "DF.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio hds ++# } ++# device { ++# vendor "IBM" ++# product "ProFibre 4000R" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker readsector0 ++# prio const ++# } ++# device { ++# vendor "IBM" ++# product "1722-600" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry 300 ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "IBM" ++# product "1742" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "IBM" ++# product "1814" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "IBM" ++# product "1815" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "IBM" ++# product "3526" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "IBM" ++# product "3542" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_serial ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "IBM" ++# product "2105(800|F20)" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_serial ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "IBM" ++# product "1750500" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio alua ++# } ++# device { ++# vendor "IBM" ++# product "2107900" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "IBM" ++# product "2145" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio alua ++# } ++# device { ++# vendor "IBM" ++# product "S/390 DASD ECKD" ++# product_blacklist "S/390.*" ++# getuid_callout "/sbin/dasdinfo -u -b %n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "NETAPP" ++# product "LUN.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# rr_min_io 128 ++# path_checker directio ++# prio netapp ++# } ++# device { ++# vendor "IBM" ++# product "Nseries.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# rr_min_io 128 ++# path_checker directio ++# prio netapp ++# } ++# device { ++# vendor "Pillar" ++# product "Axiom.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio alua ++# } ++# device { ++# vendor "SGI" ++# product "TP9[13]00" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "SGI" ++# product "TP9[45]00" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "SGI" ++# product "IS.*" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "STK" ++# product "OPENstorage D280" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio rdac ++# } ++# device { ++# vendor "SUN" ++# product "(StorEdge 3510|T4)" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker directio ++# prio const ++# } ++# device { ++# vendor "PIVOT3" ++# product "RAIGE VOLUME" ++# getuid_callout "/sbin/scsi_id -p 0x80 -g -u -s /block/%n" ++# features "1 queue_if_no_path" ++# hardware_handler "0" ++# path_selector "round-robin 0" ++# path_grouping_policy multibus ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker tur ++# prio const ++# } ++# device { ++# vendor "SUN" ++# product "CSM200_R" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++# device { ++# vendor "SUN" ++# product "LCSM100_F" ++# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback immediate ++# rr_weight uniform ++# no_path_retry queue ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } ++#} +diff -urpN multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-clean/multipath.conf.synthetic multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-patched/multipath.conf.synthetic +--- multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-clean/multipath.conf.synthetic 2008-04-30 06:25:16.000000000 -0500 ++++ multipath-tools-cf94ef0ee3f8046aa2b8dc90aee14edf76d4bbf7-patched/multipath.conf.synthetic 2008-05-02 18:56:12.000000000 -0500 +@@ -21,7 +21,6 @@ + # wwid 26353900f02796769 + # devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" + # devnode "^hd[a-z][[0-9]*]" +-# devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]" + # device { + # vendor DEC.* + # product MSA[15]00 +@@ -61,7 +60,7 @@ + # rr_weight priorities + # no_path_retry queue + # rr_min_io 100 +-# product_blacklist LUN_Z ++# product_blacklist LUNZ + # } + # device { + # vendor "COMPAQ " diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec index 21fc7b7..c53d5e1 100644 --- a/device-mapper-multipath.spec +++ b/device-mapper-multipath.spec @@ -1,25 +1,33 @@ Summary: Tools to manage multipath devices using device-mapper Name: device-mapper-multipath -Version: 0.4.7 -Release: 15%{?dist} +Version: 0.4.8 +Release: 1%{?dist} License: GPL+ Group: System Environment/Base URL: http://christophe.varoqui.free.fr/ -Source0: multipath-tools-0.4.7.head2.tgz -Patch0: multipath-tools-0.4.7.head2-sparc64fix.patch -Patch1: multipath-tools-0.4.7.head2-nostatic.patch +Source0: multipath-tools-080519.tgz +Patch0: makefiles_fix.patch +Patch1: linking_change.patch +Patch2: uevent_fix.patch +Patch3: sparc64fix.patch +Patch4: directio_fix.patch +Patch5: config_files.patch +Patch6: redhatification.patch +Patch7: mpath_wait.patch +Patch8: multipath_rules.patch +Patch9: cciss_id.patch Requires: kpartx = %{version}-%{release} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires(post): chkconfig Requires(preun): chkconfig Requires: device-mapper >= 1.02.02-2 -BuildRequires: libsysfs-devel, device-mapper-devel +BuildRequires: libaio-devel, device-mapper-devel BuildRequires: libselinux-devel, libsepol-devel BuildRequires: readline-devel, ncurses-devel %description -%{name} provides tools to manage multipath devices by instructing the -device-mapper multipath kernel module what to do. +%{name} provides tools to manage multipath devices by +instructing the device-mapper multipath kernel module what to do. The tools are : * multipath : Scan the system for multipath devices and assemble them. * multipathd : Detects when paths fail and execs multipath to update things. @@ -33,12 +41,20 @@ Provides: kpartx = %{version}-%{release} kpartx manages partition creation and removal for device-mapper devices. %prep -%setup -q -n multipath-tools-0.4.7.head2 -%patch0 -p1 -b .sparc64 -%patch1 -p1 -b .nostatic +%setup -q -n multipath-tools-080519 +%patch0 -p1 -b .makefiles_fix +%patch1 -p1 -b .linking_change +%patch2 -p1 -b .uevent_fix +%patch3 -p1 -b .sparc64fix +%patch4 -p1 -b .directio_fix +%patch5 -p1 -b .config_files +%patch6 -p1 -b .redhatification +%patch7 -p1 -b .mpath_wait +%patch8 -p1 -b .multipath_rules +%patch9 -p1 -b .cciss_id %build -make DESTDIR=$RPM_BUILD_ROOT +make %{?_smp_mflags} DESTDIR=$RPM_BUILD_ROOT %install rm -rf $RPM_BUILD_ROOT @@ -48,39 +64,49 @@ make install DESTDIR=$RPM_BUILD_ROOT bindir=/sbin rcdir=/etc/rc.d/init.d rm -rf $RPM_BUILD_ROOT %post +/sbin/ldconfig /sbin/chkconfig --add multipathd %preun if [ "$1" = 0 ]; then + /sbin/service multipathd stop /dev/null 2>&1 /sbin/chkconfig --del multipathd fi +%postun +/sbin/ldconfig +if [ "$1" - ge "1" ]; then + /sbin/service multipathd condrestart >/dev/null 2>&1 || : +fi + %files %defattr(-,root,root,-) /sbin/multipath /sbin/multipathd -/sbin/mpath_prio_alua -/sbin/mpath_prio_emc -/sbin/mpath_prio_netapp -/sbin/mpath_prio_hds_modular -/sbin/mpath_prio_tpc +/sbin/cciss_id /sbin/mpath_wait -/sbin/mpath_ctl -/etc/udev/rules.d/40-multipath.rules -%{_mandir}/man8/mpath_prio_alua.8.gz +/lib/libmultipath.so +/lib/multipath +/etc/rc.d/init.d/multipathd +%{_mandir}/man5/multipath.conf.5.gz %{_mandir}/man8/multipath.8.gz %{_mandir}/man8/multipathd.8.gz -%config /etc/rc.d/init.d/multipathd +%config /etc/udev/rules.d/40-multipath.rules %config(noreplace) /etc/multipath.conf -%doc AUTHOR COPYING README* FAQ Multipath-usage.txt multipath.conf.annotated multipath.conf.defaults multipath.conf.synthetic +%doc AUTHOR COPYING README* FAQ multipath.conf.annotated multipath.conf.defaults multipath.conf.synthetic %dir /var/lib/multipath + %files -n kpartx %defattr(-,root,root,-) /sbin/kpartx %{_mandir}/man8/kpartx.8.gz %changelog +* Mon May 19 2008 Benjamin Marzinski 0.4.8-1 +- Updated to latest Upstream 0.4.8 code: multipath-tools-080519.tgz + (git commit id: 42704728855376d2f7da2de1967d7bc71bc54a2f) + * Tue May 06 2008 Alasdair Kergon - 0.4.7-15 - Remove unnecessary multipath & kpartx static binaries. (bz 234928) diff --git a/directio_fix.patch b/directio_fix.patch new file mode 100644 index 0000000..03f1d76 --- /dev/null +++ b/directio_fix.patch @@ -0,0 +1,21 @@ +Index: multipath-tools-temp/libmultipath/checkers/directio.c +=================================================================== +--- multipath-tools-temp.orig/libmultipath/checkers/directio.c ++++ multipath-tools-temp/libmultipath/checkers/directio.c +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + + #include "checkers.h" + #include "../libmultipath/debug.h" +@@ -148,7 +149,7 @@ check_state(int fd, struct directio_cont + } + ct->running++; + +- r = io_getevents(ct->ioctx, 1L, 1L, &event, &timeout); ++ r = syscall(SYS_io_getevents, ct->ioctx, 1L, 1L, &event, &timeout); + LOG(3, "async io getevents returns %li (errno=%s)", r, strerror(errno)); + + if (r < 1L) { diff --git a/linking_change.patch b/linking_change.patch new file mode 100644 index 0000000..69cea86 --- /dev/null +++ b/linking_change.patch @@ -0,0 +1,50 @@ +Index: multipath-tools-080519/libmultipath/Makefile +=================================================================== +--- multipath-tools-080519.orig/libmultipath/Makefile ++++ multipath-tools-080519/libmultipath/Makefile +@@ -23,14 +23,16 @@ endif + all: $(LIBS) + + $(LIBS): $(OBJS) +- $(CC) $(SHARED_FLAGS) $(CFLAGS) -o $@ $(OBJS) ++ $(CC) $(SHARED_FLAGS) -Wl,-soname,$@ $(CFLAGS) -o $@ $(OBJS) + + install: ++ $(INSTALL_PROGRAM) -d $(DESTDIR)$(prefix)/lib ++ $(INSTALL_PROGRAM) -o root -g root -m 755 $(LIBS) $(DESTDIR)$(prefix)/lib/$(LIBS) + $(INSTALL_PROGRAM) -o root -g root -m 755 -d $(DESTDIR)$(libdir) +- $(INSTALL_PROGRAM) -o root -g root -m 755 $(LIBS) $(DESTDIR)$(libdir)/$(LIBS) ++ ldconfig + + uninstall: +- rm -f $(DESTDIR)$(libdir)/$(LIBS) ++ rm -f $(DESTDIR)$(prefix)/lib/$(LIBS) + + clean: + rm -f core *.a *.o *.gz *.so +Index: multipath-tools-080519/multipath/Makefile +=================================================================== +--- multipath-tools-080519.orig/multipath/Makefile ++++ multipath-tools-080519/multipath/Makefile +@@ -6,7 +6,7 @@ include ../Makefile.inc + + OBJS = main.o + +-CFLAGS += -I$(multipathdir) -Wl,-rpath,$(libdir) ++CFLAGS += -I$(multipathdir) + LDFLAGS += -lpthread -ldevmapper -laio -ldl \ + -lmultipath -L$(multipathdir) + +Index: multipath-tools-080519/multipathd/Makefile +=================================================================== +--- multipath-tools-080519.orig/multipathd/Makefile ++++ multipath-tools-080519/multipathd/Makefile +@@ -5,7 +5,7 @@ include ../Makefile.inc + # + # basic flags setting + # +-CFLAGS += -I$(multipathdir) -Wl,-rpath,$(libdir) ++CFLAGS += -I$(multipathdir) + LDFLAGS += -lpthread -ldevmapper -lreadline -lncurses -laio -ldl \ + -lmultipath -L$(multipathdir) + diff --git a/mpath_wait.patch b/mpath_wait.patch new file mode 100644 index 0000000..ab48908 --- /dev/null +++ b/mpath_wait.patch @@ -0,0 +1,43 @@ +Index: multipath-tools-080515/multipath/Makefile +=================================================================== +--- multipath-tools-080515.orig/multipath/Makefile ++++ multipath-tools-080515/multipath/Makefile +@@ -21,7 +21,7 @@ $(EXEC): $(OBJS) + + install: + $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) +- $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/ ++ $(INSTALL_PROGRAM) -m 755 $(EXEC) mpath_wait $(DESTDIR)$(bindir)/ + $(INSTALL_PROGRAM) -d $(DESTDIR)/etc/udev/rules.d + $(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/etc/udev/rules.d/ + $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir) +@@ -36,6 +36,7 @@ install: + uninstall: + rm $(DESTDIR)/etc/udev/rules.d/multipath.rules + rm $(DESTDIR)$(bindir)/$(EXEC) ++ rm $(DESTDIR)$(bindir)/mpath_wait + rm $(DESTDIR)$(mandir)/$(EXEC).8.gz + rm $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz + +Index: multipath-tools-080515/multipath/mpath_wait +=================================================================== +--- /dev/null ++++ multipath-tools-080515/multipath/mpath_wait +@@ -0,0 +1,17 @@ ++#!/bin/bash ++ ++retry=3 ++sec=1 ++ ++/sbin/dmsetup info -c --noheadings -j $1 -m $2 2> /dev/null | grep -q .*:${1}:${2}:L.*:.*:.*:.*:.* ++ret=$? ++ ++while [ "$ret" -ne 0 -a "$retry" -gt 0 ] ++do ++ sleep $sec ++ /sbin/dmsetup info -c --noheadings -j $1 -m $2 2> /dev/null | grep -q .*:${1}:${2}:L.*:.*:.*:.*:.* ++ ret=$? ++ retry=$(($retry - 1)) ++done ++ ++exit $ret diff --git a/multipath-tools-0.4.7.head2-nostatic.patch b/multipath-tools-0.4.7.head2-nostatic.patch deleted file mode 100644 index 9f7a1e4..0000000 --- a/multipath-tools-0.4.7.head2-nostatic.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- multipath-tools-0.4.7.head2/kpartx/Makefile 2006-10-12 17:16:09.000000000 +0100 -+++ multipath-tools-0.4.7.head2.new/kpartx/Makefile 2008-05-06 18:59:14.000000000 +0100 -@@ -24,7 +24,6 @@ - - glibc: clean $(OBJS) - $(CC) $(OBJS) -o $(EXEC) $(LDFLAGS) -- $(CC) $(OBJS) -o $(EXEC).static -static $(LDFLAGS) -lselinux -lsepol - - klibc: clean $(OBJS) - $(CC) -static -o $(EXEC) $(CRT0) $(OBJS) $(KLIBC) $(LIBGCC) -@@ -36,7 +35,6 @@ - install: - install -d $(DESTDIR)$(bindir) - install -m 755 $(EXEC) $(DESTDIR)$(bindir) -- install -m 755 $(EXEC).static $(DESTDIR)$(bindir) - install -d $(DESTDIR)$(mandir) - install -m 644 $(EXEC).8 $(DESTDIR)$(mandir) - ---- multipath-tools-0.4.7.head2/multipath/Makefile 2006-11-30 23:25:13.000000000 +0000 -+++ multipath-tools-0.4.7.head2.new/multipath/Makefile 2008-05-06 18:58:53.000000000 +0100 -@@ -21,7 +21,6 @@ - - glibc: clean $(OBJS) - $(CC) $(OBJS) -o $(EXEC) $(LDFLAGS) -- $(CC) $(OBJS) -o $(EXEC).static -static $(LDFLAGS) -lselinux -lsepol - $(CC) mpath_faker.c -o mpath_ctl $(CFLAGS) -static - - klibc: $(OBJS) -@@ -36,7 +35,7 @@ - - install: - install -d $(DESTDIR)$(bindir) -- install -m 755 $(EXEC) $(EXEC).static mpath_ctl mpath_wait $(DESTDIR)$(bindir)/ -+ install -m 755 $(EXEC) mpath_ctl mpath_wait $(DESTDIR)$(bindir)/ - install -d $(DESTDIR)/etc/udev/rules.d - install -m 644 multipath.rules $(DESTDIR)/etc/udev/rules.d/40-multipath.rules - install -d $(DESTDIR)$(mandir) diff --git a/multipath_rules.patch b/multipath_rules.patch new file mode 100644 index 0000000..ea545a2 --- /dev/null +++ b/multipath_rules.patch @@ -0,0 +1,43 @@ +Index: multipath-tools-080515/multipath/Makefile +=================================================================== +--- multipath-tools-080515.orig/multipath/Makefile ++++ multipath-tools-080515/multipath/Makefile +@@ -23,7 +23,7 @@ install: + $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) + $(INSTALL_PROGRAM) -m 755 $(EXEC) mpath_wait $(DESTDIR)$(bindir)/ + $(INSTALL_PROGRAM) -d $(DESTDIR)/etc/udev/rules.d +- $(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/etc/udev/rules.d/ ++ $(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/etc/udev/rules.d/40-multipath.rules + $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir) + $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir) + $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir) +@@ -34,7 +34,7 @@ install: + $(INSTALL_PROGRAM) -d $(DESTDIR)/var/lib/multipath + + uninstall: +- rm $(DESTDIR)/etc/udev/rules.d/multipath.rules ++ rm $(DESTDIR)/etc/udev/rules.d/40-multipath.rules + rm $(DESTDIR)$(bindir)/$(EXEC) + rm $(DESTDIR)$(bindir)/mpath_wait + rm $(DESTDIR)$(mandir)/$(EXEC).8.gz +Index: multipath-tools-080515/multipath/multipath.rules +=================================================================== +--- multipath-tools-080515.orig/multipath/multipath.rules ++++ multipath-tools-080515/multipath/multipath.rules +@@ -1,7 +1,9 @@ +-# +-# udev rules for multipathing. +-# The persistent symlinks are created with the kpartx rules +-# +- +-# socket for uevents +-RUN+="socket:/org/kernel/dm/multipath_event" ++# multipath wants the devmaps presented as meaninglful device names ++# so name them after their devmap name ++SUBSYSTEM!="block", GOTO="end_mpath" ++KERNEL!="dm-[0-9]*", ACTION=="add", PROGRAM=="/bin/bash -c '/sbin/lsmod | /bin/grep ^dm_multipath'", RUN+="/sbin/multipath -v0 %M:%m" ++KERNEL!="dm-[0-9]*", GOTO="end_mpath" ++PROGRAM!="/sbin/mpath_wait %M %m", GOTO="end_mpath" ++ACTION=="add", RUN+="/sbin/dmsetup ls --target multipath --exec '/sbin/kpartx -a -p p' -j %M -m %m" ++PROGRAM!="/bin/bash -c '/sbin/dmsetup info -c --noheadings -j %M -m %m | /bin/grep -q .*:.*:.*:.*:.*:.*:.*:part[0-9]*-mpath-'", GOTO="end_mpath" ++LABEL="end_mpath" diff --git a/redhatification.patch b/redhatification.patch new file mode 100644 index 0000000..285bc54 --- /dev/null +++ b/redhatification.patch @@ -0,0 +1,699 @@ +Index: multipath-tools-080519/libmultipath/defaults.h +=================================================================== +--- multipath-tools-080519.orig/libmultipath/defaults.h ++++ multipath-tools-080519/libmultipath/defaults.h +@@ -1,4 +1,4 @@ +-#define DEFAULT_GETUID "/lib/udev/scsi_id -g -u -s /block/%n" ++#define DEFAULT_GETUID "/sbin/scsi_id -g -u -s /block/%n" + #define DEFAULT_UDEVDIR "/dev" + #define DEFAULT_MULTIPATHDIR "/lib/multipath" + #define DEFAULT_SELECTOR "round-robin 0" +Index: multipath-tools-080519/libmultipath/hwtable.c +=================================================================== +--- multipath-tools-080519.orig/libmultipath/hwtable.c ++++ multipath-tools-080519/libmultipath/hwtable.c +@@ -172,7 +172,7 @@ static struct hwentry default_hw[] = { + /* HP Smart Array */ + .vendor = "HP", + .product = "LOGICAL VOLUME.*", +- .getuid = "/lib/udev/scsi_id -n -g -u -s /block/%n", ++ .getuid = "/sbin/scsi_id -n -g -u -s /block/%n", + .features = DEFAULT_FEATURES, + .hwhandler = DEFAULT_HWHANDLER, + .selector = DEFAULT_SELECTOR, +@@ -214,7 +214,7 @@ static struct hwentry default_hw[] = { + { + .vendor = "EMC", + .product = "SYMMETRIX", +- .getuid = "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n", ++ .getuid = "/sbin/scsi_id -g -u -ppre-spc3-83 -s /block/%n", + .features = DEFAULT_FEATURES, + .hwhandler = DEFAULT_HWHANDLER, + .selector = DEFAULT_SELECTOR, +@@ -485,7 +485,7 @@ static struct hwentry default_hw[] = { + .vendor = "IBM", + .product = "S/390 DASD ECKD", + .bl_product = "S/390.*", +- .getuid = "/sbin/dasdinfo -u -b %n", ++ .getuid = "/sbin/dasd_id /dev/%n", + .features = "1 queue_if_no_path", + .hwhandler = DEFAULT_HWHANDLER, + .selector = DEFAULT_SELECTOR, +@@ -705,6 +705,22 @@ static struct hwentry default_hw[] = { + .checker_name = RDAC, + .prio_name = PRIO_RDAC, + }, ++ /* DELL arrays */ ++ { ++ .vendor = "DELL", ++ .product = "MD3000", ++ .getuid = DEFAULT_GETUID, ++ .features = DEFAULT_FEATURES, ++ .hwhandler = "1 rdac", ++ .selector = DEFAULT_SELECTOR, ++ .pgpolicy = GROUP_BY_PRIO, ++ .pgfailback = -FAILBACK_MANUAL, ++ .rr_weight = RR_WEIGHT_NONE, ++ .no_path_retry = NO_PATH_RETRY_UNDEF, ++ .minio = DEFAULT_MINIO, ++ .checker_name = RDAC, ++ .prio_name = PRIO_RDAC, ++ }, + /* + * EOL + */ +Index: multipath-tools-080519/multipath.conf.annotated +=================================================================== +--- multipath-tools-080519.orig/multipath.conf.annotated ++++ multipath-tools-080519/multipath.conf.annotated +@@ -55,9 +55,9 @@ + # # scope : multipath + # # desc : the default program and args to callout to obtain a unique + # # path identifier. Absolute path required +-# # default : /lib/udev/scsi_id -g -u -s ++# # default : /sbin/scsi_id -g -u -s + # # +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # + # # + # # name : prio +@@ -336,7 +336,7 @@ + # # desc : the program and args to callout to obtain a unique + # # path identifier. Absolute path required + # # +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # + # # + # # name : path_selector +Index: multipath-tools-080519/multipath.conf.defaults +=================================================================== +--- multipath-tools-080519.orig/multipath.conf.defaults ++++ multipath-tools-080519/multipath.conf.defaults +@@ -6,7 +6,7 @@ + # polling_interval 5 + # selector "round-robin 0" + # path_grouping_policy failover +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # prio const + # path_checker directio + # rr_min_io 1000 +@@ -26,7 +26,7 @@ + # device { + # vendor "APPLE*" + # product "Xserve RAID" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -39,7 +39,7 @@ + # device { + # vendor "3PARdata" + # product "VV" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -52,7 +52,7 @@ + # device { + # vendor "DEC" + # product "HSG80" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "1 hp-sw" + # path_selector "round-robin 0" +@@ -65,7 +65,7 @@ + # device { + # vendor "HP" + # product "A6189A" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -79,7 +79,7 @@ + # device { + # vendor "(COMPAQ|HP)" + # product "(MSA|HSV)1.0.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "1 hp-sw" + # path_selector "round-robin 0" +@@ -93,7 +93,7 @@ + # device { + # vendor "HP" + # product "MSA VOLUME" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -123,7 +123,7 @@ + # device { + # vendor "(COMPAQ|HP)" + # product "HSV1[01]1|HSV2[01]0|HSV300" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -138,7 +138,7 @@ + # device { + # vendor "HP" + # product "MSA2[02]12*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -153,7 +153,7 @@ + # device { + # vendor "HP" + # product "LOGICAL VOLUME.*" +-# getuid_callout "/lib/udev/scsi_id -n -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -n -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -168,7 +168,7 @@ + # device { + # vendor "DDN" + # product "SAN DataDirector" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -181,7 +181,7 @@ + # device { + # vendor "EMC" + # product "SYMMETRIX" +-# getuid_callout "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -ppre-spc3-83 -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -195,7 +195,7 @@ + # vendor "DGC" + # product ".*" + # product_blacklist "LUNZ" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # prio_callout "/sbin/mpath_prio_emc /dev/%n" + # features "1 queue_if_no_path" + # hardware_handler "1 emc" +@@ -211,7 +211,7 @@ + # device { + # vendor "FSC" + # product "CentricStor" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -224,7 +224,7 @@ + # device { + # vendor "(HITACHI|HP)" + # product "OPEN-.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -237,7 +237,7 @@ + # device { + # vendor "HITACHI" + # product "DF.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -251,7 +251,7 @@ + # device { + # vendor "IBM" + # product "ProFibre 4000R" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -264,7 +264,7 @@ + # device { + # vendor "IBM" + # product "1722-600" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -279,7 +279,7 @@ + # device { + # vendor "IBM" + # product "1742" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -294,7 +294,7 @@ + # device { + # vendor "IBM" + # product "1814" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -309,7 +309,7 @@ + # device { + # vendor "IBM" + # product "1815" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -324,7 +324,7 @@ + # device { + # vendor "IBM" + # product "3526" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -339,7 +339,7 @@ + # device { + # vendor "IBM" + # product "3542" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -352,7 +352,7 @@ + # device { + # vendor "IBM" + # product "2105(800|F20)" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -365,7 +365,7 @@ + # device { + # vendor "IBM" + # product "1750500" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -379,7 +379,7 @@ + # device { + # vendor "IBM" + # product "2107900" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -392,7 +392,7 @@ + # device { + # vendor "IBM" + # product "2145" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -407,7 +407,7 @@ + # vendor "IBM" + # product "S/390 DASD ECKD" + # product_blacklist "S/390.*" +-# getuid_callout "/sbin/dasdinfo -u -b %n" ++# getuid_callout "/sbin/dasd_id /dev/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -420,7 +420,7 @@ + # device { + # vendor "NETAPP" + # product "LUN.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -434,7 +434,7 @@ + # device { + # vendor "IBM" + # product "Nseries.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "1 queue_if_no_path" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -448,7 +448,7 @@ + # device { + # vendor "Pillar" + # product "Axiom.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -461,7 +461,7 @@ + # device { + # vendor "SGI" + # product "TP9[13]00" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -474,7 +474,7 @@ + # device { + # vendor "SGI" + # product "TP9[45]00" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -489,7 +489,7 @@ + # device { + # vendor "SGI" + # product "IS.*" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -504,7 +504,7 @@ + # device { + # vendor "STK" + # product "OPENstorage D280" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -518,7 +518,7 @@ + # device { + # vendor "SUN" + # product "(StorEdge 3510|T4)" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "0" + # path_selector "round-robin 0" +@@ -544,7 +544,7 @@ + # device { + # vendor "SUN" + # product "CSM200_R" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -559,7 +559,7 @@ + # device { + # vendor "SUN" + # product "LCSM100_F" +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # features "0" + # hardware_handler "1 rdac" + # path_selector "round-robin 0" +@@ -571,4 +571,18 @@ + # path_checker rdac + # prio rdac + # } ++# device { ++# vendor "DELL" ++# product "MD3000" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" ++# features "0" ++# hardware_handler "1 rdac" ++# path_selector "round-robin 0" ++# path_grouping_policy group_by_prio ++# failback manual ++# rr_weight uniform ++# rr_min_io 1000 ++# path_checker rdac ++# prio rdac ++# } + #} +Index: multipath-tools-080519/multipath.conf.synthetic +=================================================================== +--- multipath-tools-080519.orig/multipath.conf.synthetic ++++ multipath-tools-080519/multipath.conf.synthetic +@@ -7,7 +7,7 @@ + # polling_interval 10 + # selector "round-robin 0" + # path_grouping_policy multibus +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # prio const + # path_checker directio + # rr_min_io 100 +@@ -52,7 +52,7 @@ + # vendor "COMPAQ " + # product "HSV110 (C)COMPAQ" + # path_grouping_policy multibus +-# getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n" ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" + # path_checker directio + # path_selector "round-robin 0" + # hardware_handler "0" +Index: multipath-tools-080519/Makefile.inc +=================================================================== +--- multipath-tools-080519.orig/Makefile.inc ++++ multipath-tools-080519/Makefile.inc +@@ -20,7 +20,7 @@ libudevdir = ${prefix}/lib/udev + multipathdir = $(TOPDIR)/libmultipath + mandir = $(prefix)/usr/share/man/man8 + man5dir = $(prefix)/usr/share/man/man5 +-rcdir = $(prefix)/etc/init.d ++rcdir = $(prefix)/etc/rc.d/init.d + libdir = $(prefix)/lib/multipath + + GZIP = /bin/gzip -9 -c +Index: multipath-tools-080519/multipathd/Makefile +=================================================================== +--- multipath-tools-080519.orig/multipathd/Makefile ++++ multipath-tools-080519/multipathd/Makefile +@@ -35,6 +35,7 @@ install: + $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) + $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir) + $(INSTALL_PROGRAM) -d $(DESTDIR)$(rcdir) ++ $(INSTALL_PROGRAM) -m 755 multipathd.init.redhat $(DESTDIR)$(rcdir)/$(EXEC) + $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir) + $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir) + +Index: multipath-tools-080519/multipathd/multipathd.init.redhat +=================================================================== +--- multipath-tools-080519.orig/multipathd/multipathd.init.redhat ++++ multipath-tools-080519/multipathd/multipathd.init.redhat +@@ -1,13 +1,9 @@ + #!/bin/bash +- +-# +-# /etc/rc.d/init.d/multipathd + # +-# Starts the multipath daemon ++# multipathd Starts the multipath daemon + # + # chkconfig: - 13 87 +-# description: Manage device-mapper multipath devices +-# processname: multipathd ++# description: Manages device-mapper multipath devices + + DAEMON=/sbin/multipathd + prog=`basename $DAEMON` +@@ -16,14 +12,8 @@ lockdir=/var/lock/subsys + sysconfig=/etc/sysconfig + + +-system=redhat +- +-if [ $system = redhat ]; then +- # Source function library. +- . $initdir/functions +-fi ++. $initdir/functions + +-test -x $DAEMON || exit 0 + test -r $sysconfig/$prog && . $sysconfig/$prog + + RETVAL=0 +@@ -33,6 +23,7 @@ RETVAL=0 + # + + start() { ++ test -x $DAEMON || exit 5 + echo -n $"Starting $prog daemon: " + daemon $DAEMON + RETVAL=$? +@@ -74,7 +65,7 @@ reload) + restart) + restart + ;; +-condrestart) ++condrestart|try-restart) + if [ -f $lockdir/$prog ]; then + restart + fi +@@ -85,7 +76,7 @@ status) + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}" +- RETVAL=1 ++ RETVAL=2 + esac + + exit $RETVAL +Index: multipath-tools-080519/multipath/Makefile +=================================================================== +--- multipath-tools-080519.orig/multipath/Makefile ++++ multipath-tools-080519/multipath/Makefile +@@ -28,6 +28,10 @@ install: + $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir) + $(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir) + $(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5.gz $(DESTDIR)$(man5dir) ++ if [ ! -e $(DESTDIR)//etc/multipath.conf ]; then \ ++ $(INSTALL_PROGRAM) -m 644 multipath.conf.redhat $(DESTDIR)/etc/multipath.conf; \ ++ fi ++ $(INSTALL_PROGRAM) -d $(DESTDIR)/var/lib/multipath + + uninstall: + rm $(DESTDIR)/etc/udev/rules.d/multipath.rules +Index: multipath-tools-080519/multipath/multipath.conf.redhat +=================================================================== +--- /dev/null ++++ multipath-tools-080519/multipath/multipath.conf.redhat +@@ -0,0 +1,97 @@ ++# This is a basic configuration file with some examples, for device mapper ++# multipath. ++# For a complete list of the default configuration values, see ++# /usr/share/doc/device-mapper-multipath-0.4.8/multipath.conf.defaults ++# For a list of configuration options with descriptions, see ++# /usr/share/doc/device-mapper-multipath-0.4.8/multipath.conf.annotated ++ ++ ++# Blacklist all devices by default. Remove this to enable multipathing ++# on the default devices. ++blacklist { ++ devnode "*" ++} ++ ++## By default, devices with vendor = "IBM" and product = "S/390.*" are ++## blacklisted. To enable mulitpathing on these devies, uncomment the ++## following lines. ++#blacklist_exceptions { ++# device { ++# vendor "IBM" ++# product "S/390.*" ++# } ++#} ++ ++## Use user friendly names, instead of using WWIDs as names. ++defaults { ++ user_friendly_names yes ++} ++## ++## Here is an example of how to configure some standard options. ++## ++# ++#defaults { ++# udev_dir /dev ++# polling_interval 10 ++# selector "round-robin 0" ++# path_grouping_policy multibus ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" ++# prio alua ++# path_checker readsector0 ++# rr_min_io 100 ++# max_fds 8192 ++# rr_weight priorities ++# failback immediate ++# no_path_retry fail ++# user_friendly_names yes ++#} ++## ++## The wwid line in the following blacklist section is shown as an example ++## of how to blacklist devices by wwid. The 2 devnode lines are the ++## compiled in default blacklist. If you want to blacklist entire types ++## of devices, such as all scsi devices, you should use a devnode line. ++## However, if you want to blacklist specific devices, you should use ++## a wwid line. Since there is no guarantee that a specific device will ++## not change names on reboot (from /dev/sda to /dev/sdb for example) ++## devnode lines are not recommended for blacklisting specific devices. ++## ++#blacklist { ++# wwid 26353900f02796769 ++# devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" ++# devnode "^hd[a-z]" ++#} ++#multipaths { ++# multipath { ++# wwid 3600508b4000156d700012000000b0000 ++# alias yellow ++# path_grouping_policy multibus ++# path_checker readsector0 ++# path_selector "round-robin 0" ++# failback manual ++# rr_weight priorities ++# no_path_retry 5 ++# } ++# multipath { ++# wwid 1DEC_____321816758474 ++# alias red ++# } ++#} ++#devices { ++# device { ++# vendor "COMPAQ " ++# product "HSV110 (C)COMPAQ" ++# path_grouping_policy multibus ++# getuid_callout "/sbin/scsi_id -g -u -s /block/%n" ++# path_checker readsector0 ++# path_selector "round-robin 0" ++# hardware_handler "0" ++# failback 15 ++# rr_weight priorities ++# no_path_retry queue ++# } ++# device { ++# vendor "COMPAQ " ++# product "MSA1000 " ++# path_grouping_policy multibus ++# } ++#} +Index: multipath-tools-080519/kpartx/Makefile +=================================================================== +--- multipath-tools-080519.orig/kpartx/Makefile ++++ multipath-tools-080519/kpartx/Makefile +@@ -20,10 +20,10 @@ $(EXEC): $(OBJS) + install: $(EXEC) $(EXEC).8 + $(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir) + $(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir) +- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir) +- $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir) +- $(INSTALL_PROGRAM) -d $(DESTDIR)/etc/udev/rules.d +- $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)/etc/udev/rules.d/ ++# $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir) ++# $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir) ++# $(INSTALL_PROGRAM) -d $(DESTDIR)/etc/udev/rules.d ++# $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)/etc/udev/rules.d/ + $(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir) + $(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir) + diff --git a/sources b/sources index 4b9712a..a9e1645 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0199270b9e36468f096bfd81cf439930 multipath-tools-0.4.7.head2.tgz +30b9482582f73c7c8e1bf8d816d30bbf multipath-tools-080519.tgz diff --git a/multipath-tools-0.4.7.head2-sparc64fix.patch b/sparc64fix.patch similarity index 59% rename from multipath-tools-0.4.7.head2-sparc64fix.patch rename to sparc64fix.patch index 0366d55..6e50bf8 100644 --- a/multipath-tools-0.4.7.head2-sparc64fix.patch +++ b/sparc64fix.patch @@ -1,6 +1,7 @@ -diff -up multipath-tools-0.4.7.head2/kpartx/lopart.c.BAD multipath-tools-0.4.7.head2/kpartx/lopart.c ---- multipath-tools-0.4.7.head2/kpartx/lopart.c.BAD 2008-02-29 13:35:19.000000000 -0500 -+++ multipath-tools-0.4.7.head2/kpartx/lopart.c 2008-02-29 13:36:44.000000000 -0500 +Index: multipath-tools-080515/kpartx/lopart.c +=================================================================== +--- multipath-tools-080515.orig/kpartx/lopart.c ++++ multipath-tools-080515/kpartx/lopart.c @@ -30,7 +30,7 @@ #if defined(__hppa__) || defined(__powerpc64__) || defined (__alpha__) \ || defined (__x86_64__) diff --git a/uevent_fix.patch b/uevent_fix.patch new file mode 100644 index 0000000..39c424d --- /dev/null +++ b/uevent_fix.patch @@ -0,0 +1,28 @@ +Index: multipath-tools-080515/multipathd/main.c +=================================================================== +--- multipath-tools-080515.orig/multipathd/main.c ++++ multipath-tools-080515/multipathd/main.c +@@ -619,14 +619,20 @@ uxsock_trigger (char * str, char ** repl + static int + uev_discard(char * devpath) + { ++ char *tmp; + char a[10], b[10]; + + /* + * keep only block devices, discard partitions + */ +- if (sscanf(devpath, "/block/%10s", a) != 1 || +- sscanf(devpath, "/block/%10[^/]/%10s", a, b) == 2) { +- condlog(4, "discard event on %s", devpath); ++ tmp = strstr(devpath, "/block/"); ++ if (tmp == NULL){ ++ condlog(0, "no /block/ in '%s'", devpath); ++ return 1; ++ } ++ if (sscanf(tmp, "/block/%10s", a) != 1 || ++ sscanf(tmp, "/block/%10[^/]/%10s", a, b) == 2) { ++ condlog(0, "discard event on %s", devpath); + return 1; + } + return 0;