mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Allow "max mux" async i/o requests
In the negprot reply, we allowed the client to issued "max mux" concurrent
requests. The OS might allow less, for example AFAIK AIX has a configurable
limit of concurrent AIO requests. We will fall back to sync operation for the
requests that are too many when aio_read/aio_write return an error.
Jeremy, please check!
(This used to be commit 8f86f7f25c
)
This commit is contained in:
parent
21b6a03678
commit
fcee8fee63
@ -141,10 +141,10 @@ static struct aio_extra *find_aio_ex(uint16 mid)
|
||||
We can have these many aio buffers in flight.
|
||||
*****************************************************************************/
|
||||
|
||||
#define AIO_PENDING_SIZE 10
|
||||
static int aio_pending_size;
|
||||
static sig_atomic_t signals_received;
|
||||
static int outstanding_aio_calls;
|
||||
static uint16 aio_pending_array[AIO_PENDING_SIZE];
|
||||
static uint16 *aio_pending_array;
|
||||
|
||||
/****************************************************************************
|
||||
Signal handler when an aio request completes.
|
||||
@ -152,7 +152,7 @@ static uint16 aio_pending_array[AIO_PENDING_SIZE];
|
||||
|
||||
void aio_request_done(uint16_t mid)
|
||||
{
|
||||
if (signals_received < AIO_PENDING_SIZE) {
|
||||
if (signals_received < aio_pending_size) {
|
||||
aio_pending_array[signals_received] = mid;
|
||||
signals_received++;
|
||||
}
|
||||
@ -182,6 +182,10 @@ void initialize_async_io_handler(void)
|
||||
{
|
||||
struct sigaction act;
|
||||
|
||||
aio_pending_size = lp_maxmux();
|
||||
aio_pending_array = SMB_MALLOC_ARRAY(uint16, aio_pending_size);
|
||||
SMB_ASSERT(aio_pending_array != NULL);
|
||||
|
||||
ZERO_STRUCT(act);
|
||||
act.sa_sigaction = signal_handler;
|
||||
act.sa_flags = SA_SIGINFO;
|
||||
@ -231,7 +235,7 @@ bool schedule_aio_read_and_X(connection_struct *conn,
|
||||
return False;
|
||||
}
|
||||
|
||||
if (outstanding_aio_calls >= AIO_PENDING_SIZE) {
|
||||
if (outstanding_aio_calls >= aio_pending_size) {
|
||||
DEBUG(10,("schedule_aio_read_and_X: Already have %d aio "
|
||||
"activities outstanding.\n",
|
||||
outstanding_aio_calls ));
|
||||
@ -320,7 +324,7 @@ bool schedule_aio_write_and_X(connection_struct *conn,
|
||||
return False;
|
||||
}
|
||||
|
||||
if (outstanding_aio_calls >= AIO_PENDING_SIZE) {
|
||||
if (outstanding_aio_calls >= aio_pending_size) {
|
||||
DEBUG(3,("schedule_aio_write_and_X: Already have %d aio "
|
||||
"activities outstanding.\n",
|
||||
outstanding_aio_calls ));
|
||||
|
Loading…
Reference in New Issue
Block a user