mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
xfs: create a sparse load xfarray function
Create a new method to load an xfarray element from the xfile, but with a twist. If we've never stored to the array index, zero the caller's buffer. This will facilitate RMWs updates of records in a sparse array without fuss, since the sparse xfarray convention is that uninitialized array elements default to zeroes. This is a separate patch to reduce the size of the upcoming quotacheck patch. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
ebd610fe82
commit
5a3ab58495
@ -45,6 +45,25 @@ int xfarray_store(struct xfarray *array, xfarray_idx_t idx, const void *ptr);
|
||||
int xfarray_store_anywhere(struct xfarray *array, const void *ptr);
|
||||
bool xfarray_element_is_null(struct xfarray *array, const void *ptr);
|
||||
|
||||
/*
|
||||
* Load an array element, but zero the buffer if there's no data because we
|
||||
* haven't stored to that array element yet.
|
||||
*/
|
||||
static inline int
|
||||
xfarray_load_sparse(
|
||||
struct xfarray *array,
|
||||
uint64_t idx,
|
||||
void *rec)
|
||||
{
|
||||
int error = xfarray_load(array, idx, rec);
|
||||
|
||||
if (error == -ENODATA) {
|
||||
memset(rec, 0, array->obj_size);
|
||||
return 0;
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Append an element to the array. */
|
||||
static inline int xfarray_append(struct xfarray *array, const void *ptr)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user