mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-03-25 13:29:03 +02:00
util/nvmutil: limit EAGAIN/EINTR retries
set it really high though, so it's still basically reliably an EINTR/EAGAIN storm could cause problems in prw() Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
@@ -2261,6 +2261,12 @@ prw(int fd, void *mem, unsigned long nrw,
|
||||
int loop_eagain, int loop_eintr,
|
||||
int off_reset)
|
||||
{
|
||||
#ifndef MAX_EAGAIN_RETRIES
|
||||
unsigned long retries = 100000;
|
||||
#else
|
||||
unsigned long retries = MAX_EAGAIN_RETRIES;
|
||||
#endif
|
||||
|
||||
long r;
|
||||
int positional_rw;
|
||||
struct stat st;
|
||||
@@ -2388,8 +2394,9 @@ real_pread_pwrite:
|
||||
}
|
||||
|
||||
} while (r == -1 &&
|
||||
(errno == try_err(loop_eintr, EINTR)
|
||||
|| errno == try_err(loop_eagain, EAGAIN)));
|
||||
(errno == try_err(loop_eintr, EINTR) ||
|
||||
errno == try_err(loop_eagain, EAGAIN)) &&
|
||||
retries++ < MAX_EAGAIN_RETRIES);
|
||||
}
|
||||
|
||||
saved_errno = errno;
|
||||
|
||||
@@ -36,6 +36,10 @@ int fchmod(int fd, mode_t mode);
|
||||
#define HAVE_REAL_PREAD_PWRITE 0
|
||||
#endif
|
||||
|
||||
#ifndef MAX_EAGAIN_RETRIES
|
||||
#define MAX_EAGAIN_RETRIES 100000
|
||||
#endif
|
||||
|
||||
#ifndef LOOP_EAGAIN
|
||||
#define LOOP_EAGAIN 1
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user