1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* |
3 | * Buffer/page management specific to NILFS |
4 | * |
5 | * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation. |
6 | * |
7 | * Written by Ryusuke Konishi and Seiji Kihara. |
8 | */ |
9 | |
10 | #ifndef _NILFS_PAGE_H |
11 | #define _NILFS_PAGE_H |
12 | |
13 | #include <linux/buffer_head.h> |
14 | #include "nilfs.h" |
15 | |
16 | /* |
17 | * Extended buffer state bits |
18 | */ |
19 | enum { |
20 | BH_NILFS_Allocated = BH_PrivateStart, |
21 | BH_NILFS_Node, |
22 | BH_NILFS_Volatile, |
23 | BH_NILFS_Checked, |
24 | BH_NILFS_Redirected, |
25 | }; |
26 | |
27 | BUFFER_FNS(NILFS_Node, nilfs_node) /* nilfs node buffers */ |
28 | BUFFER_FNS(NILFS_Volatile, nilfs_volatile) |
29 | BUFFER_FNS(NILFS_Checked, nilfs_checked) /* buffer is verified */ |
30 | BUFFER_FNS(NILFS_Redirected, nilfs_redirected) /* redirected to a copy */ |
31 | |
32 | |
33 | int __nilfs_clear_page_dirty(struct page *); |
34 | |
35 | struct buffer_head *nilfs_grab_buffer(struct inode *, struct address_space *, |
36 | unsigned long, unsigned long); |
37 | void nilfs_forget_buffer(struct buffer_head *); |
38 | void nilfs_copy_buffer(struct buffer_head *, struct buffer_head *); |
39 | int nilfs_page_buffers_clean(struct page *); |
40 | void nilfs_page_bug(struct page *); |
41 | |
42 | int nilfs_copy_dirty_pages(struct address_space *, struct address_space *); |
43 | void nilfs_copy_back_pages(struct address_space *, struct address_space *); |
44 | void nilfs_clear_dirty_page(struct page *, bool); |
45 | void nilfs_clear_dirty_pages(struct address_space *, bool); |
46 | unsigned int nilfs_page_count_clean_buffers(struct page *, unsigned int, |
47 | unsigned int); |
48 | unsigned long nilfs_find_uncommitted_extent(struct inode *inode, |
49 | sector_t start_blk, |
50 | sector_t *blkoff); |
51 | |
52 | #define NILFS_PAGE_BUG(page, m, a...) \ |
53 | do { nilfs_page_bug(page); BUG(); } while (0) |
54 | |
55 | #endif /* _NILFS_PAGE_H */ |
56 | |