From 15333ae6b82362a4d3f95151ceeea965f0e65479 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sun, 27 May 2018 22:22:51 -0400 Subject: bcachefs: fix error path in fallocate --- fs/bcachefs/fs-io.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index 15d356f16908..d7b17195ee84 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -2495,7 +2495,7 @@ static long bch2_fallocate(struct bch_inode_info *inode, int mode, &i_sectors_hook.quota_res, sectors, true); if (unlikely(ret)) - goto err_put_sectors_dirty; + goto btree_iter_err; } if (reservation.v.nr_replicas < replicas || @@ -2503,7 +2503,7 @@ static long bch2_fallocate(struct bch_inode_info *inode, int mode, ret = bch2_disk_reservation_get(c, &disk_res, sectors, replicas, 0); if (unlikely(ret)) - goto err_put_sectors_dirty; + goto btree_iter_err; reservation.v.nr_replicas = disk_res.nr_replicas; } @@ -2515,8 +2515,12 @@ static long bch2_fallocate(struct bch_inode_info *inode, int mode, BTREE_INSERT_ENTRY(&iter, &reservation.k_i)); bch2_disk_reservation_put(c, &disk_res); btree_iter_err: - if (ret < 0 && ret != -EINTR) + if (ret == -EINTR) + ret = 0; + if (ret) { + bch2_btree_iter_unlock(&iter); goto err_put_sectors_dirty; + } } bch2_btree_iter_unlock(&iter); @@ -2556,7 +2560,6 @@ btree_iter_err: err_put_sectors_dirty: ret = i_sectors_dirty_finish(c, &i_sectors_hook) ?: ret; err: - bch2_btree_iter_unlock(&iter); pagecache_block_put(&mapping->add_lock); inode_unlock(&inode->v); return ret; -- cgit v1.2.3