mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-23 00:00:02 +03:00
Update bcachefs sources to de906c3e2e bcachefs: Fix iterator counting for reflink pointers (again)
This commit is contained in:
parent
cec69929f0
commit
6e696ea087
@ -1 +1 @@
|
|||||||
d0625a441839f54b9600783c3a6b90db6f197cad
|
de906c3e2eddad291d46bd0e7c81c68eaadcd08a
|
||||||
|
@ -1359,6 +1359,13 @@ static inline struct bkey_s_c btree_iter_peek_uptodate(struct btree_iter *iter)
|
|||||||
|
|
||||||
if (debug_check_iterators(iter->trans->c)) {
|
if (debug_check_iterators(iter->trans->c)) {
|
||||||
struct bkey k = bkey_unpack_key(l->b, _k);
|
struct bkey k = bkey_unpack_key(l->b, _k);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* this flag is internal to the btree code,
|
||||||
|
* we don't care if it doesn't match - if it's now set
|
||||||
|
* it just means the key has been written out to disk:
|
||||||
|
*/
|
||||||
|
k.needs_whiteout = iter->k.needs_whiteout;
|
||||||
BUG_ON(memcmp(&k, &iter->k, sizeof(k)));
|
BUG_ON(memcmp(&k, &iter->k, sizeof(k)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -898,6 +898,9 @@ retry:
|
|||||||
bkey_cmp(iter->pos, end) < 0) {
|
bkey_cmp(iter->pos, end) < 0) {
|
||||||
struct bkey_i delete;
|
struct bkey_i delete;
|
||||||
|
|
||||||
|
bch2_trans_unlink_iters(trans);
|
||||||
|
trans->iters_touched &= trans->iters_live;
|
||||||
|
|
||||||
bkey_init(&delete.k);
|
bkey_init(&delete.k);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -960,7 +960,8 @@ static int count_iters_for_insert(struct btree_trans *trans,
|
|||||||
case KEY_TYPE_reflink_p: {
|
case KEY_TYPE_reflink_p: {
|
||||||
struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k);
|
struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k);
|
||||||
u64 idx = le64_to_cpu(p.v->idx);
|
u64 idx = le64_to_cpu(p.v->idx);
|
||||||
unsigned sectors = end->offset - bkey_start_offset(p.k);
|
unsigned sectors = bpos_min(*end, p.k->p).offset -
|
||||||
|
bkey_start_offset(p.k);
|
||||||
struct btree_iter *iter;
|
struct btree_iter *iter;
|
||||||
struct bkey_s_c r_k;
|
struct bkey_s_c r_k;
|
||||||
|
|
||||||
|
@ -306,11 +306,11 @@ static struct dentry *bch2_lookup(struct inode *vdir, struct dentry *dentry,
|
|||||||
return d_splice_alias(vinode, dentry);
|
return d_splice_alias(vinode, dentry);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bch2_create(struct inode *vdir, struct dentry *dentry,
|
static int bch2_mknod(struct inode *vdir, struct dentry *dentry,
|
||||||
umode_t mode, bool excl)
|
umode_t mode, dev_t rdev)
|
||||||
{
|
{
|
||||||
struct bch_inode_info *inode =
|
struct bch_inode_info *inode =
|
||||||
__bch2_create(to_bch_ei(vdir), dentry, mode|S_IFREG, 0, false);
|
__bch2_create(to_bch_ei(vdir), dentry, mode, rdev, false);
|
||||||
|
|
||||||
if (IS_ERR(inode))
|
if (IS_ERR(inode))
|
||||||
return PTR_ERR(inode);
|
return PTR_ERR(inode);
|
||||||
@ -319,6 +319,12 @@ static int bch2_create(struct inode *vdir, struct dentry *dentry,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int bch2_create(struct inode *vdir, struct dentry *dentry,
|
||||||
|
umode_t mode, bool excl)
|
||||||
|
{
|
||||||
|
return bch2_mknod(vdir, dentry, mode|S_IFREG, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static int __bch2_link(struct bch_fs *c,
|
static int __bch2_link(struct bch_fs *c,
|
||||||
struct bch_inode_info *inode,
|
struct bch_inode_info *inode,
|
||||||
struct bch_inode_info *dir,
|
struct bch_inode_info *dir,
|
||||||
@ -448,32 +454,7 @@ err:
|
|||||||
|
|
||||||
static int bch2_mkdir(struct inode *vdir, struct dentry *dentry, umode_t mode)
|
static int bch2_mkdir(struct inode *vdir, struct dentry *dentry, umode_t mode)
|
||||||
{
|
{
|
||||||
struct bch_inode_info *inode =
|
return bch2_mknod(vdir, dentry, mode|S_IFDIR, 0);
|
||||||
__bch2_create(to_bch_ei(vdir), dentry, mode|S_IFDIR, 0, false);
|
|
||||||
|
|
||||||
if (IS_ERR(inode))
|
|
||||||
return PTR_ERR(inode);
|
|
||||||
|
|
||||||
d_instantiate(dentry, &inode->v);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bch2_rmdir(struct inode *vdir, struct dentry *dentry)
|
|
||||||
{
|
|
||||||
return bch2_unlink(vdir, dentry);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bch2_mknod(struct inode *vdir, struct dentry *dentry,
|
|
||||||
umode_t mode, dev_t rdev)
|
|
||||||
{
|
|
||||||
struct bch_inode_info *inode =
|
|
||||||
__bch2_create(to_bch_ei(vdir), dentry, mode, rdev, false);
|
|
||||||
|
|
||||||
if (IS_ERR(inode))
|
|
||||||
return PTR_ERR(inode);
|
|
||||||
|
|
||||||
d_instantiate(dentry, &inode->v);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bch2_rename2(struct inode *src_vdir, struct dentry *src_dentry,
|
static int bch2_rename2(struct inode *src_vdir, struct dentry *src_dentry,
|
||||||
@ -958,7 +939,7 @@ static const struct inode_operations bch_dir_inode_operations = {
|
|||||||
.unlink = bch2_unlink,
|
.unlink = bch2_unlink,
|
||||||
.symlink = bch2_symlink,
|
.symlink = bch2_symlink,
|
||||||
.mkdir = bch2_mkdir,
|
.mkdir = bch2_mkdir,
|
||||||
.rmdir = bch2_rmdir,
|
.rmdir = bch2_unlink,
|
||||||
.mknod = bch2_mknod,
|
.mknod = bch2_mknod,
|
||||||
.rename = bch2_rename2,
|
.rename = bch2_rename2,
|
||||||
.getattr = bch2_getattr,
|
.getattr = bch2_getattr,
|
||||||
@ -974,7 +955,7 @@ static const struct inode_operations bch_dir_inode_operations = {
|
|||||||
static const struct file_operations bch_dir_file_operations = {
|
static const struct file_operations bch_dir_file_operations = {
|
||||||
.llseek = bch2_dir_llseek,
|
.llseek = bch2_dir_llseek,
|
||||||
.read = generic_read_dir,
|
.read = generic_read_dir,
|
||||||
.iterate = bch2_vfs_readdir,
|
.iterate_shared = bch2_vfs_readdir,
|
||||||
.fsync = bch2_fsync,
|
.fsync = bch2_fsync,
|
||||||
.unlocked_ioctl = bch2_fs_file_ioctl,
|
.unlocked_ioctl = bch2_fs_file_ioctl,
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
Loading…
Reference in New Issue
Block a user