24 #define _WIN32_WINNT 0x0601 25 #define NTDDI_VERSION 0x06020000 // Win 8 26 #define _CRT_SECURE_NO_WARNINGS 27 #define _NO_CRT_STDIO_INLINE 32 #pragma warning(disable:4163) 33 #pragma warning(disable:4311) 34 #pragma warning(disable:4312) 36 #pragma GCC diagnostic push 37 #pragma GCC diagnostic ignored "-Wsign-compare" 38 #pragma GCC diagnostic ignored "-Wsign-conversion" 58 #pragma GCC diagnostic pop 79 #define DEBUG_PARANOID 82 #define UNUSED(x) (void)(x) 84 #define BTRFS_NODE_TYPE_CCB 0x2295 85 #define BTRFS_NODE_TYPE_FCB 0x2296 87 #define ALLOC_TAG 0x7442484D //'MHBt' 88 #define ALLOC_TAG_ZLIB 0x7A42484D //'MHBz' 90 #define UID_NOBODY 65534 91 #define GID_NOBODY 65534 93 #define EA_NTACL "security.NTACL" 94 #define EA_NTACL_HASH 0x45922146 96 #define EA_DOSATTRIB "user.DOSATTRIB" 97 #define EA_DOSATTRIB_HASH 0x914f9939 99 #define EA_REPARSE "user.reparse" 100 #define EA_REPARSE_HASH 0xfabad1fe 102 #define EA_EA "user.EA" 103 #define EA_EA_HASH 0x8270dd43 105 #define EA_CASE_SENSITIVE "user.casesensitive" 106 #define EA_CASE_SENSITIVE_HASH 0x1a9d97d4 108 #define EA_PROP_COMPRESSION "btrfs.compression" 109 #define EA_PROP_COMPRESSION_HASH 0x20ccdf69 111 #define MAX_EXTENT_SIZE 0x8000000 // 128 MB 112 #define COMPRESSED_EXTENT_SIZE 0x20000 // 128 KB 114 #define READ_AHEAD_GRANULARITY COMPRESSED_EXTENT_SIZE // really ought to be a multiple of COMPRESSED_EXTENT_SIZE 116 #ifndef IO_REPARSE_TAG_LX_SYMLINK 118 #define IO_REPARSE_TAG_LX_SYMLINK 0xa000001d 120 #define IO_REPARSE_TAG_AF_UNIX 0x80000023 121 #define IO_REPARSE_TAG_LX_FIFO 0x80000024 122 #define IO_REPARSE_TAG_LX_CHR 0x80000025 123 #define IO_REPARSE_TAG_LX_BLK 0x80000026 127 #define BTRFS_VOLUME_PREFIX L"\\Device\\Btrfs{" 129 #if defined(_MSC_VER) || defined(__clang__) 131 #define except __except 132 #define finally __finally 133 #define leave __leave 136 #define except(x) if (0 && (x)) 137 #define finally if (1) 142 #ifndef InterlockedIncrement64 143 #define InterlockedIncrement64(a) __sync_add_and_fetch(a, 1) 145 #endif // __REACTOS__ 147 #ifndef FILE_SUPPORTS_BLOCK_REFCOUNTING 148 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 151 #ifndef FILE_SUPPORTS_POSIX_UNLINK_RENAME 152 #define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400 155 #ifndef FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 156 #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 165 #define FILE_CS_FLAG_CASE_SENSITIVE_DIR 1 172 #define FILE_CS_FLAG_CASE_SENSITIVE_DIR 1 173 #endif // __REACTOS__ 182 #define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_ACCESS) 198 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS) 199 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 203 #define __drv_aliasesMem 204 #define _Dispatch_type_(a) 205 #define _Lock_level_order_(a,b) 207 #endif // __REACTOS__ 213 #define MAX_HASH_SIZE 32 679 #define VCB_TYPE_FS 1 680 #define VCB_TYPE_CONTROL 2 681 #define VCB_TYPE_VOLUME 3 682 #define VCB_TYPE_PDO 4 683 #define VCB_TYPE_BUS 5 685 #define BALANCE_OPTS_DATA 0 686 #define BALANCE_OPTS_METADATA 1 687 #define BALANCE_OPTS_SYSTEM 2 757 #ifdef DEBUG_CHUNK_LOCKS 758 LONG chunk_locks_held;
970 if (!
Irp->MdlAddress) {
971 return Irp->UserBuffer;
978 return (
t->seconds * 10000000) + (
t->nanoseconds / 100) + 116444736000000000;
984 out->seconds =
l / 10000000;
992 startoff = off % (num_stripes * stripe_length);
993 initoff = (off / (num_stripes * stripe_length)) * stripe_length;
996 *stripeoff = initoff + startoff - (*
stripe * stripe_length);
1005 return (
r->id << 40) | (
inode & 0xffffffffff);
1008 #define keycmp(key1, key2)\ 1009 ((key1.obj_id < key2.obj_id) ? -1 :\ 1010 ((key1.obj_id > key2.obj_id) ? 1 :\ 1011 ((key1.obj_type < key2.obj_type) ? -1 :\ 1012 ((key1.obj_type > key2.obj_type) ? 1 :\ 1013 ((key1.offset < key2.offset) ? -1 :\ 1014 ((key1.offset > key2.offset) ? 1 :\ 1020 n = (
n +
a) & ~(
a - 1);
1089 #if defined(_X86_) || defined(_AMD64_) 1108 #ifndef DEBUG_FCB_REFCOUNTS 1127 #ifdef DEBUG_CHUNK_LOCKS 1128 #define acquire_chunk_lock(c, Vcb) { ExAcquireResourceExclusiveLite(&c->lock, true); InterlockedIncrement(&Vcb->chunk_locks_held); } 1129 #define release_chunk_lock(c, Vcb) { InterlockedDecrement(&Vcb->chunk_locks_held); ExReleaseResourceLite(&c->lock); } 1131 #define acquire_chunk_lock(c, Vcb) ExAcquireResourceExclusiveLite(&(c)->lock, true) 1132 #define release_chunk_lock(c, Vcb) ExReleaseResourceLite(&(c)->lock) 1166 #define funcname __FUNCTION__ 1168 #define funcname __func__ 1188 #define __attribute__(x) 1196 #ifdef DEBUG_LONG_MESSAGES 1198 #define MSG(fn, file, line, s, level, ...) (!log_started || level <= debug_log_level) ? _debug_message(fn, file, line, s, ##__VA_ARGS__) : (void)0 1200 #define TRACE(s, ...) MSG(funcname, __FILE__, __LINE__, s, 3, ##__VA_ARGS__) 1201 #define WARN(s, ...) MSG(funcname, __FILE__, __LINE__, s, 2, ##__VA_ARGS__) 1202 #define FIXME(s, ...) MSG(funcname, __FILE__, __LINE__, s, 1, ##__VA_ARGS__) 1203 #define ERR(s, ...) MSG(funcname, __FILE__, __LINE__, s, 1, ##__VA_ARGS__) 1209 #define MSG(fn, s, level, ...) (!log_started || level <= debug_log_level) ? _debug_message(fn, s, ##__VA_ARGS__) : (void)0 1211 #define TRACE(s, ...) MSG(funcname, s, 3, ##__VA_ARGS__) 1212 #define WARN(s, ...) MSG(funcname, s, 2, ##__VA_ARGS__) 1213 #define FIXME(s, ...) MSG(funcname, s, 1, ##__VA_ARGS__) 1214 #define ERR(s, ...) MSG(funcname, s, 1, ##__VA_ARGS__) 1222 #define TRACE(s, ...) do { } while(0) 1223 #define WARN(s, ...) do { } while(0) 1224 #define FIXME(s, ...) DbgPrint("Btrfs FIXME : %s : " s, funcname, ##__VA_ARGS__) 1225 #define ERR(s, ...) DbgPrint("Btrfs ERR : %s : " s, funcname, ##__VA_ARGS__) 1229 #ifdef DEBUG_FCB_REFCOUNTS 1231 #define free_fcb(fcb) _free_fcb(fcb, funcname) 1239 #define SHA256_HASH_SIZE 32 1242 void blake2b(
void *
out,
size_t outlen,
const void*
in,
size_t inlen);
1243 #define BLAKE2_HASH_SIZE 32 1579 void*
out,
unsigned int outlen,
unsigned int off,
calc_job**
pcj);
1630 #define makedev(major, minor) (((minor) & 0xFF) | (((major) & 0xFFF) << 8) | (((uint64_t)((minor) & ~0xFF)) << 12) | (((uint64_t)((major) & ~0xFFF)) << 32)) 1648 #define FSRTL_FCB_HEADER_V2 2 1651 #define FSRTL_ADVANCED_FCB_HEADER_NEW FSRTL_ADVANCED_FCB_HEADER 1662 PVOID ReservedForRemote;
1664 PVOID ReservedContext;
1667 #define FSRTL_FCB_HEADER_V2 2 1668 #endif // __REACTOS__ 1689 while (le != &
Vcb->trees) {
1692 ERR(
"tree %p: root %I64x, level %u, first key (%I64x,%x,%I64x)\n",
1704 if (
fcb->
Vcb->options.compress_force)
1716 #ifdef DEBUG_FCB_REFCOUNTS 1717 #ifdef DEBUG_LONG_MESSAGES 1718 #define increase_fileref_refcount(fileref) {\ 1719 LONG rc = InterlockedIncrement(&fileref->refcount);\ 1720 MSG(funcname, __FILE__, __LINE__, "fileref %p: refcount now %i\n", 1, fileref, rc);\ 1723 #define increase_fileref_refcount(fileref) {\ 1724 LONG rc = InterlockedIncrement(&fileref->refcount);\ 1725 MSG(funcname, "fileref %p: refcount now %i\n", 1, fileref, rc);\ 1729 #define increase_fileref_refcount(fileref) InterlockedIncrement(&fileref->refcount) 1733 #define int3 __debugbreak() 1735 #define int3 asm("int3;") 1738 #define hex_digit(c) ((c) <= 9) ? ((c) + '0') : ((c) - 10 + 'a') 1743 #define __S_IFMT 0170000 1744 #define __S_IFDIR 0040000 1745 #define __S_IFCHR 0020000 1746 #define __S_IFBLK 0060000 1747 #define __S_IFREG 0100000 1748 #define __S_IFIFO 0010000 1749 #define __S_IFLNK 0120000 1750 #define __S_IFSOCK 0140000 1751 #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask)) 1754 #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) 1758 #define S_IRUSR 0000400 1762 #define S_IWUSR 0000200 1766 #define S_IXUSR 0000100 1770 #define S_IFDIR __S_IFDIR 1771 #define S_IFREG __S_IFREG 1775 #define S_IRGRP (S_IRUSR >> 3) 1779 #define S_IWGRP (S_IWUSR >> 3) 1783 #define S_IXGRP (S_IXUSR >> 3) 1787 #define S_IROTH (S_IRGRP >> 3) 1791 #define S_IWOTH (S_IWGRP >> 3) 1795 #define S_IXOTH (S_IXGRP >> 3) 1799 #define S_ISUID 0004000 1803 #define S_ISGID 0002000 1807 #define S_ISVTX 0001000 1811 #define major(rdev) ((((rdev) >> 8) & 0xFFF) | ((uint32_t)((rdev) >> 32) & ~0xFFF)) 1812 #define minor(rdev) (((rdev) & 0xFF) | ((uint32_t)((rdev) >> 12) & ~0xFF)) 1826 ULONG ReadOperationCount,
ULONG WriteOperationCount,
ULONG FlushOperationCount);
1834 #ifndef CC_ENABLE_DISK_IO_ACCOUNTING 1835 #define CC_ENABLE_DISK_IO_ACCOUNTING 0x00000010 1838 #if defined(__REACTOS__) && (NTDDI_VERSION < NTDDI_VISTA) 1919 IN ULONG ProcessInformationLength,
uint64_t get_extent_data_ref_hash2(uint64_t root, uint64_t objid, uint64_t offset)
VOID(__stdcall * tFsRtlUpdateDiskCounters)(ULONG64 BytesRead, ULONG64 BytesWritten)
void add_volume_device(superblock *sb, PUNICODE_STRING devpath, uint64_t length, ULONG disk_num, ULONG part_num)
CACHE_MANAGER_CALLBACKS cache_callbacks
struct _file_ref * parent
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
NTSTATUS do_write_file(fcb *fcb, uint64_t start_data, uint64_t end_data, void *data, PIRP Irp, bool file_write, uint32_t irp_offset, LIST_ENTRY *rollback) __attribute__((nonnull(1
_Must_inspect_result_ _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS _Outptr_ PECP_LIST * EcpList
void free_fileref(_Inout_ file_ref *fr)
_In_ PVOID NotificationStructure
void galois_double(uint8_t *data, uint32_t len)
struct _FILE_ID_128 * PFILE_ID_128
struct _DUPLICATE_EXTENTS_DATA DUPLICATE_EXTENTS_DATA
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
static PIO_STATUS_BLOCK iosb
struct _LDR_DATA_TABLE_ENTRY LDR_DATA_TABLE_ENTRY
bool check_superblock_checksum(superblock *sb)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
NTSTATUS zstd_decompress(uint8_t *inbuf, uint32_t inlen, uint8_t *outbuf, uint32_t outlen)
struct _FSCTL_GET_INTEGRITY_INFORMATION_BUFFER * PFSCTL_GET_INTEGRITY_INFORMATION_BUFFER
uint32_t mount_compress_type
static const char lxuid[]
_Post_satisfies_(return >=n) __inline static uint64_t sector_align(_In_ uint64_t n
NTSTATUS read_send_buffer(device_extension *Vcb, PFILE_OBJECT FileObject, void *data, ULONG datalen, ULONG_PTR *retlen, KPROCESSOR_MODE processor_mode)
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY _In_ uint8_t _In_ uint64_t _In_ bool file_write
NTSTATUS zlib_compress(uint8_t *inbuf, uint32_t inlen, uint8_t *outbuf, uint32_t outlen, unsigned int level, unsigned int *space_left)
void trim_whole_device(device *dev)
struct _file_ref * fileref
NTSTATUS remove_device(device_extension *Vcb, void *data, ULONG length, KPROCESSOR_MODE processor_mode)
LIST_ENTRY dirty_filerefs
NTSTATUS check_file_name_valid(_In_ PUNICODE_STRING us, _In_ bool posix, _In_ bool stream)
NTSTATUS do_read_job(PIRP Irp)
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
_In_ ULONG _In_ ULONG _In_ ULONG Length
PAGED_LOOKASIDE_LIST batch_item_lookaside
void init_fast_io_dispatch(FAST_IO_DISPATCH **fiod)
NTSTATUS update_changed_extent_ref(device_extension *Vcb, chunk *c, uint64_t address, uint64_t size, uint64_t root, uint64_t objid, uint64_t offset, int32_t count, bool no_csum, bool superseded, PIRP Irp)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
NTSTATUS get_reparse_point(PFILE_OBJECT FileObject, void *buffer, DWORD buflen, ULONG_PTR *retlen)
#define FILE_ATTRIBUTE_SPARSE_FILE
#define _Dispatch_type_(a)
NTSTATUS fsctl_request(PDEVICE_OBJECT DeviceObject, PIRP *Pirp, uint32_t type)
NTSTATUS open_fileref_by_inode(_Requires_exclusive_lock_held_(_Curr_->fcb_lock) device_extension *Vcb, root *subvol, uint64_t inode, file_ref **pfr, PIRP Irp)
PAGED_LOOKASIDE_LIST fcb_lookaside
#define IRP_MJ_QUERY_SECURITY
_In_ PFCB _In_ LONGLONG StartingOffset
NTSTATUS(__stdcall * tFsRtlGetNextExtraCreateParameter)(PECP_LIST EcpList, PVOID CurrentEcpContext, LPGUID NextEcpType, PVOID *NextEcpContext, ULONG *NextEcpContextSize)
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
struct _root_cache root_cache
NPAGED_LOOKASIDE_LIST fcb_np_lookaside
void blake2b(void *out, size_t outlen, const void *in, size_t inlen)
PAGED_LOOKASIDE_LIST traverse_ptr_lookaside
static const char lxdev[]
NTSTATUS fileref_get_filename(file_ref *fileref, PUNICODE_STRING fn, USHORT *name_offset, ULONG *preqlen)
struct _FSCTL_SET_INTEGRITY_INFORMATION_BUFFER * PFSCTL_SET_INTEGRITY_INFORMATION_BUFFER
NTSTATUS start_scrub(device_extension *Vcb, KPROCESSOR_MODE processor_mode)
IN BOOLEAN OUT PSTR Buffer
static GLenum _GLUfuncptr fn
enum _FAST_IO_POSSIBLE FAST_IO_POSSIBLE
NTSTATUS add_calc_job_decomp(device_extension *Vcb, uint8_t compression, void *in, unsigned int inlen, void *out, unsigned int outlen, unsigned int off, calc_job **pcj)
void add_user_mapping(WCHAR *sidstring, ULONG sidstringlength, uint32_t uid)
void space_list_merge(LIST_ENTRY *spacelist, LIST_ENTRY *spacelist_size, LIST_ENTRY *deleting)
void raid6_recover2(uint8_t *sectors, uint16_t num_stripes, ULONG sector_size, uint16_t missing1, uint16_t missing2, uint8_t *out)
NTSTATUS find_chunk_usage(_In_ _Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_opt_ PIRP Irp)
NTSTATUS uid_to_sid(uint32_t uid, PSID *sid)
GLdouble GLdouble GLdouble r
NTSTATUS decrease_extent_refcount(device_extension *Vcb, uint64_t address, uint64_t size, uint8_t type, void *data, KEY *firstitem, uint8_t level, uint64_t parent, bool superseded, PIRP Irp)
DRIVER_ADD_DEVICE AddDevice
struct _FILE_ID_128 FILE_ID_128
_In_ WDFDPC _In_ BOOLEAN Wait
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP Irp
void fcb_get_sd(fcb *fcb, struct _fcb *parent, bool look_for_xattr, PIRP Irp)
bool reparse_xattr_changed
GLuint GLuint GLsizei count
NTSTATUS do_write(device_extension *Vcb, PIRP Irp)
#define IRP_MJ_SET_SECURITY
struct _device_extension device_extension
fcb * create_fcb(device_extension *Vcb, POOL_TYPE pool_type)
uint32_t mount_allow_degraded
NTSTATUS registry_mark_volume_mounted(BTRFS_UUID *uuid)
NTSTATUS open_fcb(_Requires_lock_held_(_Curr_->tree_lock) _Requires_exclusive_lock_held_(_Curr_->fcb_lock) device_extension *Vcb, root *subvol, uint64_t inode, uint8_t type, PANSI_STRING utf8, bool always_add_hl, fcb *parent, fcb **pfcb, POOL_TYPE pooltype, PIRP Irp)
#define FSRTL_FLAG2_IS_PAGING_FILE
void reap_filerefs(device_extension *Vcb, file_ref *fr)
PAGED_LOOKASIDE_LIST tree_data_lookaside
LIST_ENTRY InMemoryOrderModuleList
enum prop_compression_type prop_compression
ERESOURCE range_locks_lock
LIST_ENTRY list_entry_hash
NTSTATUS update_chunk_caches(device_extension *Vcb, PIRP Irp, LIST_ENTRY *rollback)
NTSTATUS flush_partial_stripe(device_extension *Vcb, chunk *c, partial_stripe *ps)
#define TYPE_TREE_BLOCK_REF
void init_file_cache(_In_ PFILE_OBJECT FileObject, _In_ CC_FILE_SIZES *ccfs)
void free_fcb(_Inout_ fcb *fcb)
NTSTATUS read_file(fcb *fcb, uint8_t *data, uint64_t start, uint64_t length, ULONG *pbr, PIRP Irp) __attribute__((nonnull(1
NTSTATUS load_csum(_Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, void *csum, uint64_t start, uint64_t length, PIRP Irp)
PKTHREAD lazy_writer_thread
ERESOURCE dirty_filerefs_lock
LIST_ENTRY list_entry_dirty
void free_vol(volume_device_extension *vde)
_Acquires_shared_lock_(Vcb->Resource)) FINISHED FatAcquireSharedVcb(IN PIRP_CONTEXT IrpContext
ANSI_STRING reparse_xattr
NTSTATUS increase_extent_refcount(device_extension *Vcb, uint64_t address, uint64_t size, uint8_t type, void *data, KEY *firstitem, uint8_t level, PIRP Irp)
struct _PEB_LDR_DATA * PPEB_LDR_DATA
_Requires_lock_not_held_(Vcb->fcb_lock) _Acquires_shared_lock_(Vcb -> fcb_lock) static __inline void acquire_fcb_lock_shared(device_extension *Vcb)
struct _volume_device_extension * vde
void add_changed_extent_ref(chunk *c, uint64_t address, uint64_t size, uint64_t root, uint64_t objid, uint64_t offset, uint32_t count, bool no_csum)
NTSTATUS stop_scrub(device_extension *Vcb, KPROCESSOR_MODE processor_mode)
NTSTATUS get_device_pnp_name(_In_ PDEVICE_OBJECT DeviceObject, _Out_ PUNICODE_STRING pnp_name, _Out_ const GUID **guid)
void watch_registry(HANDLE regh)
NTSTATUS find_file_in_dir(PUNICODE_STRING filename, fcb *fcb, root **subvol, uint64_t *inode, dir_child **pdc, bool case_sensitive)
#define _When_(expr, annos)
_Acquires_exclusive_lock_(Vcb->Resource)) FINISHED FatAcquireExclusiveVcb_Real(IN PIRP_CONTEXT IrpContext
NTSTATUS zstd_compress(uint8_t *inbuf, uint32_t inlen, uint8_t *outbuf, uint32_t outlen, uint32_t level, unsigned int *space_left)
PRTL_USER_PROCESS_PARAMETERS ProcessParameters
unsigned short int uint16_t
bool is_extent_unique(device_extension *Vcb, uint64_t address, uint64_t size, PIRP Irp)
PDEVICE_OBJECT PhysicalDeviceObject
void calc_sha256(uint8_t *hash, const void *input, size_t len)
NTSTATUS NTSTATUS bool find_next_item(_Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, const traverse_ptr *tp, traverse_ptr *next_tp, bool ignore, PIRP Irp) __attribute__((nonnull(1
NTSTATUS vol_write(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define _Requires_exclusive_lock_held_(lock)
ERESOURCE paging_resource
NTSTATUS do_write_job(device_extension *Vcb, PIRP Irp)
int const JOCTET unsigned int datalen
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
NTSTATUS utf8_to_utf16(WCHAR *dest, ULONG dest_max, ULONG *dest_len, char *src, ULONG src_len)
bool check_sector_csum(device_extension *Vcb, void *buf, void *csum)
NTSTATUS query_balance(device_extension *Vcb, void *data, ULONG length)
bool manage_volume_privilege
localAdvHdr FileContextSupportPointer
_Post_satisfies_ static stripe __inline void get_raid0_offset(_In_ uint64_t off, _In_ uint64_t stripe_length, _In_ uint16_t num_stripes, _Out_ uint64_t *stripeoff, _Out_ uint16_t *stripe)
LARGE_INTEGER resume_time
NTSTATUS utf16_to_utf8(char *dest, ULONG dest_max, ULONG *dest_len, WCHAR *src, ULONG src_len)
NTSTATUS NTSTATUS void free_tree(tree *t) __attribute__((nonnull(1)))
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
PAGED_LOOKASIDE_LIST name_bit_lookaside
struct _DUPLICATE_EXTENTS_DATA * PDUPLICATE_EXTENTS_DATA
NTSTATUS stop_balance(device_extension *Vcb, KPROCESSOR_MODE processor_mode)
SECTION_OBJECT_POINTERS segment_object
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
NTSTATUS mountmgr_add_drive_letter(PDEVICE_OBJECT mountmgr, PUNICODE_STRING devpath)
void galois_divpower(uint8_t *data, uint8_t div, uint32_t readlen)
VOID(NTAPI * PPS_POST_PROCESS_INIT_ROUTINE)(VOID)
#define _Releases_exclusive_lock_(lock)
struct _write_data_context * context
KTIMER flush_thread_timer
static WCHAR superseded[MAX_STRING_RESOURCE_LEN]
LIST_ENTRY list_entry_all
UNICODE_STRING query_string
NTSTATUS open_fileref_child(_Requires_lock_held_(_Curr_->tree_lock) _Requires_exclusive_lock_held_(_Curr_->fcb_lock) _In_ device_extension *Vcb, _In_ file_ref *sf, _In_ PUNICODE_STRING name, _In_ bool case_sensitive, _In_ bool lastpart, _In_ bool streampart, _In_ POOL_TYPE pooltype, _Out_ file_ref **psf2, _In_opt_ PIRP Irp)
bool is_top_level(_In_ PIRP Irp)
_In_ fcb _In_ chunk _In_ uint64_t start_data
#define FSRTL_FCB_HEADER_V2
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
struct _RTL_USER_PROCESS_PARAMETERS * PRTL_USER_PROCESS_PARAMETERS
PEPROCESS __stdcall PsGetThreadProcess(_In_ PETHREAD Thread)
ULONG get_file_attributes(_In_ _Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_ root *r, _In_ uint64_t inode, _In_ uint8_t type, _In_ bool dotfile, _In_ bool ignore_xa, _In_opt_ PIRP Irp)
uint32_t sid_to_uid(PSID sid)
void add_fcb_to_subvol(_In_ _Requires_exclusive_lock_held_(_Curr_->Vcb->fcb_lock) fcb *fcb)
uint32_t mount_clear_cache
GLenum GLuint GLenum GLsizei const GLchar * buf
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY _In_ uint8_t compression
void do_shutdown(PIRP Irp)
ERESOURCE dirty_subvols_lock
static __inline uint64_t make_file_id(root *r, uint64_t inode)
_In_ PDEVICE_OBJECT DeviceObject
void do_calc_job(device_extension *Vcb, uint8_t *data, uint32_t sectors, void *csum)
NTSTATUS add_dir_child(fcb *fcb, uint64_t inode, bool subvol, PANSI_STRING utf8, PUNICODE_STRING name, uint8_t type, dir_child **pdc)
NTSTATUS pnp_surprise_removal(PDEVICE_OBJECT DeviceObject, PIRP Irp)
void chunk_lock_range(_In_ device_extension *Vcb, _In_ chunk *c, _In_ uint64_t start, _In_ uint64_t length)
struct _device_extension * Vcb
NTSTATUS update_chunk_caches_tree(device_extension *Vcb, PIRP Irp)
enum _PROCESSINFOCLASS PROCESSINFOCLASS
_Ret_maybenull_ root * find_default_subvol(_In_ _Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_opt_ PIRP Irp)
_In_ ULONG _In_opt_ PVOID _In_ PDRIVER_OBJECT _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE _Inout_opt_ __drv_aliasesMem PVOID _Outptr_result_nullonfailure_ _At_ * NotificationEntry(return==0, __drv_allocatesMem(Mem))) PVOID *NotificationEntry
file_ref * create_fileref(device_extension *Vcb)
NTSTATUS write_file(device_extension *Vcb, PIRP Irp, bool wait, bool deferred_write) __attribute__((nonnull(1
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
uint64_t get_extent_flags(device_extension *Vcb, uint64_t address, PIRP Irp)
void space_list_add(chunk *c, uint64_t address, uint64_t length, LIST_ENTRY *rollback)
uint32_t mount_zlib_level
NTSTATUS add_space_entry(LIST_ENTRY *list, LIST_ENTRY *list_size, uint64_t offset, uint64_t size)
NTSTATUS load_dir_children(_Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, fcb *fcb, bool ignore_size, PIRP Irp)
static __inline bool is_subvol_readonly(root *r, PIRP Irp)
ERESOURCE changed_extents_lock
void volume_removal(PUNICODE_STRING devpath)
NTSTATUS NTSTATUS NTSTATUS do_read(PIRP Irp, bool wait, ULONG *bytes_read)
#define BTRFS_INODE_COMPRESS
void chunk_unlock_range(_In_ device_extension *Vcb, _In_ chunk *c, _In_ uint64_t start, _In_ uint64_t length)
void void void NTSTATUS void NTSTATUS skip_to_difference(device_extension *Vcb, traverse_ptr *tp, traverse_ptr *tp2, bool *ended1, bool *ended2) __attribute__((nonnull(1
NTSTATUS dismount_volume(device_extension *Vcb, bool shutdown, PIRP Irp)
NTSTATUS NTSTATUS bool bool find_prev_item(_Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, const traverse_ptr *tp, traverse_ptr *prev_tp, PIRP Irp) __attribute__((nonnull(1
BOOLEAN(__stdcall * tCcCopyReadEx)(PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset, ULONG Length, BOOLEAN Wait, PVOID Buffer, PIO_STATUS_BLOCK IoStatus, PETHREAD IoIssuerThread)
GLenum GLuint GLenum GLsizei length
NTSTATUS NTSTATUS NTSTATUS truncate_file(fcb *fcb, uint64_t end, PIRP Irp, LIST_ENTRY *rollback) __attribute__((nonnull(1
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY _In_ uint8_t _In_ uint64_t decoded_size
uint32_t mount_flush_interval
NTSTATUS(__stdcall * tFsRtlGetEcpListFromIrp)(PIRP Irp, PECP_LIST *EcpList)
#define PsGetCurrentProcess
void flush_subvol_fcbs(root *subvol)
LIST_ENTRY list_entry_balance
struct _RTL_USER_PROCESS_PARAMETERS RTL_USER_PROCESS_PARAMETERS
struct pdo_device_extension pdo_device_extension
void init_device(_In_ device_extension *Vcb, _Inout_ device *dev, _In_ bool get_nums)
LIST_ENTRY ** hash_ptrs_uc
struct _FSCTL_SET_INTEGRITY_INFORMATION_BUFFER FSCTL_SET_INTEGRITY_INFORMATION_BUFFER
void mark_fcb_dirty(_In_ fcb *fcb)
void mark_fileref_dirty(_In_ file_ref *fileref)
WDF_INTERRUPT_PRIORITY priority
_Releases_lock_(c->lock)) bool insert_extent_chunk(_In_ device_extension *Vcb
uint32_t mount_no_root_dir
void calc_tree_checksum(device_extension *Vcb, tree_header *th)
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
LARGE_INTEGER finish_time
NTSTATUS insert_tree_item(_In_ _Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_ root *r, _In_ uint64_t obj_id, _In_ uint8_t obj_type, _In_ uint64_t offset, _In_reads_bytes_opt_(size) _When_(return >=0, __drv_aliasesMem) void *data, _In_ uint16_t size, _Out_opt_ traverse_ptr *ptp, _In_opt_ PIRP Irp) __attribute__((nonnull(1
NTSTATUS NTSTATUS NTSTATUS NTSTATUS extend_file(fcb *fcb, file_ref *fileref, uint64_t end, bool prealloc, PIRP Irp, LIST_ENTRY *rollback) __attribute__((nonnull(1
struct pdo_device_extension * pdode
#define IRP_MJ_DIRECTORY_CONTROL
NTSTATUS alloc_chunk(device_extension *Vcb, uint64_t flags, chunk **pc, bool full_size) __attribute__((nonnull(1
#define FsRtlAreThereCurrentFileLocks(FL)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
bool prop_compression_changed
#define TYPE_EXTENT_DATA_REF
#define _Out_writes_bytes_opt_(size)
void reap_fileref(device_extension *Vcb, file_ref *fr)
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_Success_(return) bool get_file_attributes_from_xattr(_In_reads_bytes_(len) char *val
typedef bool(CARDLIBPROC *pCanDragProc)(CardRegion &stackobj
void find_gid(struct _fcb *fcb, struct _fcb *parfcb, PSECURITY_SUBJECT_CONTEXT subjcont)
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
void calc_thread_main(device_extension *Vcb, calc_job *cj)
uint8_t gmul(uint8_t a, uint8_t b)
_Requires_lock_held_(Vcb->fcb_lock) _Releases_lock_(Vcb -> fcb_lock) static __inline void release_fcb_lock(device_extension *Vcb)
static __inline bool write_fcb_compressed(fcb *fcb)
FSRTL_ADVANCED_FCB_HEADER Header
void void void NTSTATUS void NTSTATUS NTSTATUS remove_drive_letter(PDEVICE_OBJECT mountmgr, PUNICODE_STRING devpath)
ERESOURCE dirty_fcbs_lock
void void void NTSTATUS commit_batch_list(_Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, LIST_ENTRY *batchlist, PIRP Irp) __attribute__((nonnull(1
void update_extent_flags(device_extension *Vcb, uint64_t address, uint64_t flags, PIRP Irp)
struct _LIST_ENTRY * Flink
bool add_thread_job(device_extension *Vcb, PIRP Irp)
LARGE_INTEGER SourceFileOffset
BOOLEAN(__stdcall * tCcCopyWriteEx)(PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset, ULONG Length, BOOLEAN Wait, PVOID Buffer, PETHREAD IoIssuerThread)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
#define TYPE_SHARED_DATA_REF
void reap_fcbs(device_extension *Vcb)
GLboolean GLboolean GLboolean b
LIST_ENTRY dir_children_hash_uc
LIST_ENTRY dir_children_index
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS write_data_phys(_In_ PDEVICE_OBJECT device, _In_ PFILE_OBJECT fileobj, _In_ uint64_t address, _In_reads_bytes_(length) void *data, _In_ uint32_t length)
bool fcb_is_inline(fcb *fcb)
NTSTATUS find_item(_In_ _Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_ root *r, _Out_ traverse_ptr *tp, _In_ const KEY *searchkey, _In_ bool ignore, _In_opt_ PIRP Irp) __attribute__((nonnull(1
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
_STLP_VENDOR_CSTD::ldiv_t div(long __x, long __y)
_Function_class_(DRIVER_ADD_DEVICE) NTSTATUS __stdcall AddDevice(PDRIVER_OBJECT DriverObject
static __inline void print_open_trees(device_extension *Vcb)
INT WSAAPI shutdown(IN SOCKET s, IN INT how)
NTSTATUS do_tree_writes(device_extension *Vcb, LIST_ENTRY *tree_writes, bool no_free)
static __inline uint16_t get_extent_data_len(uint8_t type)
bool user_set_change_time
PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine
struct _file_ref file_ref
static __inline void * map_user_buffer(PIRP Irp, ULONG priority)
NTSTATUS NTSTATUS void clear_rollback(LIST_ENTRY *rollback) __attribute__((nonnull(1)))
_Ret_maybenull_ device * find_device_from_uuid(_In_ device_extension *Vcb, _In_ BTRFS_UUID *uuid)
PFILE_OBJECT locked_fileobj
NTSTATUS vol_create(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
void log_device_error(_In_ device_extension *Vcb, _Inout_ device *dev, _In_ int error)
#define TYPE_EXTENT_REF_V0
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
struct _file_ref * fileref
uint32_t mount_skip_balance
LIST_ENTRY list_entry_index
bool find_metadata_address_in_chunk(device_extension *Vcb, chunk *c, uint64_t *address)
uint64_t find_extent_shared_tree_refcount(device_extension *Vcb, uint64_t address, uint64_t parent, PIRP Irp)
BOOLEAN(__stdcall * tPsIsDiskCountersEnabled)()
NTSTATUS write_compressed(fcb *fcb, uint64_t start_data, uint64_t end_data, void *data, PIRP Irp, LIST_ENTRY *rollback)
NTSTATUS set_reparse_point(PIRP Irp)
uint32_t mount_no_barrier
bool allow_extended_dasd_io
struct _LDR_DATA_TABLE_ENTRY * PLDR_DATA_TABLE_ENTRY
struct _FSCTL_GET_INTEGRITY_INFORMATION_BUFFER FSCTL_GET_INTEGRITY_INFORMATION_BUFFER
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
struct _tree_data tree_data
void * notification_entry
PDEVICE_OBJECT mounted_device
void(__stdcall * xor_func)(uint8_t *buf1, uint8_t *buf2, uint32_t len)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
NTSTATUS delete_reparse_point(PIRP Irp)
BOOLEAN(__stdcall * tFsRtlAreThereCurrentOrInProgressFileLocks)(PFILE_LOCK FileLock)
NTSTATUS create_root(_In_ _Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_ uint64_t id, _Out_ root **rootptr, _In_ bool no_tree, _In_ uint64_t offset, _In_opt_ PIRP Irp)
#define TYPE_SHARED_BLOCK_REF
uint32_t mount_max_inline
uint32_t mount_compress_force
NTSTATUS update_dev_item(device_extension *Vcb, device *device, PIRP Irp)
void add_group_mapping(WCHAR *sidstring, ULONG sidstringlength, uint32_t gid)
NTSTATUS bool void NTSTATUS add_extent_to_fcb(_In_ fcb *fcb, _In_ uint64_t offset, _In_reads_bytes_(edsize) EXTENT_DATA *ed, _In_ uint16_t edsize, _In_ bool unique, _In_opt_ _When_(return >=0, __drv_aliasesMem) void *csum, _In_ LIST_ENTRY *rollback) __attribute__((nonnull(1
NTSTATUS NTSTATUS find_item_to_level(device_extension *Vcb, root *r, traverse_ptr *tp, const KEY *searchkey, bool ignore, uint8_t level, PIRP Irp) __attribute__((nonnull(1
struct _fcb_nonpaged fcb_nonpaged
void disk_arrival(PUNICODE_STRING devpath)
UNICODE_STRING ImagePathName
NTSTATUS decrease_extent_refcount_tree(device_extension *Vcb, uint64_t address, uint64_t size, uint64_t root, uint8_t level, PIRP Irp)
NTSTATUS NTSTATUS do_load_tree(device_extension *Vcb, tree_holder *th, root *r, tree *t, tree_data *td, PIRP Irp) __attribute__((nonnull(1
GLenum const GLvoid * addr
_In_ PECP_LIST _In_opt_ PVOID CurrentEcpContext
bool uniqueness_determined
bool check_tree_checksum(device_extension *Vcb, tree_header *th)
bool has_open_children(file_ref *fileref)
NTSTATUS(__stdcall * tFsRtlValidateReparsePointBuffer)(ULONG BufferLength, PREPARSE_DATA_BUFFER ReparseBuffer)
static const WCHAR space[]
PAGED_LOOKASIDE_LIST fileref_lookaside
NTSTATUS flush_fcb(fcb *fcb, bool cache, LIST_ENTRY *batchlist, PIRP Irp)
LIST_ENTRY changed_extents
LIST_ENTRY list_entry_hash_uc
NTSTATUS lzo_decompress(uint8_t *inbuf, uint32_t inlen, uint8_t *outbuf, uint32_t outlen, uint32_t inpageoff)
void add_checksum_entry(device_extension *Vcb, uint64_t address, ULONG length, void *csum, PIRP Irp)
LIST_ENTRY list_entry_dirty
NTSTATUS get_tree_new_address(device_extension *Vcb, tree *t, PIRP Irp, LIST_ENTRY *rollback)
_In_ PECP_LIST _In_opt_ PVOID _Out_opt_ LPGUID _Outptr_opt_ PVOID _Out_opt_ ULONG * NextEcpContextSize
UNICODE_STRING CommandLine
NTSTATUS increase_extent_refcount_data(device_extension *Vcb, uint64_t address, uint64_t size, uint64_t root, uint64_t inode, uint64_t offset, uint32_t refcount, PIRP Irp)
void do_rollback(device_extension *Vcb, LIST_ENTRY *rollback) __attribute__((nonnull(1
static __inline FAST_IO_POSSIBLE fast_io_possible(fcb *fcb)
DRIVER_DISPATCH(nfs41_FsdDispatch)
NTSTATUS registry_load_volume_options(device_extension *Vcb)
NTSTATUS start_balance(device_extension *Vcb, void *data, ULONG length, KPROCESSOR_MODE processor_mode)
NTSTATUS NTSTATUS NTSTATUS write_data_complete(device_extension *Vcb, uint64_t address, void *data, uint32_t length, PIRP Irp, chunk *c, bool file_write, uint64_t irp_offset, ULONG priority) __attribute__((nonnull(1
LIST_ENTRY partial_stripes
KEVENT flush_thread_finished
NTSTATUS open_fileref(_Requires_lock_held_(_Curr_->tree_lock) _Requires_exclusive_lock_held_(_Curr_->fcb_lock) _In_ device_extension *Vcb, _Out_ file_ref **pfr, _In_ PUNICODE_STRING fnus, _In_opt_ file_ref *related, _In_ bool parent, _Out_opt_ USHORT *parsed, _Out_opt_ ULONG *fn_offset, _In_ POOL_TYPE pooltype, _In_ bool case_sensitive, _In_opt_ PIRP Irp)
PDEVICE_OBJECT attached_device
NTSTATUS delete_fileref(_In_ file_ref *fileref, _In_opt_ PFILE_OBJECT FileObject, _In_ bool make_orphan, _In_opt_ PIRP Irp, _In_ LIST_ENTRY *rollback)
unsigned int sector_shift
NTSTATUS NTSTATUS NTSTATUS void free_write_data_stripes(write_data_context *wtc) __attribute__((nonnull(1)))
uint32_t get_num_of_processors()
NTSTATUS lzo_compress(uint8_t *inbuf, uint32_t inlen, uint8_t *outbuf, uint32_t outlen, unsigned int *space_left)
ERESOURCE dir_children_lock
NTSTATUS check_csum(device_extension *Vcb, uint8_t *data, uint32_t sectors, void *csum)
NTSTATUS NTSTATUS bool bool void free_trees(device_extension *Vcb) __attribute__((nonnull(1)))
bool user_set_creation_time
NTSTATUS allocate_cache(device_extension *Vcb, bool *changed, PIRP Irp, LIST_ENTRY *rollback)
NTSTATUS load_cache_chunk(device_extension *Vcb, chunk *c, PIRP Irp)
struct _write_data_context write_data_context
struct _ECP_LIST * PECP_LIST
IN PFCB IN PFILE_OBJECT FileObject IN ULONG AllocationSize
NTSTATUS send_subvol(device_extension *Vcb, void *data, ULONG datalen, PFILE_OBJECT FileObject, PIRP Irp)
#define _Lock_level_order_(a, b)
void uninit(_In_ device_extension *Vcb)
ULONG get_reparse_tag_fcb(fcb *fcb)
void void void add_rollback(_In_ LIST_ENTRY *rollback, _In_ enum rollback_type type, _In_ __drv_aliasesMem void *ptr) __attribute__((nonnull(1
void get_tree_checksum(device_extension *Vcb, tree_header *th, void *csum)
NTSTATUS NTSTATUS NTSTATUS NTSTATUS NTSTATUS excise_extents(device_extension *Vcb, fcb *fcb, uint64_t start_data, uint64_t end_data, PIRP Irp, LIST_ENTRY *rollback) __attribute__((nonnull(1
PDEVICE_OBJECT attached_device
bool volume_arrival(PUNICODE_STRING devpath, bool fve_callback)
NTSTATUS(__stdcall * tIoUnregisterPlugPlayNotificationEx)(PVOID NotificationEntry)
_Create_lock_level_(tree_lock) _Create_lock_level_(fcb_lock) _Lock_level_order_(tree_lock
NTSTATUS zlib_decompress(uint8_t *inbuf, uint32_t inlen, uint8_t *outbuf, uint32_t outlen)
NTSTATUS load_tree(device_extension *Vcb, uint64_t addr, uint8_t *buf, root *r, tree **pt) __attribute__((nonnull(1
static __inline uint64_t unix_time_to_win(BTRFS_TIME *t)
NTSTATUS vol_device_control(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS load_stored_free_space_cache(device_extension *Vcb, chunk *c, bool load_only, PIRP Irp)
GLenum GLenum GLenum input
LIST_ENTRY list_entry_hash
NTSTATUS query_scrub(device_extension *Vcb, KPROCESSOR_MODE processor_mode, void *data, ULONG length)
void space_list_subtract(chunk *c, uint64_t address, uint64_t length, LIST_ENTRY *rollback)
NTSTATUS NTSTATUS write_file2(device_extension *Vcb, PIRP Irp, LARGE_INTEGER offset, void *buf, ULONG *length, bool paging_io, bool no_cache, bool wait, bool deferred_write, bool write_irp, LIST_ENTRY *rollback) __attribute__((nonnull(1
struct _fcb_nonpaged * nonpaged
struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST PAGED_LOOKASIDE_LIST
void boot_add_device(DEVICE_OBJECT *pdo)
void remove_fcb_from_subvol(_In_ _Requires_exclusive_lock_held_(_Curr_->Vcb->fcb_lock) fcb *fcb)
drv_calc_threads calcthreads
BOOLEAN(__stdcall * tFsRtlCheckLockForOplockRequest)(PFILE_LOCK FileLock, PLARGE_INTEGER AllocationSize)
void space_list_subtract2(LIST_ENTRY *list, LIST_ENTRY *list_size, uint64_t address, uint64_t length, chunk *c, LIST_ENTRY *rollback)
uint32_t inherit_mode(fcb *parfcb, bool is_dir)
static const char lxgid[]
LIST_ENTRY InMemoryOrderLinks
NTSTATUS NTSTATUS delete_tree_item(_In_ _Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _Inout_ traverse_ptr *tp) __attribute__((nonnull(1
uint32_t find_extent_shared_data_refcount(device_extension *Vcb, uint64_t address, uint64_t parent, PIRP Irp)
_In_ PFCB _In_ LONGLONG FileOffset
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void * data
_In_ uint64_t _In_ uint64_t _In_ uint64_t generation
NTSTATUS dev_ioctl(_In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG ControlCode, _In_reads_bytes_opt_(InputBufferSize) PVOID InputBuffer, _In_ ULONG InputBufferSize, _Out_writes_bytes_opt_(OutputBufferSize) PVOID OutputBuffer, _In_ ULONG OutputBufferSize, _In_ bool Override, _Out_opt_ IO_STATUS_BLOCK *iosb)