From 6931cb7b0e4423361efa4c26de9dd8888d4a6d3e Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Fri, 14 Jun 2024 15:54:12 -0700 Subject: [PATCH] Add scoutfs_inode_[gs]et_flags Add functions for getting and setting our private inode flags. Signed-off-by: Zach Brown --- kmod/src/inode.c | 26 ++++++++++++++++++++++++++ kmod/src/inode.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/kmod/src/inode.c b/kmod/src/inode.c index db76f798..11c9264e 100644 --- a/kmod/src/inode.c +++ b/kmod/src/inode.c @@ -686,6 +686,32 @@ void scoutfs_inode_get_onoff(struct inode *inode, s64 *on, s64 *off) } while (read_seqretry(&si->seqlock, seq)); } +/* + * Get our private scoutfs inode flags, not the vfs i_flags. + */ +u32 scoutfs_inode_get_flags(struct inode *inode) +{ + struct scoutfs_inode_info *si = SCOUTFS_I(inode); + unsigned seq; + u32 flags; + + do { + seq = read_seqbegin(&si->seqlock); + flags = si->flags; + } while (read_seqretry(&si->seqlock, seq)); + + return flags; +} + +void scoutfs_inode_set_flags(struct inode *inode, u32 and, u32 or) +{ + struct scoutfs_inode_info *si = SCOUTFS_I(inode); + + write_seqlock(&si->seqlock); + si->flags = (si->flags & and) | or; + write_sequnlock(&si->seqlock); +} + static int scoutfs_iget_test(struct inode *inode, void *arg) { struct scoutfs_inode_info *si = SCOUTFS_I(inode); diff --git a/kmod/src/inode.h b/kmod/src/inode.h index dd8e33f3..b7d347a3 100644 --- a/kmod/src/inode.h +++ b/kmod/src/inode.h @@ -120,6 +120,8 @@ u64 scoutfs_inode_meta_seq(struct inode *inode); u64 scoutfs_inode_data_seq(struct inode *inode); u64 scoutfs_inode_data_version(struct inode *inode); void scoutfs_inode_get_onoff(struct inode *inode, s64 *on, s64 *off); +u32 scoutfs_inode_get_flags(struct inode *inode); +void scoutfs_inode_set_flags(struct inode *inode, u32 and, u32 or); int scoutfs_complete_truncate(struct inode *inode, struct scoutfs_lock *lock); int scoutfs_inode_refresh(struct inode *inode, struct scoutfs_lock *lock);