0

I have an HPE SN1100Q 2port 16G HBA card on my hpe proliant gen10 server which is connected to HPE 3par storage direct attach. And some wierd stuff happening. Im using qla2xxx driver version 10.01.00.19-k which comes built-in in ubuntu 20.04. When my servers restart the connection between my server and 3par become unaccessible. But when i reset my fc_ports with this commands the connection accessible again.

echo 1 > /sys/class/fc_host/host7/issue_lip
echo 1 > /sys/class/fc_host/host9/issue_lip

So i want to reset this ports before the server tries mount the paths. I wrote a systemd service and reset-hba script for this. But multipath trying to access paths before my script reset the ports. How can i fix this problem?

Here is my systemd service:

[Unit]
Description=Reset hba ports on startup
Before=multipathd.service
 
[Service]
Type=oneshot
ExecStartPre=/sbin/modprobe -a qla2xxx
ExecStart=/bin/bash -c "/opt/hpe-hba/reset_hba_ports.sh"

[Install]
WantedBy=sysinit.target

And my reset script:

#/bin/bash

FC_HOST_PATH="/sys/class/fc_host"

modprobe qla2xxx

until [ ! -z "$(ls $FC_HOST_PATH)" ]
do
    sleep 1
    echo "Waiting for FC hosts..."
done

echo "HBA port reset in progess..."
for host in $(ls $FC_HOST_PATH);do
    RPORT=$(ls $FC_HOST_PATH/$host/device/ | grep rport)
    TPORT=$(ls $FC_HOST_PATH/$host/device/$RPORT | grep target)
    if [ -z "${TPORT}" ]
    then
    echo "$host not connected. Resetting FC port"
        echo 1 >  /sys/class/fc_host/$host/issue_lip;
    fi
done

echo "Waiting for the FC communication to be established."
try_count=0
while [ $try_count -le 3 ]
do
    err=0
    for host in $(ls $FC_HOST_PATH)
    do 
        RPORT=$(ls $FC_HOST_PATH/$host/device/ | grep rport)
        TPORT=$(ls $FC_HOST_PATH/$host/device/$RPORT | grep target)
        echo "Target port for $host is $TPORT"
        if [ -z "${TPORT}" ]
        then
            echo "HBA FC port is not ready yet. Target is not available! Waiting for 10 sec..."
            err=1
            sleep 5
        fi
    done
    if [ $err -eq 0 ]
    then
        break
    fi
    ((try_count++))
done

echo "FC port init complated!"

DATE=$(/usr/bin/date)
echo $DATE >> /opt/hpe-hba/last_run.txt

0 Answers0