xref: /linux/fs/xfs/scrub/xfblob.h (revision c771600c6af14749609b49565ffb4cac2959710d)
1d2bd7eefSDarrick J. Wong /* SPDX-License-Identifier: GPL-2.0-or-later */
2d2bd7eefSDarrick J. Wong /*
3d2bd7eefSDarrick J. Wong  * Copyright (c) 2021-2024 Oracle.  All Rights Reserved.
4d2bd7eefSDarrick J. Wong  * Author: Darrick J. Wong <djwong@kernel.org>
5d2bd7eefSDarrick J. Wong  */
6d2bd7eefSDarrick J. Wong #ifndef __XFS_SCRUB_XFBLOB_H__
7d2bd7eefSDarrick J. Wong #define __XFS_SCRUB_XFBLOB_H__
8d2bd7eefSDarrick J. Wong 
9d2bd7eefSDarrick J. Wong struct xfblob {
10d2bd7eefSDarrick J. Wong 	struct xfile	*xfile;
11d2bd7eefSDarrick J. Wong 	loff_t		last_offset;
12d2bd7eefSDarrick J. Wong };
13d2bd7eefSDarrick J. Wong 
14d2bd7eefSDarrick J. Wong typedef loff_t		xfblob_cookie;
15d2bd7eefSDarrick J. Wong 
16d2bd7eefSDarrick J. Wong int xfblob_create(const char *descr, struct xfblob **blobp);
17d2bd7eefSDarrick J. Wong void xfblob_destroy(struct xfblob *blob);
18d2bd7eefSDarrick J. Wong int xfblob_load(struct xfblob *blob, xfblob_cookie cookie, void *ptr,
19d2bd7eefSDarrick J. Wong 		uint32_t size);
20d2bd7eefSDarrick J. Wong int xfblob_store(struct xfblob *blob, xfblob_cookie *cookie, const void *ptr,
21d2bd7eefSDarrick J. Wong 		uint32_t size);
22d2bd7eefSDarrick J. Wong int xfblob_free(struct xfblob *blob, xfblob_cookie cookie);
23e47dcf11SDarrick J. Wong unsigned long long xfblob_bytes(struct xfblob *blob);
24e47dcf11SDarrick J. Wong void xfblob_truncate(struct xfblob *blob);
25d2bd7eefSDarrick J. Wong 
26*b1991ee3SDarrick J. Wong static inline int
27*b1991ee3SDarrick J. Wong xfblob_storename(
28*b1991ee3SDarrick J. Wong 	struct xfblob		*blob,
29*b1991ee3SDarrick J. Wong 	xfblob_cookie		*cookie,
30*b1991ee3SDarrick J. Wong 	const struct xfs_name	*xname)
31*b1991ee3SDarrick J. Wong {
32*b1991ee3SDarrick J. Wong 	return xfblob_store(blob, cookie, xname->name, xname->len);
33*b1991ee3SDarrick J. Wong }
34*b1991ee3SDarrick J. Wong 
35*b1991ee3SDarrick J. Wong static inline int
36*b1991ee3SDarrick J. Wong xfblob_loadname(
37*b1991ee3SDarrick J. Wong 	struct xfblob		*blob,
38*b1991ee3SDarrick J. Wong 	xfblob_cookie		cookie,
39*b1991ee3SDarrick J. Wong 	struct xfs_name		*xname,
40*b1991ee3SDarrick J. Wong 	uint32_t		size)
41*b1991ee3SDarrick J. Wong {
42*b1991ee3SDarrick J. Wong 	int ret = xfblob_load(blob, cookie, (void *)xname->name, size);
43*b1991ee3SDarrick J. Wong 	if (ret)
44*b1991ee3SDarrick J. Wong 		return ret;
45*b1991ee3SDarrick J. Wong 
46*b1991ee3SDarrick J. Wong 	xname->len = size;
47*b1991ee3SDarrick J. Wong 	return 0;
48*b1991ee3SDarrick J. Wong }
49*b1991ee3SDarrick J. Wong 
50d2bd7eefSDarrick J. Wong #endif /* __XFS_SCRUB_XFBLOB_H__ */
51