2018-06-05 19:42:14 -07:00
// SPDX-License-Identifier: GPL-2.0
2005-04-16 15:20:36 -07:00
/*
* Copyright ( c ) 2000 - 2001 Silicon Graphics , Inc . All Rights Reserved .
*/
# ifndef __XFS_ITABLE_H__
# define __XFS_ITABLE_H__
2019-07-02 09:39:40 -07:00
/* In-memory representation of a userspace request for batch inode data. */
struct xfs_ibulk {
struct xfs_mount * mp ;
void __user * ubuffer ; /* user output buffer */
xfs_ino_t startino ; /* start with this inode */
unsigned int icount ; /* number of elements in ubuffer */
unsigned int ocount ; /* number of records returned */
2019-07-03 20:36:28 -07:00
unsigned int flags ; /* see XFS_IBULK_FLAG_* */
2019-07-02 09:39:40 -07:00
} ;
2019-07-03 20:36:28 -07:00
/* Only iterate within the same AG as startino */
# define XFS_IBULK_SAME_AG (XFS_IWALK_SAME_AG)
2005-04-16 15:20:36 -07:00
/*
2019-07-02 09:39:40 -07:00
* Advance the user buffer pointer by one record of the given size . If the
* buffer is now full , return the appropriate error code .
2005-04-16 15:20:36 -07:00
*/
2019-07-02 09:39:40 -07:00
static inline int
xfs_ibulk_advance (
struct xfs_ibulk * breq ,
size_t bytes )
{
char __user * b = breq - > ubuffer ;
breq - > ubuffer = b + bytes ;
breq - > ocount + + ;
2019-08-28 14:37:57 -07:00
return breq - > ocount = = breq - > icount ? - ECANCELED : 0 ;
2019-07-02 09:39:40 -07:00
}
2005-04-16 15:20:36 -07:00
/*
* Return stat information in bulk ( by - inode ) for the filesystem .
*/
2007-07-11 11:10:19 +10:00
2019-08-28 14:37:57 -07:00
/*
* Return codes for the formatter function are 0 to continue iterating , and
* non - zero to stop iterating . Any non - zero value will be passed up to the
* bulkstat / inumbers caller . The special value - ECANCELED can be used to stop
* iteration , as neither bulkstat nor inumbers will ever generate that error
* code on their own .
*/
2019-07-02 09:39:40 -07:00
typedef int ( * bulkstat_one_fmt_pf ) ( struct xfs_ibulk * breq ,
2019-07-03 20:36:26 -07:00
const struct xfs_bulkstat * bstat ) ;
2008-11-25 21:20:11 -06:00
2019-07-02 09:39:40 -07:00
int xfs_bulkstat_one ( struct xfs_ibulk * breq , bulkstat_one_fmt_pf formatter ) ;
int xfs_bulkstat ( struct xfs_ibulk * breq , bulkstat_one_fmt_pf formatter ) ;
2019-07-03 20:36:26 -07:00
void xfs_bulkstat_to_bstat ( struct xfs_mount * mp , struct xfs_bstat * bs1 ,
const struct xfs_bulkstat * bstat ) ;
2005-04-16 15:20:36 -07:00
2019-07-02 09:39:43 -07:00
typedef int ( * inumbers_fmt_pf ) ( struct xfs_ibulk * breq ,
2019-07-03 20:36:27 -07:00
const struct xfs_inumbers * igrp ) ;
2007-07-11 11:10:19 +10:00
2019-07-02 09:39:43 -07:00
int xfs_inumbers ( struct xfs_ibulk * breq , inumbers_fmt_pf formatter ) ;
2019-07-03 20:36:27 -07:00
void xfs_inumbers_to_inogrp ( struct xfs_inogrp * ig1 ,
const struct xfs_inumbers * ig ) ;
2005-04-16 15:20:36 -07:00
# endif /* __XFS_ITABLE_H__ */