Page MenuHomeFreeBSD

vfs: stop always overwriting ->mnt_stat in VFS_STATFS
ClosedPublic

Authored by mjg on Aug 18 2019, 5:15 PM.

Details

Summary

statfs is called a lot and currently the code does the following:

int
__vfs_statfs(struct mount *mp, struct statfs *sbp)
{
        int error;

        error = mp->mnt_op->vfs_statfs(mp, &mp->mnt_stat);
        if (sbp != &mp->mnt_stat)
                *sbp = mp->mnt_stat;
        return (error);
}

i.e. all callers ovewrrite the content at the same time. Apart from this being a bottleneck, it does not appear to be of any user either. To the best of my grep all fields are either constant since mount/remount or not used by filesystems in the first place, Also note both mount and remount code do VFS_STATFS(mp, &mp->mnt_stat) to populate it.

There are infrequent callers who use it as means to avoid having to allocate a new buffer. I left them alone.

This came when I tried to benchmark statfs after removing mount mtx from the code path (to be posted later).

Diff Detail

Repository
rS FreeBSD src repository
Lint
Lint Skipped
Unit
Unit Tests Skipped
Build Status
Buildable 25946

Event Timeline

mjg created this revision.Aug 18 2019, 5:15 PM
kib accepted this revision.Aug 18 2019, 6:21 PM
This revision is now accepted and ready to land.Aug 18 2019, 6:21 PM
This revision was automatically updated to reflect the committed changes.