diff options
author | Eric Sandeen <sandeen@sandeen.net> | 2008-11-27 22:23:35 -0500 |
---|---|---|
committer | Niv Sardi <xaiki@sgi.com> | 2008-11-30 19:29:00 -0500 |
commit | 8a7141a8b931d60d42830432b82078cd6dace83b (patch) | |
tree | e5f1f2573b7e759e8d04b39757c1491689037485 /fs/xfs/xfs_bmap.h | |
parent | 0924b585fc49bf371bc700c23e516a538bf589af (diff) |
[XFS] convert xfs_getbmap to take formatter functions
Preliminary work to hook up fiemap, this allows us to pass in an
arbitrary formatter to copy extent data back to userspace.
The formatter takes info for 1 extent, a pointer to the user "thing*"
and a pointer to a "filled" variable to indicate whether a userspace
buffer did get filled in (for fiemap, hole "extents" are skipped).
I'm just using the getbmapx struct as a "common denominator" because
as far as I can see, it holds all info that any formatters will care
about.
("*thing" because fiemap doesn't pass the user pointer around, but rather
has a pointer to a fiemap info structure, and helpers associated with it)
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Niv Sardi <xaiki@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_bmap.h')
-rw-r--r-- | fs/xfs/xfs_bmap.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h index 7c9d12cd7a47..284571c05ed0 100644 --- a/fs/xfs/xfs_bmap.h +++ b/fs/xfs/xfs_bmap.h | |||
@@ -356,15 +356,18 @@ xfs_bmap_finish( | |||
356 | xfs_bmap_free_t *flist, /* i/o: list extents to free */ | 356 | xfs_bmap_free_t *flist, /* i/o: list extents to free */ |
357 | int *committed); /* xact committed or not */ | 357 | int *committed); /* xact committed or not */ |
358 | 358 | ||
359 | /* bmap to userspace formatter - copy to user & advance pointer */ | ||
360 | typedef int (*xfs_bmap_format_t)(void **, struct getbmapx *, int *); | ||
361 | |||
359 | /* | 362 | /* |
360 | * Fcntl interface to xfs_bmapi. | 363 | * Get inode's extents as described in bmv, and format for output. |
361 | */ | 364 | */ |
362 | int /* error code */ | 365 | int /* error code */ |
363 | xfs_getbmap( | 366 | xfs_getbmap( |
364 | xfs_inode_t *ip, | 367 | xfs_inode_t *ip, |
365 | struct getbmap *bmv, /* user bmap structure */ | 368 | struct getbmapx *bmv, /* user bmap structure */ |
366 | void __user *ap, /* pointer to user's array */ | 369 | xfs_bmap_format_t formatter, /* format to user */ |
367 | int iflags); /* interface flags */ | 370 | void *arg); /* formatter arg */ |
368 | 371 | ||
369 | /* | 372 | /* |
370 | * Check if the endoff is outside the last extent. If so the caller will grow | 373 | * Check if the endoff is outside the last extent. If so the caller will grow |