at for-next 1.1 kB view raw
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 */