fig1 is a block diagram of a storage area network ( san ) system 10 that is suitable for practicing this invention . the san system 10 includes a host 12 coupled to at least one storage device , such as a disk drive 16 , via at least one bus , also referred to herein as a cable or data path 14 . the host 12 may be a computer , such as a mainframe computer , a workstation , a personal computer , or any type of computing device . the disk drive 16 may in practice comprise a plurality of disk drives , such as an array of disk drives 15 , and may be embodied as a redundant array of inexpensive disks ( raid ). there maybe a disk drive controller 19 having overall responsibility for storing data in and reading data from the disk drives 16 . the path 14 may be a fiber channel ( fc ) type bus , and may implement a scsi - type of interface . the exact nature of the path 14 and / or the specifics of the path protocol are not germane to the practice of the exemplary embodiments of this invention . for the purposes of describing the exemplary embodiments of this invention the host 12 is assumed to include a storage multipath device driver ( smdd ) 12 a that operates with a storage multipath device i / o pending queue 12 b . the host 12 is further assumed to include a disk device driver ( ddd ) 18 a that operates with a disk device driver i / o pending queue 18 b . one or both of the storage multipath device driver 12 a and disk device driver 18 a can be implemented using a data processor that executes a stored software program , or with hardware logic elements , or with a combination of software programs and hardware logic elements . the i / o pending queues 12 b and 18 b may be implemented using read / write memory of any suitable type , such as semiconductor random access memory ( ram ). the host 12 may be assumed to include or be coupled to at least one application ( app ), and more typically a plurality of applications ( app 1 , app 2 , . . . , appn ), at least some of which perform disk - based i / o via the storage multipath device driver 12 a . typically the storage multipath device driver 12 a is coupled to the applications ( app 1 , app 2 , . . . , appn ) via an operating system 13 . for the purposes of this invention the bus 14 may be considered to a path , and in practice there may be a plurality of paths ( i . e ., multipaths ) between the host 12 and the storage devices . this can be implemented using at least one host adapter ( ha ) 12 c coupled to at least two paths and to a switching fabric 20 from which multiple paths emanate to the storage devices . the use of multiple paths between the host 12 and the storage devices provides redundancy and avoids the generation of a single point of failure ( pof ). through the use of the plurality of paths 14 the san 10 may be considered to be a redundant san . the storage multipath device driver 12 a is assumed to have knowledge of the operational status of the various paths 14 connecting the host 12 to the storage devices 16 . another ha 12 c can be used to couple to another storage device or devices 22 either directly or via another switch fabric ( not shown ). by example , there maybe ten storage device luns ( logical unit numbers ), each a disk drive , and there may be eight paths 14 to each lun . in accordance with exemplary embodiments of this invention the problems discussed above are solved by the addition of intelligence into the workload management at the level of the storage multipath device driver 12 a . as opposed to using a constant depth of the i / o pending queue 12 b , regardless of the workload change , the storage multipath device driver 12 a dynamically adjusts the amount of i / o sent to the disk device driver 18 a depending on the change of workload . this technique aids in balancing the size of the storage multipath device driver i / o pending queue 12 b , as well as the disk device driver i / o pending queue 18 b , under various conditions of normal ( non - error ) operation and error recovery operation . by the use of the exemplary embodiments of this invention the i / o throughput is increased when demand from the application ( s ) is increasing , thus avoiding performance degradation and preventing system hanging caused by the queue depth control implemented by the storage multipath device driver 12 a . in the event of an i / o failure , the storage multipath device driver 12 a is sensitive to the change and effectively “ tunes ” the amount of i / o sent to the disk device driver 18 a to a smaller value to prevent i / o hanging or performance degradation at the level of the disk device driver 18 a , as it would typically retry some number of times for each i / o request . at the level of the storage multipath device driver 12 a multiple retries are not performed to the same degree ( if at all ) as the disk device driver 18 a for each job queued at the i / o pending queue 18 b . once a particular path 14 receives some certain number of continuous errors it is taken offline . if all the paths 14 are taken offline , the storage multipath device driver 12 a may return all of the i / o requests on the i / o pending queue 12 b to the application ( s ), without any retries . therefore , the storage multipath device driver 12 a does not typically encounter the same performance degradation during an error recovery procedure as the disk device driver 18 a does . by adding intelligence in the storage multipath device driver 12 a it becomes capable of dynamically sensing and responding to a changing i / o volume , and to an occurrence of i / o errors , so as to efficiently handle both normal or good conditions and error conditions . the non - limiting embodiments of this invention can be practiced with any storage multipath device driver on any platform through the use of the queue depth of the i / o queue 12 b to dynamically control i / o flow . for the implementation of the exemplary embodiments of this invention a set of rules is established to control the i / o flow in order to avoid performance degradation and / or system hanging during stress i / o and / or error recovery . the set of rules are established in consideration of at least the following elements : ( a ) a queue depth value recommended by the storage device controller 19 ( e . g ., the controller of the disk drive ( s ) 16 ); ( b ) a length of the storage multipath device driver i / o pending queue 12 b ( where all unprocessed i / o requests are queued ) when the storage multipath device driver 12 a begins to experience a performance degradation during a stress i / o ( high volume ) condition ; ( c ) a length of the disk device driver i / o pending queue 18 b when disk device driver 18 a begins to experience a performance degradation during error recovery ; and ( d ) a factor of the queue depth used by the storage multipath device driver 12 a to control the i / o flow to disk device driver 18 a when a performance degradation begins to be experienced during error recovery . after determining the above elements , the storage multipath device driver 12 a uses these elements to implement the following logic . reference is also made to the logic flow diagram of fig2 . during a normal condition , at block a the storage multipath device driver 12 a calculates an amount of i / o sent to the disk device driver 18 a using the following formula : total amount of i / o sent to disk device driver 18 a on a device = queue depth × global factor for queue depth × total number of functioning paths ; where the global factor for queue depth = 1 . note that the global factor for queue depth is preferably a factor of the queue depth value used by all of the multipath storage devices 16 . the “ normal condition ” may be considered to be one where there is absence of stress i / o and / or an error condition . as employed herein “ stress i / o ” may be considered to be an amount of application initiated storage device activity that exceeds a normal amount of activity by some predetermined amount . the predetermined amount may be fixed , or it may be variable depending on system conditions . for example , on an aix ™ operating system 13 equipped host 12 system ( aix ™ is an open operating system , based on unix ™, that is available from the assignee of this patent application ), the following table defines a suitable rule for this implementation ( n is the number of i / o requests ): global factor for queue depth length of pending queue ( for all storage devices ) n & gt ;= 1200 3 800 & lt ; n & lt ; 1200 2 n & lt ; 800 1 for example , if the number of i / o requests on the i / o pending queue 12 b is 1100 , the calculation performed by the storage multipath device driver 12 a using the formula recited above uses a value of 2 for the global factor for queue depth . in the stress i / o environment , and at block b , the storage multipath device driver 12 a monitors the length of the i / o pending queue 12 b and adjusts the global factor for queue depth value accordingly to allow more i / o to be sent to the disk device driver 18 a . in the error condition , at block c , the storage multipath device driver 12 a monitors the number of functioning paths and adjusts the individual factor for queue depth correspondingly to reduce the amount of i / o sent to the disk device driver 18 a . if a percentage of functioning paths of a multipath device ( referred to herein as m ) is reduced to less than 100 %, the storage multipath device driver 12 a switches from using the global factor for normal or stress i / o conditions to an individual factor of this disk 16 for controlling the queue depth during the error condition . for example , and assuming again the non - limiting case of an aix ™ operating system 13 installed on the host 12 , the following illustrates a suitable rule for use in the implementation : if 50 %& lt ; m & lt ; 100 %, then the individual factor for queue depth ( per multipath device ), denoted as ( f ), is given by : for example , assume in an exemplary case that the total number of paths to the storage devices 16 is eight , that the number of functioning paths is six , and that the global factor for queue depth is three . in this case the condition of 50 %& lt ; m & lt ; 100 % is satisfied . therefore , the following calculation is performed by the storage multipath device driver 12 a : total amount of i / o sent to disk device driver 18 a = queue depth ×( global factor for queue depth − 1 )× total number of functioning paths . based on the foregoing discussion it should be appreciated that by implementing the described methods in the storage multipath device driver 12 a , the storage multipath device driver 12 a is enabled to dynamically adjust the i / o flow to the disk device driver 18 a based on the workload and the presence or absence of i / o errors to avoid performance degradation or system hanging in stress i / o and in error conditions . a feature of the exemplary embodiments of this invention is that the bandwidth between the host 12 and the storage devices 16 can be adjusted corresponding to i / o conditions to avoid the generation of a bottleneck at either the storage multipath device driver 12 a or the disk device driver 18 a . a further feature of the exemplary embodiments of this invention is that overloading of the storage multipath device driver 12 a is avoided during non - error conditions ( including during stress i / o conditions ), and the overloading of the disk device driver 18 a is avoided during error conditions . the foregoing description has provided by way of exemplary and non - limiting examples a full and informative description of the embodiments of this invention . however , various modifications and adaptations may become apparent to those skilled in the relevant arts in view of the foregoing description , when read in conjunction with the accompanying drawings and the appended claims . for example , while the storage devices have been described as the disk drives 16 coupled to the disk device driver 18 a , in other embodiments other types of storage devices may be used , such as tape storage devices and semiconductor memory - based storage devices . the ddd 18 a may thus be referred to more generally as a storage device driver , and the associated i / o queue 18 b as a storage device driver i / o pending queue . further , the disk drives 15 maybe based on magnetic technology , or on optical technology , and may use fixed or removable storage medium . still further , it can be appreciated that the smdd 12 a may be responsive to a plurality of different error conditions , such as errors arising in one or more of the disk drives 16 , disk drive controller 19 , the switch fabric 20 and / or the ha 12 c . further in this regard the error condition processing performed by the smdd 12 a may be tailored , if desired , in accordance with the source of the error and may thus be adaptive in nature . however , all such modifications of the teachings of this invention will still fall within the scope of the embodiments of this invention . furthermore , some of the features of the embodiments of this invention may be used to advantage without the corresponding use of other features . as such , the foregoing description should be considered as merely illustrative of the principles , teachings and embodiments of this invention , and not in limitation thereof .