On Thu, 2022-03-03 at 11:55 +0000, David Howells wrote: > When cachefiles_shorten_object() calls fallocate() to shape the cache file > to match the DIO size, it passes the total file size it wants to achieve, > not the amount of zeros that should be inserted. Since this is meant to > preallocate that amount of storage for the file, it can cause the cache to > fill up the disk and hit ENOSPC. > > Fix this by passing the length actually required to go from the current EOF > to the desired EOF. > > Fixes: 7623ed6772de ("cachefiles: Implement cookie resize for truncate") > Reported-by: Jeffle Xu <jefflexu@xxxxxxxxxxxxxxxxx> > Signed-off-by: David Howells <dhowells@xxxxxxxxxx> > cc: linux-cachefs@xxxxxxxxxx > --- > > fs/cachefiles/interface.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c > index 51c968cd00a6..ae93cee9d25d 100644 > --- a/fs/cachefiles/interface.c > +++ b/fs/cachefiles/interface.c > @@ -254,7 +254,7 @@ static bool cachefiles_shorten_object(struct cachefiles_object *object, > ret = cachefiles_inject_write_error(); > if (ret == 0) > ret = vfs_fallocate(file, FALLOC_FL_ZERO_RANGE, > - new_size, dio_size); > + new_size, dio_size - new_size); > if (ret < 0) { > trace_cachefiles_io_error(object, file_inode(file), ret, > cachefiles_trace_fallocate_error); > > Looks good! I could often force the cache to fill up with the right fsstress run on ceph, but with this in place I'm on the 5th run of xfstest generic/013 and it hasn't happened yet. You can add these if you like: Tested-by: Jeff Layton <jlayton@xxxxxxxxxx> Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx> -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/linux-cachefs