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 void __nilfs_clear_folio_dirty(struct folio *); 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 bool nilfs_folio_buffers_clean(struct folio *); 40 void nilfs_folio_bug(struct folio *); 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_folio_dirty(struct folio *folio); 45 void nilfs_clear_dirty_pages(struct address_space *mapping); 46 unsigned int nilfs_page_count_clean_buffers(struct folio *folio, 47 unsigned int from, unsigned int to); 48 unsigned long nilfs_find_uncommitted_extent(struct inode *inode, 49 sector_t start_blk, 50 sector_t *blkoff); 51 52 #define NILFS_FOLIO_BUG(folio, m, a...) \ 53 do { nilfs_folio_bug(folio); BUG(); } while (0) 54 55 #endif /* _NILFS_PAGE_H */ 56