GNU Linux-libre 4.19.286-gnu1
[releases.git] / fs / xfs / xfs_aops.h
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2005-2006 Silicon Graphics, Inc.
4  * All Rights Reserved.
5  */
6 #ifndef __XFS_AOPS_H__
7 #define __XFS_AOPS_H__
8
9 extern struct bio_set xfs_ioend_bioset;
10
11 /*
12  * Types of I/O for bmap clustering and I/O completion tracking.
13  */
14 enum {
15         XFS_IO_INVALID,         /* initial state */
16         XFS_IO_DELALLOC,        /* covers delalloc region */
17         XFS_IO_UNWRITTEN,       /* covers allocated but uninitialized data */
18         XFS_IO_OVERWRITE,       /* covers already allocated extent */
19         XFS_IO_COW,             /* covers copy-on-write extent */
20         XFS_IO_HOLE,            /* covers region without any block allocation */
21 };
22
23 #define XFS_IO_TYPES \
24         { XFS_IO_INVALID,               "invalid" }, \
25         { XFS_IO_DELALLOC,              "delalloc" }, \
26         { XFS_IO_UNWRITTEN,             "unwritten" }, \
27         { XFS_IO_OVERWRITE,             "overwrite" }, \
28         { XFS_IO_COW,                   "CoW" }, \
29         { XFS_IO_HOLE,                  "hole" }
30
31 /*
32  * Structure for buffered I/O completions.
33  */
34 struct xfs_ioend {
35         struct list_head        io_list;        /* next ioend in chain */
36         unsigned int            io_type;        /* delalloc / unwritten */
37         struct inode            *io_inode;      /* file being written to */
38         size_t                  io_size;        /* size of the extent */
39         xfs_off_t               io_offset;      /* offset in the file */
40         struct work_struct      io_work;        /* xfsdatad work queue */
41         struct xfs_trans        *io_append_trans;/* xact. for size update */
42         struct bio              *io_bio;        /* bio being built */
43         struct bio              io_inline_bio;  /* MUST BE LAST! */
44 };
45
46 extern const struct address_space_operations xfs_address_space_operations;
47 extern const struct address_space_operations xfs_dax_aops;
48
49 int     xfs_setfilesize(struct xfs_inode *ip, xfs_off_t offset, size_t size);
50
51 extern void xfs_count_page_state(struct page *, int *, int *);
52 extern struct block_device *xfs_find_bdev_for_inode(struct inode *);
53 extern struct dax_device *xfs_find_daxdev_for_inode(struct inode *);
54
55 #endif /* __XFS_AOPS_H__ */