2005-04-17 02:20:36 +04:00
/*
2005-11-02 06:58:39 +03:00
* Copyright ( c ) 2000 - 2001 , 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
2005-04-17 02:20:36 +04:00
* published by the Free Software Foundation .
*
2005-11-02 06:58:39 +03:00
* This program is distributed in the hope that it would be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
2005-04-17 02:20:36 +04:00
*/
# ifndef __XFS_BUF_ITEM_H__
# define __XFS_BUF_ITEM_H__
2013-08-12 14:49:24 +04:00
/* kernel only definitions */
2012-06-22 12:50:07 +04:00
2013-08-12 14:49:24 +04:00
/* buf log item flags */
2005-04-17 02:20:36 +04:00
# define XFS_BLI_HOLD 0x01
# define XFS_BLI_DIRTY 0x02
# define XFS_BLI_STALE 0x04
# define XFS_BLI_LOGGED 0x08
# define XFS_BLI_INODE_ALLOC_BUF 0x10
# define XFS_BLI_STALE_INODE 0x20
2010-05-20 17:19:42 +04:00
# define XFS_BLI_INODE_BUF 0x40
2013-06-27 10:04:52 +04:00
# define XFS_BLI_ORDERED 0x80
2005-04-17 02:20:36 +04:00
2009-12-15 02:14:59 +03:00
# define XFS_BLI_FLAGS \
{ XFS_BLI_HOLD , " HOLD " } , \
{ XFS_BLI_DIRTY , " DIRTY " } , \
{ XFS_BLI_STALE , " STALE " } , \
{ XFS_BLI_LOGGED , " LOGGED " } , \
{ XFS_BLI_INODE_ALLOC_BUF , " INODE_ALLOC " } , \
2010-05-20 17:19:42 +04:00
{ XFS_BLI_STALE_INODE , " STALE_INODE " } , \
2013-06-27 10:04:52 +04:00
{ XFS_BLI_INODE_BUF , " INODE_BUF " } , \
{ XFS_BLI_ORDERED , " ORDERED " }
2009-12-15 02:14:59 +03:00
2005-04-17 02:20:36 +04:00
struct xfs_buf ;
struct xfs_mount ;
struct xfs_buf_log_item ;
/*
* This is the in core log item structure used to track information
* needed to log buffers . It tracks how many times the lock has been
* locked , and which 128 byte chunks of the buffer are dirty .
*/
typedef struct xfs_buf_log_item {
xfs_log_item_t bli_item ; /* common item structure */
struct xfs_buf * bli_buf ; /* real buffer pointer */
unsigned int bli_flags ; /* misc flags */
unsigned int bli_recur ; /* lock recursion count */
atomic_t bli_refcount ; /* cnt of tp refs */
2012-06-22 12:50:12 +04:00
int bli_format_count ; /* count of headers */
struct xfs_buf_log_format * bli_formats ; /* array of in-log header ptrs */
2012-12-05 03:18:03 +04:00
struct xfs_buf_log_format __bli_format ; /* embedded in-log header */
2005-04-17 02:20:36 +04:00
} xfs_buf_log_item_t ;
2015-08-25 03:05:13 +03:00
int xfs_buf_item_init ( struct xfs_buf * , struct xfs_mount * ) ;
2005-04-17 02:20:36 +04:00
void xfs_buf_item_relse ( struct xfs_buf * ) ;
void xfs_buf_item_log ( xfs_buf_log_item_t * , uint , uint ) ;
uint xfs_buf_item_dirty ( xfs_buf_log_item_t * ) ;
void xfs_buf_attach_iodone ( struct xfs_buf * ,
void ( * ) ( struct xfs_buf * , xfs_log_item_t * ) ,
xfs_log_item_t * ) ;
void xfs_buf_iodone_callbacks ( struct xfs_buf * ) ;
2010-06-23 12:11:15 +04:00
void xfs_buf_iodone ( struct xfs_buf * , struct xfs_log_item * ) ;
2005-04-17 02:20:36 +04:00
2013-08-12 14:49:24 +04:00
extern kmem_zone_t * xfs_buf_item_zone ;
2005-04-17 02:20:36 +04:00
# endif /* __XFS_BUF_ITEM_H__ */