add inode_attr_x interface for retention and projectid

This commit is contained in:
Ben McClelland
2024-06-23 09:35:09 -07:00
parent 3c0a420788
commit c2e96b492d
3 changed files with 81 additions and 8 deletions

View File

@@ -71,6 +71,7 @@ package scoutfs
// typedef struct scoutfs_ioctl_get_quota_rules scoutfs_ioctl_get_quota_rules_t; // typedef struct scoutfs_ioctl_get_quota_rules scoutfs_ioctl_get_quota_rules_t;
// typedef struct scoutfs_ioctl_xattr_index_entry scoutfs_ioctl_xattr_index_entry_t; // typedef struct scoutfs_ioctl_xattr_index_entry scoutfs_ioctl_xattr_index_entry_t;
// typedef struct scoutfs_ioctl_read_xattr_index scoutfs_ioctl_read_xattr_index_t; // typedef struct scoutfs_ioctl_read_xattr_index scoutfs_ioctl_read_xattr_index_t;
// typedef struct scoutfs_ioctl_inode_attr_x scoutfs_ioctl_inode_attr_x_t;
import "C" import "C"
const IOCQUERYINODES = C.SCOUTFS_IOC_WALK_INODES const IOCQUERYINODES = C.SCOUTFS_IOC_WALK_INODES
@@ -91,8 +92,6 @@ const IOCGETREFERRINGENTRIES = C.SCOUTFS_IOC_GET_REFERRING_ENTRIES
const IOCGETQUOTARULES = C.SCOUTFS_IOC_GET_QUOTA_RULES const IOCGETQUOTARULES = C.SCOUTFS_IOC_GET_QUOTA_RULES
const IOCDELQUOTARULE = C.SCOUTFS_IOC_DEL_QUOTA_RULE const IOCDELQUOTARULE = C.SCOUTFS_IOC_DEL_QUOTA_RULE
const IOCADDQUOTARULE = C.SCOUTFS_IOC_ADD_QUOTA_RULE const IOCADDQUOTARULE = C.SCOUTFS_IOC_ADD_QUOTA_RULE
const IOCGETPROJECTID = C.SCOUTFS_IOC_GET_PROJECT_ID
const IOCSETPROJECTID = C.SCOUTFS_IOC_SET_PROJECT_ID
const IOCREADXATTRINDEX = C.SCOUTFS_IOC_READ_XATTR_INDEX const IOCREADXATTRINDEX = C.SCOUTFS_IOC_READ_XATTR_INDEX
const QUERYINODESMETASEQ = C.SCOUTFS_IOC_WALK_INODES_META_SEQ const QUERYINODESMETASEQ = C.SCOUTFS_IOC_WALK_INODES_META_SEQ
@@ -108,6 +107,22 @@ const MBSTAGEFLG = C.SCOUTFS_IOC_MB_STAGE
const DIRENTFLAGLAST = C.SCOUTFS_IOCTL_DIRENT_FLAG_LAST const DIRENTFLAGLAST = C.SCOUTFS_IOCTL_DIRENT_FLAG_LAST
const IOCIAXFSIZEOFFLINE = C.SCOUTFS_IOC_IAX_F_SIZE_OFFLINE
const IOCIAXBRETENTION = C.SCOUTFS_IOC_IAX_B_RETENTION
const IOCIAXMETASEQ = C.SCOUTFS_IOC_IAX_META_SEQ
const IOCIAXDATASEQ = C.SCOUTFS_IOC_IAX_DATA_SEQ
const IOCIAXDATAVERSION = C.SCOUTFS_IOC_IAX_DATA_VERSION
const IOCIAXONLINEBLOCKS = C.SCOUTFS_IOC_IAX_ONLINE_BLOCKS
const IOCIAXOFFLINEBLOCKS = C.SCOUTFS_IOC_IAX_OFFLINE_BLOCKS
const IOCIAXCTIME = C.SCOUTFS_IOC_IAX_CTIME
const IOCIAXCRTIME = C.SCOUTFS_IOC_IAX_CRTIME
const IOCIAXSIZE = C.SCOUTFS_IOC_IAX_SIZE
const IOCIAXRETENTION = C.SCOUTFS_IOC_IAX_RETENTION
const IOCIAXPROJECTID = C.SCOUTFS_IOC_IAX_PROJECT_ID
const IOCIAXBITS = C.SCOUTFS_IOC_IAX__BITS
const IOCGETATTRX = C.SCOUTFS_IOC_GET_ATTR_X
const IOCSETATTRX = C.SCOUTFS_IOC_SET_ATTR_X
type InodesEntry C.scoutfs_ioctl_walk_inodes_entry_t type InodesEntry C.scoutfs_ioctl_walk_inodes_entry_t
type queryInodes C.scoutfs_ioctl_walk_inodes_t type queryInodes C.scoutfs_ioctl_walk_inodes_t
type inoPath C.scoutfs_ioctl_ino_path_t type inoPath C.scoutfs_ioctl_ino_path_t
@@ -132,6 +147,7 @@ type quotaRule C.scoutfs_ioctl_quota_rule_t
type getQuotaRules C.scoutfs_ioctl_get_quota_rules_t type getQuotaRules C.scoutfs_ioctl_get_quota_rules_t
type indexEntry C.scoutfs_ioctl_xattr_index_entry_t type indexEntry C.scoutfs_ioctl_xattr_index_entry_t
type readXattrIndex C.scoutfs_ioctl_read_xattr_index_t type readXattrIndex C.scoutfs_ioctl_read_xattr_index_t
type inodeAttrX C.scoutfs_ioctl_inode_attr_x_t
const sizeofstatfsMore = C.sizeof_scoutfs_ioctl_statfs_more_t const sizeofstatfsMore = C.sizeof_scoutfs_ioctl_statfs_more_t
const sizeofxattrTotal = C.sizeof_scoutfs_ioctl_xattr_total_t const sizeofxattrTotal = C.sizeof_scoutfs_ioctl_xattr_total_t

