Merge tag 'xfs-4.18-merge-10' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[sfrench/cifs-2.6.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 };
21
22 #define XFS_IO_TYPES \
23         { XFS_IO_INVALID,               "invalid" }, \
24         { XFS_IO_DELALLOC,              "delalloc" }, \
25         { XFS_IO_UNWRITTEN,             "unwritten" }, \
26         { XFS_IO_OVERWRITE,             "overwrite" }, \
27         { XFS_IO_COW,                   "CoW" }
28
29 /*
30  * Structure for buffered I/O completions.
31  */
32 struct xfs_ioend {
33         struct list_head        io_list;        /* next ioend in chain */
34         unsigned int            io_type;        /* delalloc / unwritten */
35         struct inode            *io_inode;      /* file being written to */
36         size_t                  io_size;        /* size of the extent */
37         xfs_off_t               io_offset;      /* offset in the file */
38         struct work_struct      io_work;        /* xfsdatad work queue */
39         struct xfs_trans        *io_append_trans;/* xact. for size update */
40         struct bio              *io_bio;        /* bio being built */
41         struct bio              io_inline_bio;  /* MUST BE LAST! */
42 };
43
44 extern const struct address_space_operations xfs_address_space_operations;
45 extern const struct address_space_operations xfs_dax_aops;
46
47 int     xfs_setfilesize(struct xfs_inode *ip, xfs_off_t offset, size_t size);
48
49 extern void xfs_count_page_state(struct page *, int *, int *);
50 extern struct block_device *xfs_find_bdev_for_inode(struct inode *);
51 extern struct dax_device *xfs_find_daxdev_for_inode(struct inode *);
52
53 #endif /* __XFS_AOPS_H__ */