]> git.proxmox.com Git - ceph.git/blob - ceph/src/include/cephfs/ceph_statx.h
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / include / cephfs / ceph_statx.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3 /*
4 * scalable distributed file system
5 *
6 * Copyright (C) Jeff Layton <jlayton@redhat.com>
7 *
8 * Heavily borrowed from David Howells' draft statx patchset.
9 *
10 * This is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License version 2.1, as published by the Free Software
13 * Foundation. See file COPYING.
14 *
15 */
16
17 #ifndef CEPH_CEPH_STATX_H
18 #define CEPH_CEPH_STATX_H
19 #include <stdint.h>
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24
25 /*
26 * Since the xstat patches are still a work in progress, we borrow its data
27 * structures and #defines to implement ceph_getattrx. Once the xstat stuff
28 * has been merged we should drop this and switch over to using that instead.
29 */
30 struct ceph_statx {
31 uint32_t stx_mask;
32 uint32_t stx_blksize;
33 uint32_t stx_nlink;
34 uint32_t stx_uid;
35 uint32_t stx_gid;
36 uint16_t stx_mode;
37 uint64_t stx_ino;
38 uint64_t stx_size;
39 uint64_t stx_blocks;
40 dev_t stx_dev;
41 dev_t stx_rdev;
42 struct timespec stx_atime;
43 struct timespec stx_ctime;
44 struct timespec stx_mtime;
45 struct timespec stx_btime;
46 uint64_t stx_version;
47 };
48
49 #define CEPH_STATX_MODE 0x00000001U /* Want/got stx_mode */
50 #define CEPH_STATX_NLINK 0x00000002U /* Want/got stx_nlink */
51 #define CEPH_STATX_UID 0x00000004U /* Want/got stx_uid */
52 #define CEPH_STATX_GID 0x00000008U /* Want/got stx_gid */
53 #define CEPH_STATX_RDEV 0x00000010U /* Want/got stx_rdev */
54 #define CEPH_STATX_ATIME 0x00000020U /* Want/got stx_atime */
55 #define CEPH_STATX_MTIME 0x00000040U /* Want/got stx_mtime */
56 #define CEPH_STATX_CTIME 0x00000080U /* Want/got stx_ctime */
57 #define CEPH_STATX_INO 0x00000100U /* Want/got stx_ino */
58 #define CEPH_STATX_SIZE 0x00000200U /* Want/got stx_size */
59 #define CEPH_STATX_BLOCKS 0x00000400U /* Want/got stx_blocks */
60 #define CEPH_STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */
61 #define CEPH_STATX_BTIME 0x00000800U /* Want/got stx_btime */
62 #define CEPH_STATX_VERSION 0x00001000U /* Want/got stx_version */
63 #define CEPH_STATX_ALL_STATS 0x00001fffU /* All supported stats */
64
65 /*
66 * Compatability macros until these defines make their way into glibc
67 */
68 #ifndef AT_NO_ATTR_SYNC
69 #define AT_NO_ATTR_SYNC 0x4000 /* Don't sync attributes with the server */
70 #endif
71
72 /*
73 * The statx interfaces only allow these flags. In order to allow us to add
74 * others in the future, we disallow setting any that aren't recognized.
75 */
76 #define CEPH_REQ_FLAG_MASK (AT_SYMLINK_NOFOLLOW|AT_NO_ATTR_SYNC)
77
78 #ifdef __cplusplus
79 }
80 #endif
81
82 #endif /* CEPH_STATX_H */
83