1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright (C) 2020 Hyunchul Lee <hyc.lee@gmail.com>
13 struct exfat_inode *parent;
14 struct list_head children;
15 struct list_head sibling;
16 struct list_head list;
23 __le16 name[0]; /* only for directory */
26 #define EXFAT_NAME_MAX 255
27 #define NAME_BUFFER_SIZE ((EXFAT_NAME_MAX+1)*2)
36 struct exfat_de_iter {
38 struct exfat_inode *parent;
39 struct buffer_desc *buffer_desc; /* cluster * 2 */
41 unsigned int ra_begin_offset;
42 unsigned int ra_partial_size;
43 unsigned int read_size; /* cluster size */
44 unsigned int write_size; /* sector size */
46 off_t next_read_offset;
47 int max_skip_dentries;
50 enum fsck_ui_options {
51 FSCK_OPTS_REPAIR_ASK = 0x01,
52 FSCK_OPTS_REPAIR_YES = 0x02,
53 FSCK_OPTS_REPAIR_NO = 0x04,
54 FSCK_OPTS_REPAIR_AUTO = 0x08,
55 FSCK_OPTS_REPAIR_WRITE = 0x0b,
56 FSCK_OPTS_REPAIR_ALL = 0x0f,
60 enum fsck_ui_options options;
63 struct exfat_blk_dev *blk_dev;
65 char volume_label[VOLUME_LABEL_BUFFER_SIZE];
66 struct exfat_inode *root;
67 struct list_head dir_list;
69 unsigned int clus_size;
70 unsigned int sect_size;
71 struct exfat_de_iter de_iter;
72 struct buffer_desc buffer_desc[2]; /* cluster * 2 */
75 clus_t disk_bitmap_clus;
76 unsigned int disk_bitmap_size;
79 #define EXFAT_CLUSTER_SIZE(pbr) (1 << ((pbr)->bsx.sect_size_bits + \
80 (pbr)->bsx.sect_per_clus_bits))
81 #define EXFAT_SECTOR_SIZE(pbr) (1 << (pbr)->bsx.sect_size_bits)
84 off_t exfat_c2o(struct exfat *exfat, unsigned int clus);
85 int get_next_clus(struct exfat *exfat, struct exfat_inode *node,
86 clus_t clus, clus_t *next);
89 int exfat_de_iter_init(struct exfat_de_iter *iter, struct exfat *exfat,
90 struct exfat_inode *dir);
91 int exfat_de_iter_get(struct exfat_de_iter *iter,
92 int ith, struct exfat_dentry **dentry);
93 int exfat_de_iter_get_dirty(struct exfat_de_iter *iter,
94 int ith, struct exfat_dentry **dentry);
95 int exfat_de_iter_flush(struct exfat_de_iter *iter);
96 int exfat_de_iter_advance(struct exfat_de_iter *iter, int skip_dentries);
97 off_t exfat_de_iter_file_offset(struct exfat_de_iter *iter);