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