Btrfs: limit the global reserve to 512mb
authorJosef Bacik <jbacik@fusionio.com>
Tue, 26 Mar 2013 19:31:45 +0000 (15:31 -0400)
committerJosef Bacik <jbacik@fusionio.com>
Thu, 28 Mar 2013 13:51:29 +0000 (09:51 -0400)
A user reported a problem where he was getting early ENOSPC with hundreds of
gigs of free data space and 6 gigs of free metadata space.  This is because the
global block reserve was taking up the entire free metadata space.  This is
ridiculous, we have infrastructure in place to throttle if we start using too
much of the global reserve, so instead of letting it get this huge just limit it
to 512mb so that users can still get work done.  This allowed the user to
complete his rsync without issues.  Thanks

Cc: stable@vger.kernel.org
Reported-and-tested-by: Stefan Priebe <s.priebe@profihost.ag>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
fs/btrfs/extent-tree.c

index a22b5cc921ad2efd10c5c8d0c8ad5bb3c45afd47..0d8478700d7867bf72c4a903249fc04fd2fbb5a7 100644 (file)
@@ -4460,7 +4460,7 @@ static void update_global_block_rsv(struct btrfs_fs_info *fs_info)
        spin_lock(&sinfo->lock);
        spin_lock(&block_rsv->lock);
 
-       block_rsv->size = num_bytes;
+       block_rsv->size = min_t(u64, num_bytes, 512 * 1024 * 1024);
 
        num_bytes = sinfo->bytes_used + sinfo->bytes_pinned +
                    sinfo->bytes_reserved + sinfo->bytes_readonly +