Merge branch 'ufs-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull more ufs fixes from Al Viro:
"More UFS fixes, unfortunately including build regression fix for the
64-bit s_dsize commit. Fixed in this pile:
- trivial bug in signedness of 32bit timestamps on ufs1
- ESTALE instead of ufs_error() when doing open-by-fhandle on
something deleted
- build regression on 32bit in ufs_new_fragments() - calculating that
many percents of u64 pulls libgcc stuff on some of those. Mea
culpa.
- fix hysteresis loop broken by typo in 2.4.14.7 (right next to the
location of previous bug).
- fix the insane limits of said hysteresis loop on filesystems with
very low percentage of reserved blocks. If it's 5% or less, just
use the OPTSPACE policy.
- calculate those limits once and mount time.
This tree does pass xfstests clean (both ufs1 and ufs2) and it _does_
survive cross-builds.
Again, my apologies for missing that, especially since I have noticed
a related percentage-of-64bit issue in earlier patches (when dealing
with amount of reserved blocks). Self-LART applied..."
* 'ufs-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
ufs: fix the logics for tail relocation
ufs_iget(): fail with -ESTALE on deleted inode
fix signedness of timestamps on ufs1
This commit is contained in:
@@ -1210,6 +1210,15 @@ magic_found:
|
||||
|
||||
uspi->s_root_blocks = mul_u64_u32_div(uspi->s_dsize,
|
||||
uspi->s_minfree, 100);
|
||||
if (uspi->s_minfree <= 5) {
|
||||
uspi->s_time_to_space = ~0ULL;
|
||||
uspi->s_space_to_time = 0;
|
||||
usb1->fs_optim = cpu_to_fs32(sb, UFS_OPTSPACE);
|
||||
} else {
|
||||
uspi->s_time_to_space = (uspi->s_root_blocks / 2) + 1;
|
||||
uspi->s_space_to_time = mul_u64_u32_div(uspi->s_dsize,
|
||||
uspi->s_minfree - 2, 100) - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute another frequently used values
|
||||
|
||||
Reference in New Issue
Block a user