mirror of
https://github.com/samba-team/samba.git
synced 2025-08-26 01:49:31 +03:00
s3: Move the aio signal init to the vfs module
On platforms that don't have an RT signal space, signal initialization fails. aio_fork and aio_pthread don't need the signal, so this would block them from running as well.
This commit is contained in:
@ -2059,6 +2059,10 @@ static int vfswrap_fsetxattr(struct vfs_handle_struct *handle, struct files_stru
|
||||
static int vfswrap_aio_read(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
|
||||
{
|
||||
int ret;
|
||||
if (!initialize_async_io_handler()) {
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
* aio_read must be done as root, because in the glibc aio
|
||||
* implementation the helper thread needs to be able to send a signal
|
||||
@ -2074,6 +2078,10 @@ static int vfswrap_aio_read(struct vfs_handle_struct *handle, struct files_struc
|
||||
static int vfswrap_aio_write(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
|
||||
{
|
||||
int ret;
|
||||
if (!initialize_async_io_handler()) {
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
* aio_write must be done as root, because in the glibc aio
|
||||
* implementation the helper thread needs to be able to send a signal
|
||||
|
@ -71,7 +71,7 @@ static void smbd_aio_signal_handler(struct tevent_context *ev_ctx,
|
||||
}
|
||||
|
||||
|
||||
static bool initialize_async_io_handler(void)
|
||||
bool initialize_async_io_handler(void)
|
||||
{
|
||||
static bool tried_signal_setup = false;
|
||||
|
||||
@ -156,11 +156,6 @@ NTSTATUS schedule_aio_read_and_X(connection_struct *conn,
|
||||
size_t min_aio_read_size = lp_aio_read_size(SNUM(conn));
|
||||
int ret;
|
||||
|
||||
/* Ensure aio is initialized. */
|
||||
if (!initialize_async_io_handler()) {
|
||||
return NT_STATUS_RETRY;
|
||||
}
|
||||
|
||||
if (fsp->base_fsp != NULL) {
|
||||
/* No AIO on streams yet */
|
||||
DEBUG(10, ("AIO on streams not yet supported\n"));
|
||||
@ -263,11 +258,6 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
|
||||
size_t min_aio_write_size = lp_aio_write_size(SNUM(conn));
|
||||
int ret;
|
||||
|
||||
/* Ensure aio is initialized. */
|
||||
if (!initialize_async_io_handler()) {
|
||||
return NT_STATUS_RETRY;
|
||||
}
|
||||
|
||||
if (fsp->base_fsp != NULL) {
|
||||
/* No AIO on streams yet */
|
||||
DEBUG(10, ("AIO on streams not yet supported\n"));
|
||||
@ -426,11 +416,6 @@ NTSTATUS schedule_smb2_aio_read(connection_struct *conn,
|
||||
size_t min_aio_read_size = lp_aio_read_size(SNUM(conn));
|
||||
int ret;
|
||||
|
||||
/* Ensure aio is initialized. */
|
||||
if (!initialize_async_io_handler()) {
|
||||
return NT_STATUS_RETRY;
|
||||
}
|
||||
|
||||
if (fsp->base_fsp != NULL) {
|
||||
/* No AIO on streams yet */
|
||||
DEBUG(10, ("AIO on streams not yet supported\n"));
|
||||
@ -532,11 +517,6 @@ NTSTATUS schedule_aio_smb2_write(connection_struct *conn,
|
||||
size_t min_aio_write_size = lp_aio_write_size(SNUM(conn));
|
||||
int ret;
|
||||
|
||||
/* Ensure aio is initialized. */
|
||||
if (!initialize_async_io_handler()) {
|
||||
return NT_STATUS_RETRY;
|
||||
}
|
||||
|
||||
if (fsp->base_fsp != NULL) {
|
||||
/* No AIO on streams yet */
|
||||
DEBUG(10, ("AIO on streams not yet supported\n"));
|
||||
@ -1058,6 +1038,12 @@ void cancel_aio_by_fsp(files_struct *fsp)
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
bool initialize_async_io_handler(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
NTSTATUS schedule_aio_read_and_X(connection_struct *conn,
|
||||
struct smb_request *smbreq,
|
||||
files_struct *fsp, off_t startpos,
|
||||
|
@ -64,6 +64,7 @@ void srv_set_signing(struct smbd_server_connection *conn,
|
||||
|
||||
/* The following definitions come from smbd/aio.c */
|
||||
|
||||
bool initialize_async_io_handler(void);
|
||||
NTSTATUS schedule_aio_read_and_X(connection_struct *conn,
|
||||
struct smb_request *req,
|
||||
files_struct *fsp, off_t startpos,
|
||||
|
Reference in New Issue
Block a user