git: 3a1bf59d195c - main - shmfd: consistently return size in 512 byte blocks for fstat(2) st_blocks

Konstantin Belousov <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a85c1f7.3119d.64f40c1e__1673.44243252359$1787150856$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=3a1bf59d195ced99c0f69774969d7090d21f6097

commit 3a1bf59d195ced99c0f69774969d7090d21f6097
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2026-08-19 02:27:46 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2026-08-19 14:46:34 +0000

    shmfd: consistently return size in 512 byte blocks for fstat(2) st_blocks
    
    This is ABI-breaking change that could be considered as the bug fix.
    
    Requested by:   David Timber <[email protected]>
    Reviewed by:    emaste, markj
    Sponsored by:   The FreeBSD Foundation
    Relnotes:       yes
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D58942
---
 lib/libsys/stat.2   | 8 ++++++--
 sys/kern/uipc_shm.c | 8 ++------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/lib/libsys/stat.2 b/lib/libsys/stat.2
index c16af32a340d..bbec876da1fd 100644
--- a/lib/libsys/stat.2
+++ b/lib/libsys/stat.2
@@ -271,10 +271,14 @@ be zero.
 .Pp
 For file descriptors referencing specific non-file objects,
 the field is type-specific.
+.Pp
 For POSIX shared memory segments
 .Pq see Xr shm_open 2 ,
-the block size is equal to
-the platform page size
+the block size is 512 bytes.
+For older versions of
+.Fx
+.Pq before 15.2 and 16.0
+the block size was equal to the platform page size
 .Pq Xr getpagesize 2 .
 .El
 .Pp
diff --git a/sys/kern/uipc_shm.c b/sys/kern/uipc_shm.c
index 8341364f4d16..04b6f4f6e07a 100644
--- a/sys/kern/uipc_shm.c
+++ b/sys/kern/uipc_shm.c
@@ -658,12 +658,8 @@ shm_stat(struct file *fp, struct stat *sb, struct ucred *active_cred)
 	sb->st_dev = shm_dev_ino;
 	sb->st_ino = shmfd->shm_ino;
 	sb->st_nlink = shmfd->shm_object->ref_count;
-	if (shm_largepage(shmfd)) {
-		sb->st_blocks = shmfd->shm_object->size /
-		    (pagesizes[shmfd->shm_lp_psind] >> PAGE_SHIFT);
-	} else {
-		sb->st_blocks = shmfd->shm_pages;
-	}
+	sb->st_blocks = ptoa(shm_largepage(shmfd) ? shmfd->shm_object->size :
+	    shmfd->shm_pages) / DEV_BSIZE;
 
 	return (0);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.