1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Copyright (C) 2002, 2004, 2005 Oracle. All rights reserved. 4 */ 5 6 #ifndef OCFS2_AOPS_H 7 #define OCFS2_AOPS_H 8 9 #include <linux/fs.h> 10 11 handle_t *ocfs2_start_walk_page_trans(struct inode *inode, 12 struct page *page, 13 unsigned from, 14 unsigned to); 15 16 int ocfs2_map_page_blocks(struct page *page, u64 *p_blkno, 17 struct inode *inode, unsigned int from, 18 unsigned int to, int new); 19 20 void ocfs2_unlock_and_free_pages(struct page **pages, int num_pages); 21 22 int walk_page_buffers( handle_t *handle, 23 struct buffer_head *head, 24 unsigned from, 25 unsigned to, 26 int *partial, 27 int (*fn)( handle_t *handle, 28 struct buffer_head *bh)); 29 30 int ocfs2_write_end_nolock(struct address_space *mapping, 31 loff_t pos, unsigned len, unsigned copied, void *fsdata); 32 33 typedef enum { 34 OCFS2_WRITE_BUFFER = 0, 35 OCFS2_WRITE_DIRECT, 36 OCFS2_WRITE_MMAP, 37 } ocfs2_write_type_t; 38 39 int ocfs2_write_begin_nolock(struct address_space *mapping, 40 loff_t pos, unsigned len, ocfs2_write_type_t type, 41 struct page **pagep, void **fsdata, 42 struct buffer_head *di_bh, struct page *mmap_page); 43 44 int ocfs2_read_inline_data(struct inode *inode, struct page *page, 45 struct buffer_head *di_bh); 46 int ocfs2_size_fits_inline_data(struct buffer_head *di_bh, u64 new_size); 47 48 int ocfs2_get_block(struct inode *inode, sector_t iblock, 49 struct buffer_head *bh_result, int create); 50 /* all ocfs2_dio_end_io()'s fault */ 51 #define ocfs2_iocb_is_rw_locked(iocb) \ 52 test_bit(0, (unsigned long *)&iocb->private) 53 static inline void ocfs2_iocb_set_rw_locked(struct kiocb *iocb, int level) 54 { 55 set_bit(0, (unsigned long *)&iocb->private); 56 if (level) 57 set_bit(1, (unsigned long *)&iocb->private); 58 else 59 clear_bit(1, (unsigned long *)&iocb->private); 60 } 61 62 /* 63 * Using a named enum representing lock types in terms of #N bit stored in 64 * iocb->private, which is going to be used for communication between 65 * ocfs2_dio_end_io() and ocfs2_file_write/read_iter(). 66 */ 67 enum ocfs2_iocb_lock_bits { 68 OCFS2_IOCB_RW_LOCK = 0, 69 OCFS2_IOCB_RW_LOCK_LEVEL, 70 OCFS2_IOCB_NUM_LOCKS 71 }; 72 73 #define ocfs2_iocb_init_rw_locked(iocb) \ 74 (iocb->private = NULL) 75 #define ocfs2_iocb_clear_rw_locked(iocb) \ 76 clear_bit(OCFS2_IOCB_RW_LOCK, (unsigned long *)&iocb->private) 77 #define ocfs2_iocb_rw_locked_level(iocb) \ 78 test_bit(OCFS2_IOCB_RW_LOCK_LEVEL, (unsigned long *)&iocb->private) 79 80 #endif /* OCFS2_FILE_H */ 81