Bug 150029

Summary: Pool does not see all powerpath devices
Product: [Retired] Red Hat Cluster Suite Reporter: David Bertin <dbertin>
Component: gfsAssignee: AJ Lewis <157070.alewis>
Status: CLOSED ERRATA QA Contact: GFS Bugs <gfs-bugs>
Severity: high Docs Contact:
Priority: medium    
Version: 3   
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2005-04-25 16:25:53 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Proposed fix none

Description David Bertin 2005-03-01 20:15:27 UTC
Description of problem:
From customer:
---------------

I've created a new striped pool, datapoolE, that consists of 16
PowerPath devices. 

poolname        datapoolE 
subpools 01 
subpool 00 128 16 gfs_data 
pooldevice      00      00      /dev/emcpowerc1 
pooldevice      00      01      /dev/emcpowerd1 
pooldevice      00      02      /dev/emcpowere1 
pooldevice      00      03      /dev/emcpowerf1 
pooldevice      00      04      /dev/emcpowerg1 
pooldevice      00      05      /dev/emcpowerh1 
pooldevice      00      06      /dev/emcpoweri1 
pooldevice      00      07      /dev/emcpowerj1 
pooldevice      00      08      /dev/emcpowerk1 
pooldevice      00      09      /dev/emcpowerl1 
pooldevice      00      10      /dev/emcpowerm1 
pooldevice      00      11      /dev/emcpowern1 
pooldevice      00      12      /dev/emcpowero1 
pooldevice      00      13      /dev/emcpowerp1 
pooldevice      00      14      /dev/emcpowerq1 
pooldevice      00      15      /dev/emcpowerr1 

The output of pool_info datapoolE -D is shown below and it clearly
indicates there is a problem with the paths to the 14th and 15th
devices.  e.g. 

Device 13 
Path count                    : 3 
Good path count               : 3 
Path 0                                : /dev/sdae1 (GOOD) 
Path 1                                : /dev/sdaf1 (GOOD) 
Path 2                                : /dev/emcpowerp1 (GOOD) 
Blocks                                : 3968 
Device 14 
Path count                    : 3 
Good path count               : 3 
Path 0                                : /dev/sdag1 (GOOD) 
Path 1                                : /dev/sdah1 (GOOD) 
Path 2                                : /dev/emcpowera1 (GOOD)    - >
This should be /dev/emcpowerq1 
Blocks                                : 3968 
Device 15 
Path count                    : 3 
Good path count               : 3 
Path 0                                : /dev/sdai1 (GOOD) 
Path 1                                : /dev/sdaj1 (GOOD) 
Path 2                                : /dev/emcpowerb1 (GOOD)        -
> This should be /dev/emcpowerr1 
Blocks                                : 3968 

If I run a powermt display dev=emcpowerp then the underlying sd devices
are consistent with what the pool subsystem sees. 

[root@sasl003a root]# powermt display dev=emcpowerp 
Pseudo name=emcpowerp 
Symmetrix ID=000185704662 
Logical device ID=0699 
state=alive; policy=SymmOpt; priority=0; queued-IOs=0 
============================================================================== 
---------------- Host ---------------   - Stor -   -- I/O Path -  --
Stats --- 
### HW Path                 I/O Paths    Interf.   Mode    State  Q-IOs
Errors 
============================================================================== 
  0 QLogic Fibre Channel 2300 sdae       FA 13aA   active  alive      0
     0 
  1 QLogic Fibre Channel 2300 sdaf       FA  4aA   active  alive      0
     0 

However this is not true the next two devices.  The sd devices are
correct but the actual PowerPath device is wrong. 


