1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_DIRENT_FORMAT_H
3#define _BCACHEFS_DIRENT_FORMAT_H
4
5/*
6 * Dirents (and xattrs) have to implement string lookups; since our b-tree
7 * doesn't support arbitrary length strings for the key, we instead index by a
8 * 64 bit hash (currently truncated sha1) of the string, stored in the offset
9 * field of the key - using linear probing to resolve hash collisions. This also
10 * provides us with the readdir cookie posix requires.
11 *
12 * Linear probing requires us to use whiteouts for deletions, in the event of a
13 * collision:
14 */
15
16struct bch_dirent {
17 struct bch_val v;
18
19 /* Target inode number: */
20 union {
21 __le64 d_inum;
22 struct { /* DT_SUBVOL */
23 __le32 d_child_subvol;
24 __le32 d_parent_subvol;
25 };
26 };
27
28 /*
29 * Copy of mode bits 12-15 from the target inode - so userspace can get
30 * the filetype without having to do a stat()
31 */
32 __u8 d_type;
33
34 __u8 d_name[];
35} __packed __aligned(8);
36
37#define DT_SUBVOL 16
38#define BCH_DT_MAX 17
39
40#define BCH_NAME_MAX 512
41
42#endif /* _BCACHEFS_DIRENT_FORMAT_H */
43

source code of linux/fs/bcachefs/dirent_format.h