diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-05-27 22:22:51 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-01 17:28:35 -0400 |
commit | 15333ae6b82362a4d3f95151ceeea965f0e65479 (patch) | |
tree | 504b8f6bf2eeec5647628928f74368d917450f7f | |
parent | 1f42dfc424a8b776f10702becfc432c24f0fc7f5 (diff) |
bcachefs: fix error path in fallocate
-rw-r--r-- | fs/bcachefs/fs-io.c | 11 |
1 files 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; |