beegfs/client_module/source/common/storage/StorageDefinitions.h
2025-08-10 01:34:16 +02:00

99 lines
3.6 KiB
C

#ifndef STORAGEDEFINITIONS_H_
#define STORAGEDEFINITIONS_H_
/*
* Remember to keep these definitions in sync with StorageDefinitions.h of fhgfs_common!!!
*/
#include <common/Common.h>
// open rw flags
#define OPENFILE_ACCESS_READ 1
#define OPENFILE_ACCESS_WRITE 2
#define OPENFILE_ACCESS_READWRITE 4
// open extra flags
#define OPENFILE_ACCESS_APPEND 8
#define OPENFILE_ACCESS_TRUNC 16
#define OPENFILE_ACCESS_DIRECT 32 /* for direct IO */
#define OPENFILE_ACCESS_SYNC 64 /* for sync'ed IO */
// open masks
#define OPENFILE_ACCESS_MASK_RW \
(OPENFILE_ACCESS_READ | OPENFILE_ACCESS_WRITE | OPENFILE_ACCESS_READWRITE)
#define OPENFILE_ACCESS_MASK_EXTRA (~OPENFILE_ACCESS_MASK_RW)
// set attribs flags
#define SETATTR_CHANGE_MODE 1
#define SETATTR_CHANGE_USERID 2
#define SETATTR_CHANGE_GROUPID 4
#define SETATTR_CHANGE_MODIFICATIONTIME 8
#define SETATTR_CHANGE_LASTACCESSTIME 16
// entry and append lock type flags
#define ENTRYLOCKTYPE_UNLOCK 1
#define ENTRYLOCKTYPE_EXCLUSIVE 2
#define ENTRYLOCKTYPE_SHARED 4
#define ENTRYLOCKTYPE_NOWAIT 8 /* operation may not block if lock not available */
#define ENTRYLOCKTYPE_CANCEL 16 /* cancel all granted and pending locks for given handle
(normally on client file close) */
// entry lock mask
#define ENTRYLOCKTYPE_LOCKOPS_ADD (ENTRYLOCKTYPE_EXCLUSIVE | ENTRYLOCKTYPE_SHARED)
#define ENTRYLOCKTYPE_LOCKOPS_REMOVE (ENTRYLOCKTYPE_UNLOCK | ENTRYLOCKTYPE_CANCEL)
struct SettableFileAttribs;
typedef struct SettableFileAttribs SettableFileAttribs;
enum DirEntryType
{ // don't use these directly, use the DirEntryType_IS...() macros below to check entry types
DirEntryType_INVALID = 0, DirEntryType_DIRECTORY = 1, DirEntryType_REGULARFILE = 2,
DirEntryType_SYMLINK = 3, DirEntryType_BLOCKDEV = 4, DirEntryType_CHARDEV = 5,
DirEntryType_FIFO = 6, DirEntryType_SOCKET = 7
};
typedef enum DirEntryType DirEntryType;
#define DirEntryType_ISVALID(dirEntryType) (dirEntryType != DirEntryType_INVALID)
#define DirEntryType_ISDIR(dirEntryType) (dirEntryType == DirEntryType_DIRECTORY)
#define DirEntryType_ISREGULARFILE(dirEntryType) (dirEntryType == DirEntryType_REGULARFILE)
#define DirEntryType_ISSYMLINK(dirEntryType) (dirEntryType == DirEntryType_SYMLINK)
#define DirEntryType_ISBLOCKDEV(dirEntryType) (dirEntryType == DirEntryType_BLOCKDEV)
#define DirEntryType_ISCHARDEV(dirEntryType) (dirEntryType == DirEntryType_CHARDEV)
#define DirEntryType_ISFIFO(dirEntryType) (dirEntryType == DirEntryType_FIFO)
#define DirEntryType_ISSOCKET(dirEntryType) (dirEntryType == DirEntryType_SOCKET)
/* @return true for any kind of file, including symlinks and special files */
#define DirEntryType_ISFILE(dirEntryType) ( (dirEntryType >= 2) && (dirEntryType <= 7) )
// hint (but not strict enforcement) that the inode is inlined into the dentry
#define STATFLAG_HINT_INLINE 1
enum EntryLockRequestType
{EntryLockRequestType_ENTRYFLOCK=0, EntryLockRequestType_RANGEFLOCK=1,
EntryLockRequestType_ENTRYCOHERENCE=2, EntryLockRequestType_RANGECOHERENCE=3};
typedef enum EntryLockRequestType EntryLockRequestType;
/**
* Note: Typically used in combination with a value of SETATTR_CHANGE_...-Flags to determine which
* of the fields are actually used
*/
struct SettableFileAttribs
{
int mode;
unsigned userID;
unsigned groupID;
int64_t modificationTimeSecs; // unix mtime
int64_t lastAccessTimeSecs; // unix atime
};
#endif /*STORAGEDEFINITIONS_H_*/