inode_{add,sub}_bytes will be used by dquot code Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> --- fs/quota/dquot.c | 50 ++++++++++++++++++++++++++++++++++++++------------ fs/stat.c | 15 ++++++++++++--- include/linux/fs.h | 2 ++ 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index af3413e..b2cf04d 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -246,6 +246,7 @@ struct dqstats dqstats; EXPORT_SYMBOL(dqstats); static qsize_t inode_get_rsv_space(struct inode *inode); +static qsize_t __inode_get_rsv_space(struct inode *inode); static void __dquot_initialize(struct inode *inode, int type); static inline unsigned int @@ -1592,11 +1593,17 @@ void inode_add_rsv_space(struct inode *inode, qsize_t number) } EXPORT_SYMBOL(inode_add_rsv_space); -void inode_claim_rsv_space(struct inode *inode, qsize_t number) +inline void __inode_claim_rsv_space(struct inode *inode, qsize_t number) { - spin_lock(&inode->i_lock); *inode_reserved_space(inode) -= number; __inode_add_bytes(inode, number); + +} + +void inode_claim_rsv_space(struct inode *inode, qsize_t number) +{ + spin_lock(&inode->i_lock); + __inode_claim_rsv_space(inode, number); spin_unlock(&inode->i_lock); } EXPORT_SYMBOL(inode_claim_rsv_space); @@ -1609,33 +1616,52 @@ void inode_sub_rsv_space(struct inode *inode, qsize_t number) } EXPORT_SYMBOL(inode_sub_rsv_space); -static qsize_t inode_get_rsv_space(struct inode *inode) +static qsize_t __inode_get_rsv_space(struct inode *inode) { - qsize_t ret; - if (!dqctl(inode->i_sb)->dq_op->get_reserved_space) return 0; + return *inode_reserved_space(inode); +} + +static qsize_t inode_get_rsv_space(struct inode *inode) +{ + qsize_t ret; spin_lock(&inode->i_lock); - ret = *inode_reserved_space(inode); + ret = __inode_get_rsv_space(inode); spin_unlock(&inode->i_lock); return ret; } -static void inode_incr_space(struct inode *inode, qsize_t number, +static void __inode_incr_space(struct inode *inode, qsize_t number, int reserve) { if (reserve) - inode_add_rsv_space(inode, number); + *inode_reserved_space(inode) += number; else - inode_add_bytes(inode, number); + __inode_add_bytes(inode, number); } -static void inode_decr_space(struct inode *inode, qsize_t number, int reserve) +static void inode_incr_space(struct inode *inode, qsize_t number, + int reserve) +{ + spin_lock(&inode->i_lock); + __inode_incr_space(inode, number, reserve); + spin_unlock(&inode->i_lock); +} + + +static void __inode_decr_space(struct inode *inode, qsize_t number, int reserve) { if (reserve) - inode_sub_rsv_space(inode, number); + *inode_reserved_space(inode) -= number; else - inode_sub_bytes(inode, number); + __inode_sub_bytes(inode, number); +} +static void inode_decr_space(struct inode *inode, qsize_t number, int reserve) +{ + spin_lock(&inode->i_lock); + __inode_decr_space(inode, number, reserve); + spin_unlock(&inode->i_lock); } /* diff --git a/fs/stat.c b/fs/stat.c index 12e90e2..f2da983 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -429,9 +429,8 @@ void inode_add_bytes(struct inode *inode, loff_t bytes) EXPORT_SYMBOL(inode_add_bytes); -void inode_sub_bytes(struct inode *inode, loff_t bytes) +void __inode_sub_bytes(struct inode *inode, loff_t bytes) { - spin_lock(&inode->i_lock); inode->i_blocks -= bytes >> 9; bytes &= 511; if (inode->i_bytes < bytes) { @@ -439,17 +438,27 @@ void inode_sub_bytes(struct inode *inode, loff_t bytes) inode->i_bytes += 512; } inode->i_bytes -= bytes; +} + +void inode_sub_bytes(struct inode *inode, loff_t bytes) +{ + spin_lock(&inode->i_lock); + __inode_sub_bytes(inode, bytes); spin_unlock(&inode->i_lock); } EXPORT_SYMBOL(inode_sub_bytes); +inline loff_t __inode_get_bytes(struct inode *inode) +{ + return (((loff_t)inode->i_blocks) << 9) + inode->i_bytes; +} loff_t inode_get_bytes(struct inode *inode) { loff_t ret; spin_lock(&inode->i_lock); - ret = (((loff_t)inode->i_blocks) << 9) + inode->i_bytes; + ret = __inode_get_bytes(inode); spin_unlock(&inode->i_lock); return ret; } diff --git a/include/linux/fs.h b/include/linux/fs.h index e87694a..3ef2ec1 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2308,7 +2308,9 @@ extern void generic_fillattr(struct inode *, struct kstat *); extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); void __inode_add_bytes(struct inode *inode, loff_t bytes); void inode_add_bytes(struct inode *inode, loff_t bytes); +void __inode_sub_bytes(struct inode *inode, loff_t bytes); void inode_sub_bytes(struct inode *inode, loff_t bytes); +loff_t __inode_get_bytes(struct inode *inode); loff_t inode_get_bytes(struct inode *inode); void inode_set_bytes(struct inode *inode, loff_t bytes); -- 1.6.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html