• Amir Goldstein's avatar
    fs: report f_fsid from s_dev for "simple" filesystems · ae62bcb5
    Amir Goldstein authored
    There are many "simple" filesystems (*) that report null f_fsid in
    statfs(2).  Those "simple" filesystems report sb->s_dev as the st_dev
    field of the stat syscalls for all inodes of the filesystem (**).
    
    In order to enable fanotify reporting of events with fsid on those
    "simple" filesystems, report the sb->s_dev number in f_fsid field of
    statfs(2).
    
    (*) For most of the "simple" filesystem refered to in this commit, the
    ->statfs() operation is simple_statfs(). Some of those fs assign the
    simple_statfs() method directly in their ->s_op struct and some assign it
    indirectly via a call to simple_fill_super() or to pseudo_fs_fill_super()
    with either custom or "simple" s_op.
    We also make the same change to efivarfs and hugetlbfs, although they do
    not use simple_statfs(), because they use the simple_* inode opreations
    (e.g. simple_lookup()).
    
    (**) For most of the "simple" filesystems, the ->getattr() method is not
    assigned, so stat() is implemented by generic_fillattr().  A few "simple"
    filesystem use the simple_getattr() method which also calls
    generic_fillattr() to fill most of the stat struct.
    
    The two exceptions are procfs and 9p. procfs implements several different
    ->getattr() methods, but they all end up calling generic_fillattr() to
    fill the st_dev field from sb->s_dev.
    
    9p has more complicated ->getattr() methods, but they too, end up calling
    generic_fillattr() to fill the st_dev field from sb->s_dev.
    
    Note that 9p and kernfs also call simple_statfs() from custom ->statfs()
    methods which already fill the f_fsid field, but v9fs_statfs() calls
    simple_statfs() only in case f_fsid was not filled and kenrfs_statfs()
    overwrites f_fsid after calling simple_statfs().
    
    Link: https://lore.kernel.org/r/20230919094820.g5bwharbmy2dq46w@quack3/Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Link: https://lore.kernel.org/r/20231023143049.2944970-1-amir73il@gmail.comReviewed-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    ae62bcb5
inode.c 45.4 KB