]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/dirent.c
Update bcachefs sources to 5d0a6c2b32f1 bcachefs: check_directory_structure() can...
[bcachefs-tools-debian] / libbcachefs / dirent.c
index 51fe04f45690af5011a87a7777e03140ca762d09..4ae1e9f002a09b9c7ea3bed1709334f35373b061 100644 (file)
@@ -198,6 +198,34 @@ static struct bkey_i_dirent *dirent_create_key(struct btree_trans *trans,
        return dirent;
 }
 
+int bch2_dirent_create_snapshot(struct btree_trans *trans,
+                       u64 dir, u32 snapshot,
+                       const struct bch_hash_info *hash_info,
+                       u8 type, const struct qstr *name, u64 dst_inum,
+                       u64 *dir_offset,
+                       bch_str_hash_flags_t str_hash_flags)
+{
+       subvol_inum zero_inum = { 0 };
+       struct bkey_i_dirent *dirent;
+       int ret;
+
+       dirent = dirent_create_key(trans, zero_inum, type, name, dst_inum);
+       ret = PTR_ERR_OR_ZERO(dirent);
+       if (ret)
+               return ret;
+
+       dirent->k.p.inode       = dir;
+       dirent->k.p.snapshot    = snapshot;
+
+       ret = bch2_hash_set_snapshot(trans, bch2_dirent_hash_desc, hash_info,
+                                    zero_inum, snapshot,
+                                    &dirent->k_i, str_hash_flags,
+                                    BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE);
+       *dir_offset = dirent->k.p.offset;
+
+       return ret;
+}
+
 int bch2_dirent_create(struct btree_trans *trans, subvol_inum dir,
                       const struct bch_hash_info *hash_info,
                       u8 type, const struct qstr *name, u64 dst_inum,