Ipmiutil fru goes into infinite loop if reservation ID is cancelled or lost
its can be re-created by running two commands at the same time, as below
$ipmiutil sensor & ipmiutil fru
ipmiutil ver 2.91
ifru: version 2.91
-- BMC version 2.41, IPMI version 2.0
--- Scanning SDR Repository for 188 SDRs ---
SDR[0002] error 0 ccode = c5
SDR[0002] error 0 ccode = c5
…
...
SDR[0002] error 0 ccode = c5
In the above test case, while “ipmiutil sensor” succeeds however “ipmiutil fru” goes into infinite loop.
The issue is ipmiutil fru doesn’t re-try reservation ID and it goes into a loop while fetching SDR records.
When we run using -x debug we can see that get_sdr get cc=0xc5 and its in a loop
<snip>
sdr_get_reservation ret=0
ccode c5: Reservation ID cancelled or invalid
get_sdr[3] ret = 0 cc = c5 sresp = 1
..
..
..
get_sdr[3] ret = 0 cc = c5 sresp = 1
<snip></snip></snip>
The issue is with ifru.c code
if ((cc == 0xC5) || (cc == 0x83)) ; /do not stop (ARC)/
get_sdr() should return with error code and if cc=0xC5 we should do the reservation again.
This issue is of similar to isensor.c where it retries when reservation ID is cancelled or lost.
I see the problem. Thanks for the report. I will update here when the fix is ready.
OK, the fix is validated and has been applied to git/svn. It will go into ipmiutil-3.1.1. Do you need a binary now?
Thanks a lot Andy for quick fix. Updated binaries will be really helpful.
Andy we primarily use Windows and EL6 binaries. If you could spin one for this fix it will be great.
Here are those two binaries (64-bit):
http://ipmiutil.sourceforge.net/FILES/ipmiutil-311.el6
http://ipmiutil.sourceforge.net/FILES/ipmiutil-311.exe
Thanks Andy for quick spinning of binaries, I have tested the binaries, no longer see the looping issue. Looking forward release with this bugfix.
Fix released with ipmiutil-3.1.1