Output of 'pooltool -s'
------------------------
Unable to read device "/dev/emcpowera1": Bad file descriptor
Unable to read device "/dev/emcpowerj2": Bad file descriptor
  Device                                            Pool Label
  ======                                            ==========
  /dev/pool/beta_ccs                          <- CCA device ->
  /dev/pool/datapoolE                            <- unknown ->
  /dev/emcpowera                                 <- unknown ->
  /dev/emcpowera1                                <- unknown ->
  /dev/emcpowerb                   <- partition information ->
  /dev/emcpowerb1                                     beta_ccs
  /dev/emcpoweri                   <- partition information ->
  /dev/emcpowerj                   <- partition information ->
  /dev/emcpowerj1                                    datapoolE
  /dev/emcpowerj2                                <- unknown ->
  /dev/emcpowerk                   <- partition information ->
  /dev/emcpowerk1                                    datapoolE
  /dev/emcpowerl                   <- partition information ->
  /dev/emcpowerm                   <- partition information ->
  /dev/emcpowern                   <- partition information ->
  /dev/emcpowera                                 <- unknown ->
  /dev/emcpowerb                   <- partition information ->
  /dev/emcpowerb1                                     beta_ccs
  /dev/emcpowerc                   <- partition information ->
  /dev/emcpowerc1                                    datapoolE
  /dev/emcpowerd                   <- partition information ->
  /dev/emcpowerd1                                    datapoolE
  /dev/emcpowere                   <- partition information ->
  /dev/emcpowere1                                    datapoolE
  /dev/emcpowerf                   <- partition information ->
  /dev/emcpowerf1                                    datapoolE
  /dev/emcpowerg                   <- partition information ->
  /dev/emcpowerg1                                    datapoolE
  /dev/emcpowerh                   <- partition information ->
  /dev/emcpowerh1                                    datapoolE
  /dev/emcpoweri                   <- partition information ->
  /dev/emcpoweri1                                    datapoolE
  /dev/emcpowerj                   <- partition information ->
  /dev/emcpowerj1                                    datapoolE
  /dev/emcpowerk                   <- partition information ->
  /dev/emcpowerk1                                    datapoolE
  /dev/emcpowerl                   <- partition information ->
  /dev/emcpowerl1                                    datapoolE
  /dev/emcpowerm                   <- partition information ->
  /dev/emcpowerm1                                    datapoolE
  /dev/emcpowern                   <- partition information ->
  /dev/emcpowern1                                    datapoolE
  /dev/emcpowero                   <- partition information ->
  /dev/emcpowero1                                    datapoolE
  /dev/emcpowerp                   <- partition information ->
  /dev/emcpowerp1                                    datapoolE
  /dev/sdag                        <- partition information ->
  /dev/sdag1                                         datapoolE
  /dev/sdah                        <- partition information ->
  /dev/sdah1                                         datapoolE
  /dev/sdai                        <- partition information ->
  /dev/sdai1                                         datapoolE
  /dev/sdaj                        <- partition information ->
  /dev/sdaj1                                         datapoolE
  /dev/sdq                         <- partition information ->
  /dev/sdq1                                          datapoolE
  /dev/sdr                         <- partition information ->
  /dev/sdr1                                          datapoolE
  /dev/sds                         <- partition information ->
  /dev/sds1                                          datapoolE
  /dev/sdt                         <- partition information ->
  /dev/sdt1                                          datapoolE
  /dev/sdu                         <- partition information ->
  /dev/sdu1                                          datapoolE
  /dev/sdv                         <- partition information ->
  /dev/sdv1                                          datapoolE
  /dev/sdw                         <- partition information ->
  /dev/sdw1                                          datapoolE
  /dev/sdx                         <- partition information ->
  /dev/sdx1                                          datapoolE
  /dev/sdy                         <- partition information ->
  /dev/sdy1                                          datapoolE
  /dev/sdz                         <- partition information ->
  /dev/sdz1                                          datapoolE
  /dev/sdaa                        <- partition information ->
  /dev/sdaa1                                         datapoolE
  /dev/sdab                        <- partition information ->
  /dev/sdab1                                         datapoolE
  /dev/sdac                        <- partition information ->
  /dev/sdac1                                         datapoolE
  /dev/sdad                        <- partition information ->
  /dev/sdad1                                         datapoolE
  /dev/sdae                        <- partition information ->
  /dev/sdae1                                         datapoolE
  /dev/sdaf                        <- partition information ->
  /dev/sdaf1                                         datapoolE
  /dev/sda                                       <- unknown ->
  /dev/sdb                         <- partition information ->
  /dev/sdb1                                           beta_ccs
  /dev/sdc                                       <- unknown ->
  /dev/sdd                         <- partition information ->
  /dev/sdd1                                           beta_ccs
  /dev/sde                         <- partition information ->
  /dev/sde1                                          datapoolE
  /dev/sdf                         <- partition information ->
  /dev/sdf1                                          datapoolE
  /dev/sdg                         <- partition information ->
  /dev/sdg1                                          datapoolE
  /dev/sdh                         <- partition information ->
  /dev/sdh1                                          datapoolE
  /dev/sdi                         <- partition information ->
  /dev/sdi1                                          datapoolE
  /dev/sdj                         <- partition information ->
  /dev/sdj1                                          datapoolE
  /dev/sdk                         <- partition information ->
  /dev/sdk1                                          datapoolE
  /dev/sdl                         <- partition information ->
  /dev/sdl1                                          datapoolE
  /dev/sdm                         <- partition information ->
  /dev/sdm1                                          datapoolE
  /dev/sdn                         <- partition information ->
  /dev/sdn1                                          datapoolE
  /dev/sdo                         <- partition information ->
  /dev/sdo1                                          datapoolE
  /dev/sdp                         <- partition information ->
  /dev/sdp1                                          datapoolE
  /dev/cciss/c0d0                  <- partition information ->
  /dev/cciss/c0d0p1                    <- EXT2/3 filesystem ->
  /dev/cciss/c0d0p2                    <- EXT2/3 filesystem ->
  /dev/cciss/c0d0p3                    <- EXT2/3 filesystem ->
  /dev/cciss/c0d0p4                <- partition information ->
  /dev/cciss/c0d0p5                    <- EXT2/3 filesystem ->
  /dev/cciss/c0d0p6                    <- EXT2/3 filesystem ->
  /dev/cciss/c0d0p7                    <- EXT2/3 filesystem ->
  /dev/cciss/c0d1                  <- partition information ->
  /dev/cciss/c0d1p1                          <- swap device ->
  /dev/cciss/c0d1p2                    <- EXT2/3 filesystem ->


