On Mon, Feb 22, 2021 at 06:40:47PM +0200, Nikolay Borisov wrote: > btrfs_block_rsv_add can return only ENOSPC since it's called with > NO_FLUSH modifier. This so simplify the logic in > btrfs_delayed_inode_reserve_metadata to exploit this invariant.
This seems quite fragile, it's not straightforward to see from the context that the NO_FLUSH code will always return ENOSPC. I followed a few calls down from btrfs_block_rsv_add and it's well hidden inside __reserve_bytes. So in case it's an invariant I'd rather add an assertion, ie. ASSERT(ret == 0 || ret == -ENOSPC) so at least we know when this gets broken. Otherwise looks ok.