2019-05-24 13:04:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-12-16 01:31:24 +03:00
/* -*- mode: c; c-basic-offset: 8; -*-
* vim : noexpandtab sw = 8 ts = 8 sts = 0 :
*
* Copyright ( C ) 2002 , 2004 , 2005 Oracle . All rights reserved .
*/
# ifndef OCFS2_AOPS_H
# define OCFS2_AOPS_H
2015-02-22 19:58:50 +03:00
# include <linux/fs.h>
2013-05-08 03:19:08 +04:00
2006-10-10 05:11:45 +04:00
handle_t * ocfs2_start_walk_page_trans ( struct inode * inode ,
2005-12-16 01:31:24 +03:00
struct page * page ,
unsigned from ,
unsigned to ) ;
2007-02-16 22:46:50 +03:00
int ocfs2_map_page_blocks ( struct page * page , u64 * p_blkno ,
struct inode * inode , unsigned int from ,
unsigned int to , int new ) ;
2007-09-08 01:20:45 +04:00
void ocfs2_unlock_and_free_pages ( struct page * * pages , int num_pages ) ;
2007-02-16 22:46:50 +03:00
int walk_page_buffers ( handle_t * handle ,
struct buffer_head * head ,
unsigned from ,
unsigned to ,
int * partial ,
int ( * fn ) ( handle_t * handle ,
struct buffer_head * bh ) ) ;
2007-05-10 02:16:19 +04:00
int ocfs2_write_end_nolock ( struct address_space * mapping ,
2016-12-13 03:41:17 +03:00
loff_t pos , unsigned len , unsigned copied , void * fsdata ) ;
2007-05-10 02:16:19 +04:00
2016-03-26 00:20:52 +03:00
typedef enum {
OCFS2_WRITE_BUFFER = 0 ,
OCFS2_WRITE_DIRECT ,
OCFS2_WRITE_MMAP ,
} ocfs2_write_type_t ;
int ocfs2_write_begin_nolock ( struct address_space * mapping ,
loff_t pos , unsigned len , ocfs2_write_type_t type ,
2007-05-10 02:16:19 +04:00
struct page * * pagep , void * * fsdata ,
struct buffer_head * di_bh , struct page * mmap_page ) ;
2007-09-08 01:46:51 +04:00
int ocfs2_read_inline_data ( struct inode * inode , struct page * page ,
struct buffer_head * di_bh ) ;
int ocfs2_size_fits_inline_data ( struct buffer_head * di_bh , u64 new_size ) ;
2009-08-25 04:05:12 +04:00
int ocfs2_get_block ( struct inode * inode , sector_t iblock ,
struct buffer_head * bh_result , int create ) ;
2005-12-16 01:31:24 +03:00
/* all ocfs2_dio_end_io()'s fault */
# define ocfs2_iocb_is_rw_locked(iocb) \
test_bit ( 0 , ( unsigned long * ) & iocb - > private )
2007-04-17 04:28:51 +04:00
static inline void ocfs2_iocb_set_rw_locked ( struct kiocb * iocb , int level )
{
set_bit ( 0 , ( unsigned long * ) & iocb - > private ) ;
if ( level )
set_bit ( 1 , ( unsigned long * ) & iocb - > private ) ;
else
clear_bit ( 1 , ( unsigned long * ) & iocb - > private ) ;
}
2010-12-07 09:35:07 +03:00
/*
* Using a named enum representing lock types in terms of # N bit stored in
2011-03-31 05:57:33 +04:00
* iocb - > private , which is going to be used for communication between
2018-04-06 02:18:45 +03:00
* ocfs2_dio_end_io ( ) and ocfs2_file_write / read_iter ( ) .
2010-12-07 09:35:07 +03:00
*/
enum ocfs2_iocb_lock_bits {
OCFS2_IOCB_RW_LOCK = 0 ,
OCFS2_IOCB_RW_LOCK_LEVEL ,
OCFS2_IOCB_NUM_LOCKS
} ;
2005-12-16 01:31:24 +03:00
# define ocfs2_iocb_clear_rw_locked(iocb) \
2010-12-07 09:35:07 +03:00
clear_bit ( OCFS2_IOCB_RW_LOCK , ( unsigned long * ) & iocb - > private )
2007-04-17 04:28:51 +04:00
# define ocfs2_iocb_rw_locked_level(iocb) \
2010-12-07 09:35:07 +03:00
test_bit ( OCFS2_IOCB_RW_LOCK_LEVEL , ( unsigned long * ) & iocb - > private )
2011-06-23 01:23:38 +04:00
2005-12-16 01:31:24 +03:00
# endif /* OCFS2_FILE_H */