View File

@@ -1653,16 +1653,43 @@ func quotaAdd(f *os.File, q QuotaRule) error {
} }
func GetProjectID(f *os.File) (uint64, error) { func GetProjectID(f *os.File) (uint64, error) {
var projectid uint64 var iax inodeAttrX
_, err := scoutfsctl(f, IOCGETPROJECTID, unsafe.Pointer(&projectid)) iax.X_mask = IOCIAXPROJECTID
return projectid, err _, err := scoutfsctl(f, IOCGETATTRX, unsafe.Pointer(&iax))
return iax.Project_id, err
} }
func SetProjectID(f *os.File, projectid uint64) error { func SetProjectID(f *os.File, projectid uint64) error {
_, err := scoutfsctl(f, IOCSETPROJECTID, unsafe.Pointer(&projectid)) var iax inodeAttrX
iax.X_mask = IOCIAXPROJECTID
iax.Project_id = projectid
_, err := scoutfsctl(f, IOCSETATTRX, unsafe.Pointer(&iax))
return err return err
} }
func SetRetention(f *os.File) error {
var iax inodeAttrX
iax.X_mask = IOCIAXRETENTION
iax.Bits = IOCIAXBRETENTION
_, err := scoutfsctl(f, IOCSETATTRX, unsafe.Pointer(&iax))
return err
}
func ClearRetention(f *os.File) error {
var iax inodeAttrX
iax.X_mask = IOCIAXRETENTION
_, err := scoutfsctl(f, IOCSETATTRX, unsafe.Pointer(&iax))
return err
}
func GetRetention(f *os.File) (bool, error) {
var iax inodeAttrX
iax.X_mask = IOCIAXRETENTION
_, err := scoutfsctl(f, IOCGETATTRX, unsafe.Pointer(&iax))
return ((iax.X_mask&IOCIAXRETENTION == IOCIAXRETENTION) &&
(iax.Bits&IOCIAXBRETENTION == IOCIAXBRETENTION)), err
}
type IndexSearch struct { type IndexSearch struct {
// file handle for ioctls // file handle for ioctls
f *os.File f *os.File

View File

@@ -21,8 +21,6 @@ const IOCGETREFERRINGENTRIES = 0x4028e811
const IOCGETQUOTARULES = 0x8020e814 const IOCGETQUOTARULES = 0x8020e814
const IOCDELQUOTARULE = 0x4030e816 const IOCDELQUOTARULE = 0x4030e816
const IOCADDQUOTARULE = 0x4030e815 const IOCADDQUOTARULE = 0x4030e815
const IOCGETPROJECTID = 0x8008e812
const IOCSETPROJECTID = 0x4008e813
const IOCREADXATTRINDEX = 0x8048e817 const IOCREADXATTRINDEX = 0x8048e817
const QUERYINODESMETASEQ = 0x0 const QUERYINODESMETASEQ = 0x0
@@ -38,6 +36,22 @@ const MBSTAGEFLG = 0x1
const DIRENTFLAGLAST = 0x1 const DIRENTFLAGLAST = 0x1
const IOCIAXFSIZEOFFLINE = 0x1
const IOCIAXBRETENTION = 0x1
const IOCIAXMETASEQ = 0x1
const IOCIAXDATASEQ = 0x2
const IOCIAXDATAVERSION = 0x4
const IOCIAXONLINEBLOCKS = 0x8
const IOCIAXOFFLINEBLOCKS = 0x10
const IOCIAXCTIME = 0x20
const IOCIAXCRTIME = 0x40
const IOCIAXSIZE = 0x80
const IOCIAXRETENTION = 0x100
const IOCIAXPROJECTID = 0x200
const IOCIAXBITS = 0x100
const IOCGETATTRX = 0x4068e812
const IOCSETATTRX = 0x4068e813
type InodesEntry struct { type InodesEntry struct {
Major uint64 Major uint64
Ino uint64 Ino uint64
@@ -210,6 +224,22 @@ type readXattrIndex struct {
Ptr uint64 Ptr uint64
Nr uint64 Nr uint64
} }
type inodeAttrX struct {
X_mask uint64
X_flags uint64
Meta_seq uint64
Data_seq uint64
Data_version uint64
Online_blocks uint64
Offline_blocks uint64
Ctime_sec uint64
Ctime_nsec uint32
Crtime_nsec uint32
Crtime_sec uint64
Size uint64
Bits uint64
Project_id uint64
}
const sizeofstatfsMore = 0x30 const sizeofstatfsMore = 0x30
const sizeofxattrTotal = 0x28 const sizeofxattrTotal = 0x28