]> git.sesse.net Git - bcachefs-tools-debian/blob - include/linux/blkdev.h
Update bcachefs sources to 787de128a5 bcachefs: Improvements to fsck check_dirents()
[bcachefs-tools-debian] / include / linux / blkdev.h
1 #ifndef __TOOLS_LINUX_BLKDEV_H
2 #define __TOOLS_LINUX_BLKDEV_H
3
4 #include <linux/backing-dev.h>
5 #include <linux/blk_types.h>
6 #include <linux/kobject.h>
7 #include <linux/types.h>
8
9 #define BIO_MAX_VECS    256
10
11 typedef unsigned fmode_t;
12
13 struct bio;
14 struct user_namespace;
15
16 #define MINORBITS       20
17 #define MINORMASK       ((1U << MINORBITS) - 1)
18
19 #define MAJOR(dev)      ((unsigned int) ((dev) >> MINORBITS))
20 #define MINOR(dev)      ((unsigned int) ((dev) & MINORMASK))
21 #define MKDEV(ma,mi)    (((ma) << MINORBITS) | (mi))
22
23 /* file is open for reading */
24 #define FMODE_READ              ((__force fmode_t)0x1)
25 /* file is open for writing */
26 #define FMODE_WRITE             ((__force fmode_t)0x2)
27 /* file is seekable */
28 #define FMODE_LSEEK             ((__force fmode_t)0x4)
29 /* file can be accessed using pread */
30 #define FMODE_PREAD             ((__force fmode_t)0x8)
31 /* file can be accessed using pwrite */
32 #define FMODE_PWRITE            ((__force fmode_t)0x10)
33 /* File is opened for execution with sys_execve / sys_uselib */
34 #define FMODE_EXEC              ((__force fmode_t)0x20)
35 /* File is opened with O_NDELAY (only set for block devices) */
36 #define FMODE_NDELAY            ((__force fmode_t)0x40)
37 /* File is opened with O_EXCL (only set for block devices) */
38 #define FMODE_EXCL              ((__force fmode_t)0x80)
39 /* File is opened using open(.., 3, ..) and is writeable only for ioctls
40    (specialy hack for floppy.c) */
41 #define FMODE_WRITE_IOCTL       ((__force fmode_t)0x100)
42 /* 32bit hashes as llseek() offset (for directories) */
43 #define FMODE_32BITHASH         ((__force fmode_t)0x200)
44 /* 64bit hashes as llseek() offset (for directories) */
45 #define FMODE_64BITHASH         ((__force fmode_t)0x400)
46
47 struct inode {
48         unsigned long           i_ino;
49         loff_t                  i_size;
50         struct super_block      *i_sb;
51 };
52
53 struct file {
54         struct inode            *f_inode;
55 };
56
57 static inline struct inode *file_inode(const struct file *f)
58 {
59         return f->f_inode;
60 }
61
62 #define part_to_dev(part)       (part)
63
64 void generic_make_request(struct bio *);
65 int submit_bio_wait(struct bio *);
66
67 static inline void submit_bio(struct bio *bio)
68 {
69         generic_make_request(bio);
70 }
71
72 int blkdev_issue_discard(struct block_device *, sector_t,
73                          sector_t, gfp_t, unsigned long);
74
75 #define bdev_get_queue(bdev)            (&((bdev)->queue))
76
77 #define blk_queue_discard(q)            ((void) (q), 0)
78 #define blk_queue_nonrot(q)             ((void) (q), 0)
79
80 unsigned bdev_logical_block_size(struct block_device *bdev);
81 sector_t get_capacity(struct gendisk *disk);
82
83 void blkdev_put(struct block_device *bdev, fmode_t mode);
84 void bdput(struct block_device *bdev);
85 struct block_device *blkdev_get_by_path(const char *path, fmode_t mode, void *holder);
86 int lookup_bdev(const char *path, dev_t *);
87
88 struct super_block {
89         void                    *s_fs_info;
90 };
91
92 /*
93  * File types
94  *
95  * NOTE! These match bits 12..15 of stat.st_mode
96  * (ie "(i_mode >> 12) & 15").
97  */
98 #ifndef DT_UNKNOWN
99 #define DT_UNKNOWN      0
100 #define DT_FIFO         1
101 #define DT_CHR          2
102 #define DT_DIR          4
103 #define DT_BLK          6
104 #define DT_REG          8
105 #define DT_LNK          10
106 #define DT_SOCK         12
107 #define DT_WHT          14
108 #define DT_MAX          16
109 #endif
110
111 /*
112  * This is the "filldir" function type, used by readdir() to let
113  * the kernel specify what kind of dirent layout it wants to have.
114  * This allows the kernel to read directories into kernel space or
115  * to have different dirent layouts depending on the binary type.
116  */
117 struct dir_context;
118 typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64,
119                          unsigned);
120
121 struct dir_context {
122         const filldir_t actor;
123         u64 pos;
124 };
125
126 /* /sys/fs */
127 extern struct kobject *fs_kobj;
128
129 struct file_operations {
130 };
131
132 static inline int register_chrdev(unsigned int major, const char *name,
133                                   const struct file_operations *fops)
134 {
135         return 1;
136 }
137
138 static inline void unregister_chrdev(unsigned int major, const char *name)
139 {
140 }
141
142 static inline const char *bdevname(struct block_device *bdev, char *buf)
143 {
144         snprintf(buf, BDEVNAME_SIZE, "%s", bdev->name);
145         return buf;
146 }
147
148 static inline bool op_is_write(unsigned int op)
149 {
150         return op == REQ_OP_READ ? false : true;
151 }
152
153 /*
154  * return data direction, READ or WRITE
155  */
156 static inline int bio_data_dir(struct bio *bio)
157 {
158         return op_is_write(bio_op(bio)) ? WRITE : READ;
159 }
160
161 static inline bool dir_emit(struct dir_context *ctx,
162                             const char *name, int namelen,
163                             u64 ino, unsigned type)
164 {
165         return ctx->actor(ctx, name, namelen, ctx->pos, ino, type) == 0;
166 }
167
168 static inline bool dir_emit_dots(struct file *file, struct dir_context *ctx)
169 {
170         return true;
171 }
172
173 #define capable(cap)            true
174
175 int blk_status_to_errno(blk_status_t status);
176 blk_status_t errno_to_blk_status(int errno);
177 const char *blk_status_to_str(blk_status_t status);
178
179 #endif /* __TOOLS_LINUX_BLKDEV_H */
180