From: Miklos S. <mi...@sz...> - 2005-11-28 13:32:39
|
> > I'm not sure about the standard, but to make statvfs work properly on > FreeBSD, the following patch is needed for FUSE lib: > > diff -up fuse/lib/fuse_lowlevel.c.orig fuse/lib/fuse_lowlevel.c > --- fuse/lib/fuse_lowlevel.c.orig Sun Nov 27 23:37:25 2005 > +++ fuse/lib/fuse_lowlevel.c Sun Nov 27 23:37:32 2005 > @@ -187,7 +187,7 @@ char *fuse_add_dirent(char *buf, const c > static void convert_statfs(const struct statvfs *stbuf, > struct fuse_kstatfs *kstatfs) > { > - kstatfs->bsize = stbuf->f_bsize; > + kstatfs->bsize = stbuf->f_frsize; > kstatfs->blocks = stbuf->f_blocks; > kstatfs->bfree = stbuf->f_bfree; > kstatfs->bavail = stbuf->f_bavail; > > ... and a similar one for sshfs, and all fs-s starting to adopt API 25 > should use the "f_frsize" stavfs field instead of "f_bsize". Instead added frsize field to fuse_kstatfs (with all the backward compatiblity magic, that FreeBSD won't need). > For Linux, this change seems indifferent. > > In glibc, the following comment can be seen: > > /* Linux has the f_frsize size only in later version of the kernel. > If the value is not filled in use f_bsize. */ > > I don't know what newer kernels are doing with f_frsize, yet the > 2.6.15-rc1 kernel I'm using seems to keep it on the same value as > f_bsize. Haven't checked, but some filesystems might well set f_frsize to a different value than f_bsize. f_frsize has been in Linux since pre-2.6.0. FUSE didn't pick it up simply because I hadn't noticed. Miklos |