Re: [PATCH v2 07/14] libmultipath: io_err_stat: fix error handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Oct 26, 2023 at 07:41:46PM +0200, mwilck@xxxxxxxx wrote:
> From: Martin Wilck <mwilck@xxxxxxxx>
> 
> libaio uses a different error return convention than glibc. The error code is
> not returned in errno, but as the negated return value of the function.
> Adapt the error handling code in io_err_stat.c. Don't print an error message
> for failure of io_cancel(), which always returns -EINPRPOGRESS.
> 
> Signed-off-by: Martin Wilck <mwilck@xxxxxxxx>
Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
> ---
>  libmultipath/io_err_stat.c | 36 ++++++++++++++++--------------------
>  1 file changed, 16 insertions(+), 20 deletions(-)
> 
> diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c
> index 5749003..1c59445 100644
> --- a/libmultipath/io_err_stat.c
> +++ b/libmultipath/io_err_stat.c
> @@ -19,7 +19,6 @@
>  #include <sys/ioctl.h>
>  #include <linux/fs.h>
>  #include <libaio.h>
> -#include <errno.h>
>  #include <sys/mman.h>
>  #include <sys/select.h>
>  
> @@ -469,7 +468,7 @@ static void end_io_err_stat(struct io_err_stat_path *pp)
>  
>  static int send_each_async_io(struct dio_ctx *ct, int fd, char *dev)
>  {
> -	int rc = -1;
> +	int rc;
>  
>  	if (ct->io_starttime.tv_nsec == 0 &&
>  			ct->io_starttime.tv_sec == 0) {
> @@ -477,15 +476,15 @@ static int send_each_async_io(struct dio_ctx *ct, int fd, char *dev)
>  
>  		get_monotonic_time(&ct->io_starttime);
>  		io_prep_pread(&ct->io, fd, ct->buf, ct->blksize, 0);
> -		if (io_submit(ioctx, 1, ios) != 1) {
> -			io_err_stat_log(2, "%s: io_submit error %i",
> -					dev, errno);
> -			return rc;
> +		if ((rc = io_submit(ioctx, 1, ios)) != 1) {
> +			io_err_stat_log(2, "%s: io_submit error %s",
> +					dev, strerror(-rc));
> +			return -1;
>  		}
> -		rc = 0;
> +		return 0;
>  	}
>  
> -	return rc;
> +	return -1;
>  }
>  
>  static void send_batch_async_ios(struct io_err_stat_path *pp)
> @@ -530,8 +529,8 @@ static int try_to_cancel_timeout_io(struct dio_ctx *ct, struct timespec *t,
>  		io_err_stat_log(5, "%s: abort check on timeout", dev);
>  		r = io_cancel(ioctx, ios[0], &event);
>  		if (r)
> -			io_err_stat_log(5, "%s: io_cancel error %i",
> -					dev, errno);
> +			io_err_stat_log(5, "%s: io_cancel error %s",
> +					dev, strerror(-r));
>  		rc = PATH_TIMEOUT;
>  	} else {
>  		rc = PATH_PENDING;
> @@ -560,7 +559,7 @@ static void poll_async_io_timeout(void)
>  static void cancel_inflight_io(struct io_err_stat_path *pp)
>  {
>  	struct io_event event;
> -	int i, r;
> +	int i;
>  
>  	for (i = 0; i < CONCUR_NR_EVENT; i++) {
>  		struct dio_ctx *ct = pp->dio_ctx_array + i;
> @@ -571,10 +570,7 @@ static void cancel_inflight_io(struct io_err_stat_path *pp)
>  			continue;
>  		io_err_stat_log(5, "%s: abort infligh io",
>  				pp->devname);
> -		r = io_cancel(ioctx, ios[0], &event);
> -		if (r)
> -			io_err_stat_log(5, "%s: io_cancel error %d, %i",
> -					pp->devname, r, errno);
> +		io_cancel(ioctx, ios[0], &event);
>  	}
>  }
>  
> @@ -610,12 +606,11 @@ static void process_async_ios_event(int timeout_nsecs, char *dev)
>  	int		i, n;
>  	struct timespec	timeout = { .tv_nsec = timeout_nsecs };
>  
> -	errno = 0;
>  	pthread_testcancel();
>  	n = io_getevents(ioctx, 1L, CONCUR_NR_EVENT, events, &timeout);
>  	if (n < 0) {
> -		io_err_stat_log(3, "%s: async io events returned %d (errno=%s)",
> -				dev, n, strerror(errno));
> +		io_err_stat_log(3, "%s: io_getevents returned %s",
> +				dev, strerror(-n));
>  	} else {
>  		for (i = 0; i < n; i++)
>  			handle_async_io_done_event(&events[i]);
> @@ -704,8 +699,9 @@ int start_io_err_stat_thread(void *data)
>  	if (uatomic_read(&io_err_thread_running) == 1)
>  		return 0;
>  
> -	if (io_setup(CONCUR_NR_EVENT * NR_IOSTAT_PATHS, &ioctx) != 0) {
> -		io_err_stat_log(1, "io_setup failed - increase /proc/sys/fs/aio-nr ?");
> +	if ((ret = io_setup(NR_IOSTAT_PATHS * CONCUR_NR_EVENT, &ioctx)) != 0) {
> +		io_err_stat_log(1, "io_setup failed: %s, increase /proc/sys/fs/aio-nr ?",
> +				strerror(-ret));
>  		return 1;
>  	}
>  
> -- 
> 2.42.0





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux