aops.h (2368B)
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 11handle_t *ocfs2_start_walk_page_trans(struct inode *inode, 12 struct page *page, 13 unsigned from, 14 unsigned to); 15 16int ocfs2_map_page_blocks(struct page *page, u64 *p_blkno, 17 struct inode *inode, unsigned int from, 18 unsigned int to, int new); 19 20void ocfs2_unlock_and_free_pages(struct page **pages, int num_pages); 21 22int 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 30int ocfs2_write_end_nolock(struct address_space *mapping, 31 loff_t pos, unsigned len, unsigned copied, void *fsdata); 32 33typedef enum { 34 OCFS2_WRITE_BUFFER = 0, 35 OCFS2_WRITE_DIRECT, 36 OCFS2_WRITE_MMAP, 37} ocfs2_write_type_t; 38 39int 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 44int ocfs2_read_inline_data(struct inode *inode, struct page *page, 45 struct buffer_head *di_bh); 46int ocfs2_size_fits_inline_data(struct buffer_head *di_bh, u64 new_size); 47 48int 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) 53static 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 */ 67enum 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_clear_rw_locked(iocb) \ 74 clear_bit(OCFS2_IOCB_RW_LOCK, (unsigned long *)&iocb->private) 75#define ocfs2_iocb_rw_locked_level(iocb) \ 76 test_bit(OCFS2_IOCB_RW_LOCK_LEVEL, (unsigned long *)&iocb->private) 77 78#endif /* OCFS2_FILE_H */