[PATCH 2/2] smb: server: correct value for smb_direct_max_fragmented_recv_size

Namjae Jeon linkinjeon at kernel.org
Fri Feb 6 15:09:34 UTC 2026


> -/*  The maximum fragmented upper-layer payload receive size supported */
> -static int smb_direct_max_fragmented_recv_size = 1024 * 1024;
> +/*
> + * The maximum fragmented upper-layer payload receive size supported
> + *
> + * Assume max_payload_per_credit is
> + * smb_direct_receive_credit_max - 24 = 1340
> + *
> + * The maximum number would be
> + * smb_direct_receive_credit_max * max_payload_per_credit
> + *
> + *                       1340 * 255 = 341700 (0x536C4)
> + *
> + * The minimum value from the spec is 131072 (0x20000)
> + *
> + * For now we use the logic we used before:
> + *                 (1364 * 255) / 2 = 173910 (0x2A756)
> + */
> +static int smb_direct_max_fragmented_recv_size = (1364 * 255) / 2;
>
>  /*  The maximum single-message size which can be received */
>  static int smb_direct_max_receive_size = 1364;
> @@ -2531,6 +2546,29 @@ static int smb_direct_prepare(struct ksmbd_transport *t)
>                                   le32_to_cpu(req->max_receive_size));
>         sp->max_fragmented_send_size =
>                 le32_to_cpu(req->max_fragmented_size);
> +       /*
> +        * The maximum fragmented upper-layer payload receive size supported
> +        *
> +        * Assume max_payload_per_credit is
> +        * smb_direct_receive_credit_max - 24 = 1340
> +        *
> +        * The maximum number would be
> +        * smb_direct_receive_credit_max * max_payload_per_credit
> +        *
> +        *                       1340 * 255 = 341700 (0x536C4)
> +        *
> +        * The minimum value from the spec is 131072 (0x20000)
> +        *
> +        * For now we use the logic we used before:
> +        *                 (1364 * 255) / 2 = 173910 (0x2A756)
These comments explaining the calculation is currently duplicated in
both the global variable declaration and inside smb_direct_prepare().

> +        *
> +        * We need to adjust this here in case the peer
> +        * lowered sp->max_recv_size.
> +        *
> +        * TODO: instead of adjusting max_fragmented_recv_size
> +        * we should adjust the number of available buffers,
> +        * but for now we keep the current logic.
> +        */
>         sp->max_fragmented_recv_size =
>                 (sp->recv_credit_max * sp->max_recv_size) / 2;
>         sc->recv_io.credits.target = le16_to_cpu(req->credits_requested);
> --
> 2.43.0
>



More information about the samba-technical mailing list