diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-07-24 13:06:26 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2019-09-07 15:27:29 -0400 |
commit | 8188488b777a2447c2eade275449d892c0099223 (patch) | |
tree | 7e7dff923fb28da7428224e9b74656bb3859d603 /fs/bcachefs/fs-io.c | |
parent | 25fe28f076e8b3d5ae121023a607abff7aea9cb5 (diff) |
bcachefs: bch2_fcollapse() debugfcollapse
Diffstat (limited to 'fs/bcachefs/fs-io.c')
-rw-r--r-- | fs/bcachefs/fs-io.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index 4cd10369e72e..3f986320f9ca 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -2608,6 +2608,28 @@ err: return ret; } +static void dump_extents(struct bch_fs *c, u64 ino, u64 offset) +{ + struct btree_trans trans; + struct btree_iter *iter; + struct bkey_s_c k; + char buf[200]; + int ret; + + bch2_trans_init(&trans, c, 0, 0); + + for_each_btree_key(&trans, iter, BTREE_ID_EXTENTS, + POS(ino, offset), 0, k, ret) { + if (k.k->p.inode != ino) + break; + + bch2_bkey_val_to_text(&PBUF(buf), c, k); + pr_info("%s", buf); + } + + bch2_trans_exit(&trans); +} + static long bch2_fcollapse(struct bch_inode_info *inode, loff_t offset, loff_t len) { @@ -2646,11 +2668,20 @@ static long bch2_fcollapse(struct bch_inode_info *inode, if (ret) goto err; + pr_info("collapse at dst %llu src %llu", + offset >> 9, + (offset + len) >> 9); + pr_info("extents before collapse:"); + dump_extents(c, inode->v.i_ino, offset >> 9); + ret = __bch2_fpunch(c, inode, offset >> 9, (offset + len) >> 9); if (ret) goto err; + pr_info("extents after fpunch:"); + dump_extents(c, inode->v.i_ino, offset >> 9); + dst = bch2_trans_get_iter(&trans, BTREE_ID_EXTENTS, POS(inode->v.i_ino, offset >> 9), BTREE_ITER_INTENT); @@ -2668,6 +2699,8 @@ static long bch2_fcollapse(struct bch_inode_info *inode, struct bkey_s_c k; struct bpos next_pos; + char buf[200]; + k = bch2_btree_iter_peek(src); if ((ret = bkey_err(k))) goto bkey_err; @@ -2675,6 +2708,9 @@ static long bch2_fcollapse(struct bch_inode_info *inode, if (!k.k || k.k->p.inode != inode->v.i_ino) break; + bch2_bkey_val_to_text(&PBUF(buf), c, k); + pr_info("copying extent %s", buf); + BUG_ON(src->pos.offset != bkey_start_offset(k.k)); bch2_btree_iter_set_pos(dst, @@ -2722,6 +2758,12 @@ static long bch2_fcollapse(struct bch_inode_info *inode, bch2_trans_update(&trans, BTREE_INSERT_ENTRY(dst, ©.k)); + bch2_bkey_val_to_text(&PBUF(buf), c, bkey_i_to_s_c(©.k)); + pr_info("dst %s", buf); + + bch2_bkey_val_to_text(&PBUF(buf), c, bkey_i_to_s_c(&delete)); + pr_info("src %s", buf); + /* We might end up splitting compressed extents: */ ret = bch2_disk_reservation_get(c, &disk_res, copy.k.k.size, bch2_bkey_nr_dirty_ptrs(bkey_i_to_s_c(©.k)), @@ -2751,6 +2793,9 @@ bkey_err: } bch2_trans_unlock(&trans); + pr_info("extents after collapse:"); + dump_extents(c, inode->v.i_ino, offset >> 9); + i_size_write(&inode->v, new_size); mutex_lock(&inode->ei_update_lock); ret = bch2_write_inode_size(c, inode, new_size, |