1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * extent_map.h |
4 | * |
5 | * In-memory file extent mappings for OCFS2. |
6 | * |
7 | * Copyright (C) 2004 Oracle. All rights reserved. |
8 | */ |
9 | |
10 | #ifndef _EXTENT_MAP_H |
11 | #define _EXTENT_MAP_H |
12 | |
13 | struct ocfs2_extent_map_item { |
14 | unsigned int ei_cpos; |
15 | unsigned int ei_phys; |
16 | unsigned int ei_clusters; |
17 | unsigned int ei_flags; |
18 | |
19 | struct list_head ei_list; |
20 | }; |
21 | |
22 | #define OCFS2_MAX_EXTENT_MAP_ITEMS 3 |
23 | struct ocfs2_extent_map { |
24 | unsigned int em_num_items; |
25 | struct list_head em_list; |
26 | }; |
27 | |
28 | void ocfs2_extent_map_init(struct inode *inode); |
29 | void ocfs2_extent_map_trunc(struct inode *inode, unsigned int cluster); |
30 | void ocfs2_extent_map_insert_rec(struct inode *inode, |
31 | struct ocfs2_extent_rec *rec); |
32 | |
33 | int ocfs2_get_clusters(struct inode *inode, u32 v_cluster, u32 *p_cluster, |
34 | u32 *num_clusters, unsigned int *extent_flags); |
35 | int ocfs2_extent_map_get_blocks(struct inode *inode, u64 v_blkno, u64 *p_blkno, |
36 | u64 *ret_count, unsigned int *extent_flags); |
37 | |
38 | int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, |
39 | u64 map_start, u64 map_len); |
40 | |
41 | int ocfs2_overwrite_io(struct inode *inode, struct buffer_head *di_bh, |
42 | u64 map_start, u64 map_len); |
43 | |
44 | int ocfs2_seek_data_hole_offset(struct file *file, loff_t *offset, int origin); |
45 | |
46 | int ocfs2_xattr_get_clusters(struct inode *inode, u32 v_cluster, |
47 | u32 *p_cluster, u32 *num_clusters, |
48 | struct ocfs2_extent_list *el, |
49 | unsigned int *extent_flags); |
50 | |
51 | int ocfs2_read_virt_blocks(struct inode *inode, u64 v_block, int nr, |
52 | struct buffer_head *bhs[], int flags, |
53 | int (*validate)(struct super_block *sb, |
54 | struct buffer_head *bh)); |
55 | int ocfs2_figure_hole_clusters(struct ocfs2_caching_info *ci, |
56 | struct ocfs2_extent_list *el, |
57 | struct buffer_head *eb_bh, |
58 | u32 v_cluster, |
59 | u32 *num_clusters); |
60 | static inline int ocfs2_read_virt_block(struct inode *inode, u64 v_block, |
61 | struct buffer_head **bh, |
62 | int (*validate)(struct super_block *sb, |
63 | struct buffer_head *bh)) |
64 | { |
65 | int status = 0; |
66 | |
67 | if (bh == NULL) { |
68 | printk("ocfs2: bh == NULL\n" ); |
69 | status = -EINVAL; |
70 | goto bail; |
71 | } |
72 | |
73 | status = ocfs2_read_virt_blocks(inode, v_block, nr: 1, bhs: bh, flags: 0, validate); |
74 | |
75 | bail: |
76 | return status; |
77 | } |
78 | |
79 | |
80 | #endif /* _EXTENT_MAP_H */ |
81 | |