| 
									
										
										
										
											2018-06-06 02:42:14 +00:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2005-04-16 22:20:36 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef __XFS_ITABLE_H__
 | 
					
						
							|  |  |  | #define	__XFS_ITABLE_H__
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:40 +00: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 */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Return value that means we want to abort the walk. */ | 
					
						
							|  |  |  | #define XFS_IBULK_ABORT		(XFS_IWALK_ABORT)
 | 
					
						
							| 
									
										
										
										
											2005-04-16 22:20:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:40 +00: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 22:20:36 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:40 +00: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++; | 
					
						
							|  |  |  | 	return breq->ocount == breq->icount ? XFS_IBULK_ABORT : 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2005-04-16 22:20:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Return stat information in bulk (by-inode) for the filesystem. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2007-07-11 01:10:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:40 +00:00
										 |  |  | typedef int (*bulkstat_one_fmt_pf)(struct xfs_ibulk *breq, | 
					
						
							| 
									
										
										
										
											2019-07-04 03:36:26 +00:00
										 |  |  | 		const struct xfs_bulkstat *bstat); | 
					
						
							| 
									
										
										
										
											2008-11-26 03:20:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:40 +00: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-04 03:36:26 +00:00
										 |  |  | void xfs_bulkstat_to_bstat(struct xfs_mount *mp, struct xfs_bstat *bs1, | 
					
						
							|  |  |  | 		const struct xfs_bulkstat *bstat); | 
					
						
							| 
									
										
										
										
											2005-04-16 22:20:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:43 +00:00
										 |  |  | typedef int (*inumbers_fmt_pf)(struct xfs_ibulk *breq, | 
					
						
							|  |  |  | 		const struct xfs_inogrp *igrp); | 
					
						
							| 
									
										
										
										
											2007-07-11 01:10:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-02 16:39:43 +00:00
										 |  |  | int xfs_inumbers(struct xfs_ibulk *breq, inumbers_fmt_pf formatter); | 
					
						
							| 
									
										
										
										
											2005-04-16 22:20:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif	/* __XFS_ITABLE_H__ */
 |