874c8ca1e6
While randstruct was satisfied with using an open-coded "void *" offset cast for the netfs_i_context <-> inode casting, __builtin_object_size() as used by FORTIFY_SOURCE was not as easily fooled. This was causing the following complaint[1] from gcc v12: In file included from include/linux/string.h:253, from include/linux/ceph/ceph_debug.h:7, from fs/ceph/inode.c:2: In function 'fortify_memset_chk', inlined from 'netfs_i_context_init' at include/linux/netfs.h:326:2, inlined from 'ceph_alloc_inode' at fs/ceph/inode.c:463:2: include/linux/fortify-string.h:242:25: warning: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Wattribute-warning] 242 | __write_overflow_field(p_size_field, size); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fix this by embedding a struct inode into struct netfs_i_context (which should perhaps be renamed to struct netfs_inode). The struct inode vfs_inode fields are then removed from the 9p, afs, ceph and cifs inode structs and vfs_inode is then simply changed to "netfs.inode" in those filesystems. Further, rename netfs_i_context to netfs_inode, get rid of the netfs_inode() function that converted a netfs_i_context pointer to an inode pointer (that can now be done with &ctx->inode) and rename the netfs_i_context() function to netfs_inode() (which is now a wrapper around container_of()). Most of the changes were done with: perl -p -i -e 's/vfs_inode/netfs.inode/'g \ `git grep -l 'vfs_inode' -- fs/{9p,afs,ceph,cifs}/*.[ch]` Kees suggested doing it with a pair structure[2] and a special declarator to insert that into the network filesystem's inode wrapper[3], but I think it's cleaner to embed it - and then it doesn't matter if struct randomisation reorders things. Dave Chinner suggested using a filesystem-specific VFS_I() function in each filesystem to convert that filesystem's own inode wrapper struct into the VFS inode struct[4]. Version #2: - Fix a couple of missed name changes due to a disabled cifs option. - Rename nfs_i_context to nfs_inode - Use "netfs" instead of "nic" as the member name in per-fs inode wrapper structs. [ This also undoes commit |
||
---|---|---|
.. | ||
caching | ||
cifs | ||
ext4 | ||
nfs | ||
spufs | ||
9p.rst | ||
adfs.rst | ||
affs.rst | ||
afs.rst | ||
api-summary.rst | ||
autofs-mount-control.rst | ||
autofs.rst | ||
automount-support.rst | ||
befs.rst | ||
bfs.rst | ||
btrfs.rst | ||
ceph.rst | ||
coda.rst | ||
configfs.rst | ||
cramfs.rst | ||
dax.rst | ||
debugfs.rst | ||
devpts.rst | ||
directory-locking.rst | ||
dlmfs.rst | ||
dnotify.rst | ||
ecryptfs.rst | ||
efivarfs.rst | ||
erofs.rst | ||
ext2.rst | ||
ext3.rst | ||
f2fs.rst | ||
fiemap.rst | ||
files.rst | ||
fscrypt.rst | ||
fsverity.rst | ||
fuse-io.rst | ||
fuse.rst | ||
gfs2-glocks.rst | ||
gfs2-uevents.rst | ||
gfs2.rst | ||
hfs.rst | ||
hfsplus.rst | ||
hpfs.rst | ||
idmappings.rst | ||
index.rst | ||
inotify.rst | ||
isofs.rst | ||
journalling.rst | ||
locking.rst | ||
locks.rst | ||
mount_api.rst | ||
netfs_library.rst | ||
nilfs2.rst | ||
ntfs3.rst | ||
ntfs.rst | ||
ocfs2-online-filecheck.rst | ||
ocfs2.rst | ||
omfs.rst | ||
orangefs.rst | ||
overlayfs.rst | ||
path-lookup.rst | ||
path-lookup.txt | ||
porting.rst | ||
proc.rst | ||
qnx6.rst | ||
quota.rst | ||
ramfs-rootfs-initramfs.rst | ||
relay.rst | ||
romfs.rst | ||
seq_file.rst | ||
sharedsubtree.rst | ||
splice.rst | ||
squashfs.rst | ||
sysfs.rst | ||
sysv-fs.rst | ||
tmpfs.rst | ||
ubifs-authentication.rst | ||
ubifs.rst | ||
udf.rst | ||
vfat.rst | ||
vfs.rst | ||
virtiofs.rst | ||
xfs-delayed-logging-design.rst | ||
xfs-self-describing-metadata.rst | ||
zonefs.rst |