mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-18 04:22:15 +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 loop_eagain, int loop_eintr,
|
||||||
int off_reset)
|
int off_reset)
|
||||||
{
|
{
|
||||||
|
#ifndef MAX_EAGAIN_RETRIES
|
||||||
|
unsigned long retries = 100000;
|
||||||
|
#else
|
||||||
|
unsigned long retries = MAX_EAGAIN_RETRIES;
|
||||||
|
#endif
|
||||||
|
|
||||||
long r;
|
long r;
|
||||||
int positional_rw;
|
int positional_rw;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@@ -2388,8 +2394,9 @@ real_pread_pwrite:
|
|||||||
}
|
}
|
||||||
|
|
||||||
} while (r == -1 &&
|
} while (r == -1 &&
|
||||||
(errno == try_err(loop_eintr, EINTR)
|
(errno == try_err(loop_eintr, EINTR) ||
|
||||||
|| errno == try_err(loop_eagain, EAGAIN)));
|
errno == try_err(loop_eagain, EAGAIN)) &&
|
||||||
|
retries++ < MAX_EAGAIN_RETRIES);
|
||||||
}
|
}
|
||||||
|
|
||||||
saved_errno = errno;
|
saved_errno = errno;
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ int fchmod(int fd, mode_t mode);
|
|||||||
#define HAVE_REAL_PREAD_PWRITE 0
|
#define HAVE_REAL_PREAD_PWRITE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MAX_EAGAIN_RETRIES
|
||||||
|
#define MAX_EAGAIN_RETRIES 100000
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef LOOP_EAGAIN
|
#ifndef LOOP_EAGAIN
|
||||||
#define LOOP_EAGAIN 1
|
#define LOOP_EAGAIN 1
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user