How reproducible: Every time.


Steps to Reproduce:
1.  Create a new striped pool from 16 powerpath devices
2.  pool_info <poolname> -D
3.  Notice that the paths to the 14th and 15th devices point to the first two
powerpath devices in the pool, not the final two powerpath devices in the pool.

Comment 1 AJ Lewis 2005-03-01 20:57:14 UTC
This is because the powerpath driver does not set things up so that *all* its
entries are in gendisk (as seen in the /proc/partitions listings).   Workaround
is to scan the /dev directory for emcpower nodes instead of relying on
/proc/partitions to be accurate.



Comment 2 AJ Lewis 2005-03-01 20:58:22 UTC
Created attachment 111549 [details]
Proposed fix

Proposed patch to make the pool tools read the /dev/ directory structure for
emcpower devices when detected in /proc/partitions.

Comment 3 AJ Lewis 2005-03-01 21:01:24 UTC
Proposed fix is now in the 6.0 CVS tree and should be built in the next update.

Comment 4 Jonathan Earl Brassow 2005-05-02 19:54:21 UTC
Additionally, the pool kernel module has been updated so that it will use the
powerpath device _only_ allowing for powerpath to take care of multipathing
instead of doing it twice - once through PP and once through pool.

Comment 5 Jay Turner 2005-05-25 16:41:12 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2005-466.html