Dear list,
This might now be semi-solved?
Looping back to the thread excerpted below, I realise belatedly that statvfs(3) can give some information on this.
statvfs fills in a struct statvfs, which, according to statvfs(3) on FreeBSD, includes members
f_frsize The size in bytes of the minimum unit of allocation on
this file system. (This corresponds to the f_bsize
member of struct statfs.)
f_bsize The preferred length of I/O requests for files on this
file system. (Corresponds to the f_iosize member of
struct statfs.)
According to POSIX Issue 7 (2018) [1], these are
unsigned long f_bsize File system block size.
unsigned long f_frsize Fundamental file system block size.
As usual, POSIX is being a _little_ bit non-committal here!
Member f_frsize is 512 when I call this on FreeBSD (f_bsize is a lot bigger).
Thus, it _appears_ that:
* neither FreeBSD manpages nor POSIX specify what the block size is for quotactl(2) responses, as far as I can see (because POSIX doesn't talk about quotas), and
* neither of them explicitly say what units are used for struct dqblk's dqb_curblocks member and the like, and neither of them points towards statvfs,
...but the wording of statvfs(3) in both cases is consistent with f_frsize being those units.
That's not really satisfactory, but it's close enough to Documentation, for me, for the moment. Onward and upward...
Incidentally, on macOS, sys/quota.h defines the (non-POSIX) struct dqblk, that quotactl fills in, to have no field dqb_curblocks, but instead dqb_curbytes, which seems a lot more sensible.
Best wishes,
Norman
[1] Issue 7 is at <
https://pubs.opengroup.org/onlinepubs/9699919799/toc.htm>; Issue 8 doesn't seem to differ in any respects relevant to this question.