From 7ff2830bf60db7878fd81a52ee82786c410ae1e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Thu, 23 Jul 2026 19:32:58 -0300 Subject: [PATCH] fix(ipmi): never rate-limit packets to an FPC during reseat reseat_node opens an IPMI session to the FPC/CMM to reseat a node. The FPC needs packets sent without maxpending flow-control, but that state is only held transiently. Add a persistent per-session 'neverwait' flag, set it on the FPC reseat session, and honor it in sendpayload. The flag defaults off, so it is a no-op for every other IPMI session; only the FPC reseat path opts in. (The lenovobuild original also reworked the shared login/admin_level_set nowait handling; that part is left out to avoid changing flow-control for all BMCs.) Not lab-validated (no NeXtScale FPC/CMM available). Recovered from the unmerged lenovobuild branch (eda85df3, neverwait hunks only). --- xCAT-server/lib/perl/xCAT/IPMI.pm | 2 +- xCAT-server/lib/xcat/plugins/ipmi.pm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xCAT-server/lib/perl/xCAT/IPMI.pm b/xCAT-server/lib/perl/xCAT/IPMI.pm index 7afeb85ea..98fb3780a 100644 --- a/xCAT-server/lib/perl/xCAT/IPMI.pm +++ b/xCAT-server/lib/perl/xCAT/IPMI.pm @@ -1203,7 +1203,7 @@ sub sendpayload { #push integrity data } } - unless ($args{nowait} or $self->{nowait}) { #if nowait indicated, the packet will be sent regardless of maxpending + unless ($args{nowait} or $self->{nowait} or $self->{neverwait}) { #if nowait indicated, the packet will be sent regardless of maxpending #primary use case would be retries that should represent no delta to pending sessions in aggregate and therefore couldn't exceed maxpending anywy #if we did do this on timedout, waitforrsp may recurse, which is a complicated issue. Theoretically, if waitforrsp protected itself, it #would act the same, but best be explicit about nowait if practice does not match theory diff --git a/xCAT-server/lib/xcat/plugins/ipmi.pm b/xCAT-server/lib/xcat/plugins/ipmi.pm index 7cd34129c..ace996ff9 100644 --- a/xCAT-server/lib/xcat/plugins/ipmi.pm +++ b/xCAT-server/lib/xcat/plugins/ipmi.pm @@ -2753,7 +2753,7 @@ sub reseat_node { data => [ $sessdata->{slotnumber}, 2 ], callback => \&fpc_node_reseat_complete, callback_args => $sessdata); } else { - $sessdata->{fpcipmisession} = xCAT::IPMI->new(bmc => $mpent->{mpa}, userid => $nodeuser, password => $nodepass); + $sessdata->{fpcipmisession} = xCAT::IPMI->new(bmc => $mpent->{mpa}, userid => $nodeuser, password => $nodepass, neverwait => 1); $fpcsessions{$mpent->{mpa}} = $sessdata->{fpcipmisession}; $sessdata->{fpcipmisession}->login(callback => \&fpc_node_reseat, callback_args => $sessdata); }