bcachefs: statfs resports incorrect avail blocks
The current implementation of bch_statfs does not scale the number of available blocks provided in f_bavail by the reserve factor. This causes an allocation of a file of this size to fail. Signed-off-by: Dan Robertson <dan@dlrobertson.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
c21d537779
commit
ed34341189
@ -261,18 +261,11 @@ void bch2_fs_usage_to_text(struct printbuf *out,
|
||||
}
|
||||
}
|
||||
|
||||
#define RESERVE_FACTOR 6
|
||||
|
||||
static u64 reserve_factor(u64 r)
|
||||
{
|
||||
return r + (round_up(r, (1 << RESERVE_FACTOR)) >> RESERVE_FACTOR);
|
||||
}
|
||||
|
||||
static u64 avail_factor(u64 r)
|
||||
{
|
||||
return div_u64(r << RESERVE_FACTOR, (1 << RESERVE_FACTOR) + 1);
|
||||
}
|
||||
|
||||
u64 bch2_fs_sectors_used(struct bch_fs *c, struct bch_fs_usage_online *fs_usage)
|
||||
{
|
||||
return min(fs_usage->u.hidden +
|
||||
|
@ -294,6 +294,13 @@ static inline int bch2_disk_reservation_get(struct bch_fs *c,
|
||||
return bch2_disk_reservation_add(c, res, sectors * nr_replicas, flags);
|
||||
}
|
||||
|
||||
#define RESERVE_FACTOR 6
|
||||
|
||||
static inline u64 avail_factor(u64 r)
|
||||
{
|
||||
return div_u64(r << RESERVE_FACTOR, (1 << RESERVE_FACTOR) + 1);
|
||||
}
|
||||
|
||||
int bch2_dev_buckets_resize(struct bch_fs *, struct bch_dev *, u64);
|
||||
void bch2_dev_buckets_free(struct bch_dev *);
|
||||
int bch2_dev_buckets_alloc(struct bch_fs *, struct bch_dev *);
|
||||
|
@ -1274,8 +1274,8 @@ static int bch2_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||
buf->f_type = BCACHEFS_STATFS_MAGIC;
|
||||
buf->f_bsize = sb->s_blocksize;
|
||||
buf->f_blocks = usage.capacity >> shift;
|
||||
buf->f_bfree = (usage.capacity - usage.used) >> shift;
|
||||
buf->f_bavail = buf->f_bfree;
|
||||
buf->f_bfree = usage.free >> shift;
|
||||
buf->f_bavail = avail_factor(usage.free) >> shift;
|
||||
|
||||
buf->f_files = usage.nr_inodes + avail_inodes;
|
||||
buf->f_ffree = avail_inodes;
|
||||
|
Loading…
Reference in New Issue
Block a user