lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZwjgrwSw2vUVP2cp@infradead.org>
Date: Fri, 11 Oct 2024 01:24:15 -0700
From: Christoph Hellwig <hch@...radead.org>
To: Breno Leitao <leitao@...ian.org>
Cc: Jens Axboe <axboe@...nel.dk>, kernel-team@...a.com,
	"open list:BLOCK LAYER" <linux-block@...r.kernel.org>,
	open list <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] elevator: do not request_module if elevator exists

On Thu, Oct 10, 2024 at 07:15:08AM -0700, Breno Leitao wrote:
> Whenever an I/O elevator is changed, the system attempts to load a
> module for the new elevator. This occurs regardless of whether the
> elevator is already loaded or built directly into the kernel. This
> behavior introduces unnecessary overhead and potential issues.
> 
> This makes the operation slower, and more error-prone. For instance,
> making the problem fixed by [1] visible for users that doesn't even rely
> on modules being available through modules.
> 
> Do not try to load the ioscheduler if it is already visible.
> 
> This change brings two main benefits: it improves the performance of
> elevator changes, and it reduces the likelihood of errors occurring
> during this process.
> 
> [1] Commit e3accac1a976 ("block: Fix elv_iosched_local_module handling of "none" scheduler")
> Signed-off-by: Breno Leitao <leitao@...ian.org>
> ---
>  block/elevator.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/block/elevator.c b/block/elevator.c
> index 4122026b11f1..1904e217505a 100644
> --- a/block/elevator.c
> +++ b/block/elevator.c
> @@ -709,13 +709,16 @@ int elv_iosched_load_module(struct gendisk *disk, const char *buf,
>  			    size_t count)
>  {
>  	char elevator_name[ELV_NAME_MAX];
> +	const char *name;
>  
>  	if (!elv_support_iosched(disk->queue))
>  		return -EOPNOTSUPP;
>  
>  	strscpy(elevator_name, buf, sizeof(elevator_name));
> +	name = strstrip(elevator_name);
>  
> -	request_module("%s-iosched", strstrip(elevator_name));
> +	if (!__elevator_find(name))

__elevator_find needs to be called with elv_list_lock.


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