nbd_get_block_size(3)
β¨ nbd_get_block_size β bestie's guide to server block size constraints β¨
okay so this is a page from LIBNBD (manual section 3), and it's about nbd_get_block_size β the little function that tells you what block size constraints the server is out here advertising. it's giving "reading the room" but for I/O. π
πΈ NAME πΈ
nbd_get_block_size β return a specific server block size constraint
π SYNOPSIS π
#include <libnbd.h>
int64_t nbd_get_block_size (
struct nbd_handle *h, int size_type
);
π¦ DESCRIPTION π¦
okay so what this does: it returns a specific block size constraint that the server advertised. and if you get a 0 back? that means the server straight-up did NOT advertise a constraint. no cap. π
and here's the thing β constraints are hints. servers literally differ in their behaviour as to whether they enforce constraints or not. so like, don't @ me if a server plays fast and loose with its own rules.
the size_type parameter selects which constraint to read. it can be one of these icons π:
LIBNBD_SIZE_MINIMUM= 0 β if non-zero, this will be a power of 2 between 1 and 64k. any client request that is not aligned in length or offset to this size is likely to fail withEINVAL. also, the image size will generally also be a multiple of this value (and if it's not, the final few bytes are inaccessible while obeying alignment constraints β awkward π). if it's zero (meaning no information was returned by the server), it is safest to assume a minimum block size of 512, although many servers support a minimum block size of 1. and if the server does provide a constraint, then libnbd defaults to honoring that constraint client-side unlessLIBNBD_STRICT_ALIGNis cleared innbd_set_strict_mode(3). slay, defaults. β¨LIBNBD_SIZE_PREFERRED= 1 β if non-zero, this is a power of 2 representing the preferred size for efficient I/O. smaller requests may incur overhead such as read-modify-write cycles that will not be present when using I/O that is a multiple of this value. and lowkey this value may be larger than the size of the export. if it's zero (meaning no information was returned by the server), using4kas a preferred block size tends to give decent performance. cute. πLIBNBD_SIZE_MAXIMUM= 2 β if non-zero, this represents the maximum length that the server is willing to handle duringnbd_pread(3)ornbd_pwrite(3). other functions likenbd_zero(3)may still be able to use larger sizes, so don't assume. and note that this function returns what the server advertised, but libnbd itself imposes a maximum of 64M. important distinction, bestie. π if it's zero (meaning no information was returned by the server), some NBD servers will abruptly disconnect if a transaction sends or receives more than 32M of data. like, just hang up on you. rude but real. π₯LIBNBD_SIZE_PAYLOAD= 3 β this value is not advertised by the server, but rather represents the maximum outgoing payload size for a given connection that libnbd will enforce unlessLIBNBD_STRICT_PAYLOADis cleared innbd_set_strict_mode(3). it is always non-zero: never smaller than 1M, never larger than 64M, and matchesLIBNBD_SIZE_MAXIMUMwhen possible. iconic consistency. π
future NBD extensions may result in additional size_type values, so stay tuned i guess. also note that by default, libnbd requests all available block sizes, but a server may differ in what sizes it chooses to report if nbd_set_request_block_size(3) alters whether the client requests sizes. the drama of negotiation. π
β RETURN VALUE β
this call returns a 64 bit signed integer β₯ 0. that's it, that's the vibe.
π ERRORS π
on error -1 is returned. π
refer to "ERROR HANDLING" in libnbd(3) for how to get further details of the error.
the following parameters must not be NULL: "h". for more information see "Non-NULL parameters" in libnbd(3). so like, actually pass a handle, bestie. π«Ά
π§ NOTES π§
Non-blocking call
this call does not block, because it returns data that is saved in the handle from the NBD protocol handshake. it already knows the answer. main character energy. π
π HANDLE STATE π
nbd_get_block_size can be called when the handle is in the following states:
- Handle created, before connecting β β error
- Connecting β β error
- Connecting & handshaking (
opt_mode) β β allowed - Connected to the server β β allowed
- Connection shut down β β allowed
- Handle dead β β error
so basically: mid-handshake, connected, or shut down? you're good. before connecting, mid-connect, or straight-up dead? nope. vibe check failed. π
π VERSION π
this function first appeared in libnbd 1.4.
if you need to test if this function is available at compile time check if the following macro is defined:
#define LIBNBD_HAVE_NBD_GET_BLOCK_SIZE 1
π₯ SEE ALSO π₯
nbd_create(3), nbd_get_protocol(3), nbd_get_size(3), nbd_opt_info(3), nbd_pread(3), nbd_pwrite(3), nbd_set_request_block_size(3), nbd_zero(3), libnbd(3).
π AUTHORS π
Eric Blake
Richard W.M. Jones
πΈ COPYRIGHT πΈ
Copyright Red Hat
π LICENSE π
this library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
this library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
you should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
and that's the whole page, bestie! π«Ά this one's from libnbd-1.25.8, dated 2026-10-13 β so like, extremely fresh. go forth and align your offsets. periodt. π β¨
π¦ where this page comes from
- centos-stream 10: libnbd-devel 1.25.8-1.el10 Β· LGPL-2.0-or-later AND BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms