Viewing: lustre_fiemap.h
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2014, 2015, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*
* FIEMAP data structures and flags. This header file will be used until
* fiemap.h is available in the upstream kernel.
*
* Author: Kalpak Shah <kalpak.shah@sun.com>
* Author: Andreas Dilger <adilger@sun.com>
*/
#ifndef _LUSTRE_FIEMAP_H
#define _LUSTRE_FIEMAP_H
#ifdef __KERNEL__
# include <linux/stddef.h>
#else
# include <stddef.h>
#endif
#include <linux/fiemap.h>
#include <linux/types.h>
/**
* XXX: We use fiemap_extent::fe_reserved[0], notice the high 16bits of it
* is used to locate the stripe number starting from the very beginning to
* resume the fiemap call.
*/
#define fe_device fe_reserved[0]
static inline unsigned int get_fe_device(struct fiemap_extent *fe)
{
return fe->fe_device & 0x1ffff;
}
static inline void set_fe_device(struct fiemap_extent *fe, unsigned int devno)
{
fe->fe_device = (fe->fe_device & 0xfffe0000) | (devno & 0x1ffff);
}
static inline unsigned int get_fe_stripenr(struct fiemap_extent *fe)
{
return fe->fe_device >> 17;
}
static inline void set_fe_stripenr(struct fiemap_extent *fe, unsigned int nr)
{
fe->fe_device = (fe->fe_device & 0x1ffff) | (nr << 17);
}
static inline void set_fe_device_stripenr(struct fiemap_extent *fe,
unsigned int devno, unsigned int nr)
{
fe->fe_device = (nr << 17) | (devno & 0x1ffff);
}
static inline __kernel_size_t fiemap_count_to_size(__kernel_size_t extent_count)
{
return sizeof(struct fiemap) + extent_count *
sizeof(struct fiemap_extent);
}
static inline unsigned int fiemap_size_to_count(__kernel_size_t array_size)
{
return (array_size - sizeof(struct fiemap)) /
sizeof(struct fiemap_extent);
}
#define FIEMAP_FLAG_DEVICE_ORDER 0x40000000 /* return device ordered mapping */
#ifdef FIEMAP_FLAGS_COMPAT
#undef FIEMAP_FLAGS_COMPAT
#endif
#define FIEMAP_EXTENT_NET 0x80000000 /* Data stored remotely.
* Sets NO_DIRECT flag
*/
#endif /* _LUSTRE_FIEMAP_H */