[CRIU] [PATCH] fdstore: Print detailed error when queue is exhausted

Andrey Vagin avagin at virtuozzo.com
Mon Jun 25 20:20:18 MSK 2018


On Fri, Jun 22, 2018 at 02:48:26PM +0300, Cyrill Gorcunov wrote:
> We use fdstore intensively for example when handling
> bindmounted sockets and ghost dgram sockets. The system
> limit for per-socket queue may not be enough if someone
> generate lots of ghost sockets (150 and more as been
> detected on default fedora 27).
> 
> We can't just increase system limits since thery are
> global but instead lets print an error with list
> of parameters to adjust. This will give a node
> admin a way to process restore.

Do you understand that, in this case, we can't use fdstore to restore
unix sockets?

> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
> ---
>  criu/fdstore.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/criu/fdstore.c b/criu/fdstore.c
> index 8d3a6c89b1dc..2748c6743fa7 100644
> --- a/criu/fdstore.c
> +++ b/criu/fdstore.c
> @@ -79,11 +79,25 @@ int fdstore_init(void)
>  int fdstore_add(int fd)
>  {
>  	int sk = get_service_fd(FDSTORE_SK_OFF);
> -	int id;
> +	int id, ret, i;
>  
>  	mutex_lock(&desc->lock);
>  
> -	if (send_fd(sk, NULL, 0, fd)) {
> +	ret = send_fd(sk, NULL, 0, fd);
> +	if (ret) {
> +		int err_cpy = errno;
> +		pr_perror("Can't send fd %d into store\n", fd);
> +		if (err_cpy == EAGAIN) {
> +			static const char * const sysctl_params[] = {
> +				"net.core.rmem_default",
> +				"net.core.rmem_max",
> +				"net.core.wmem_default",
> +				"net.core.wmem_max",
> +			};
> +			pr_err("Too many fdstore entries are used. Increase sysctl:\n");
> +			for (i = 0; i < ARRAY_SIZE(sysctl_params); i++)
> +				pr_err("  %s\n", sysctl_params[i]);
> +		}
>  		mutex_unlock(&desc->lock);
>  		return -1;
>  	}
> -- 
> 2.14.4
> 


More information about the CRIU mailing list