1f08c3bdfSopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
2f08c3bdfSopenharmony_ci/*
3f08c3bdfSopenharmony_ci * Copyright (c) International Business Machines  Corp., 2007
4f08c3bdfSopenharmony_ci * Copyright (c) 2014 Fujitsu Ltd.
5f08c3bdfSopenharmony_ci */
6f08c3bdfSopenharmony_ci
7f08c3bdfSopenharmony_ci#ifndef LAPI_FALLOCATE_H__
8f08c3bdfSopenharmony_ci#define LAPI_FALLOCATE_H__
9f08c3bdfSopenharmony_ci
10f08c3bdfSopenharmony_ci#include <sys/types.h>
11f08c3bdfSopenharmony_ci#include <endian.h>
12f08c3bdfSopenharmony_ci#include "config.h"
13f08c3bdfSopenharmony_ci#include "lapi/abisize.h"
14f08c3bdfSopenharmony_ci#include "lapi/seek.h"
15f08c3bdfSopenharmony_ci#include "lapi/syscalls.h"
16f08c3bdfSopenharmony_ci
17f08c3bdfSopenharmony_ci#ifndef FALLOC_FL_KEEP_SIZE
18f08c3bdfSopenharmony_ci# define FALLOC_FL_KEEP_SIZE 0x01
19f08c3bdfSopenharmony_ci#endif
20f08c3bdfSopenharmony_ci
21f08c3bdfSopenharmony_ci#ifndef FALLOC_FL_PUNCH_HOLE
22f08c3bdfSopenharmony_ci# define FALLOC_FL_PUNCH_HOLE 0x02
23f08c3bdfSopenharmony_ci#endif
24f08c3bdfSopenharmony_ci
25f08c3bdfSopenharmony_ci#ifndef FALLOC_FL_COLLAPSE_RANGE
26f08c3bdfSopenharmony_ci# define FALLOC_FL_COLLAPSE_RANGE 0x08
27f08c3bdfSopenharmony_ci#endif
28f08c3bdfSopenharmony_ci
29f08c3bdfSopenharmony_ci#ifndef FALLOC_FL_ZERO_RANGE
30f08c3bdfSopenharmony_ci# define FALLOC_FL_ZERO_RANGE 0x10
31f08c3bdfSopenharmony_ci#endif
32f08c3bdfSopenharmony_ci
33f08c3bdfSopenharmony_ci#ifndef FALLOC_FL_INSERT_RANGE
34f08c3bdfSopenharmony_ci# define FALLOC_FL_INSERT_RANGE 0x20
35f08c3bdfSopenharmony_ci#endif
36f08c3bdfSopenharmony_ci
37f08c3bdfSopenharmony_ci#if !defined(HAVE_FALLOCATE)
38f08c3bdfSopenharmony_ci
39f08c3bdfSopenharmony_cistatic inline long fallocate(int fd, int mode, loff_t offset, loff_t len)
40f08c3bdfSopenharmony_ci{
41f08c3bdfSopenharmony_ci	/* Deal with 32bit ABIs that have 64bit syscalls. */
42f08c3bdfSopenharmony_ci# if LTP_USE_64_ABI
43f08c3bdfSopenharmony_ci	return tst_syscall(__NR_fallocate, fd, mode, offset, len);
44f08c3bdfSopenharmony_ci# else
45f08c3bdfSopenharmony_ci	return (long)tst_syscall(__NR_fallocate, fd, mode,
46f08c3bdfSopenharmony_ci				 __LONG_LONG_PAIR((off_t) (offset >> 32),
47f08c3bdfSopenharmony_ci						  (off_t) offset),
48f08c3bdfSopenharmony_ci				 __LONG_LONG_PAIR((off_t) (len >> 32),
49f08c3bdfSopenharmony_ci						  (off_t) len));
50f08c3bdfSopenharmony_ci# endif
51f08c3bdfSopenharmony_ci}
52f08c3bdfSopenharmony_ci#endif
53f08c3bdfSopenharmony_ci
54f08c3bdfSopenharmony_ci#endif /* LAPI_FALLOCATE_H__ */
55