Message ID | 159847952392.2601708.833795605203708912.stgit@magnolia (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xfs: widen timestamps to deal with y2038 | expand |
On Wed, Aug 26, 2020 at 03:05:24PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > Refactor quota timestamp encoding and decoding into helper functions so > that we can add extra behavior in the next patch. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> > Reviewed-by: Amir Goldstein <amir73il@gmail.com> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
On 8/26/20 3:05 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > Refactor quota timestamp encoding and decoding into helper functions so > that we can add extra behavior in the next patch. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> > Reviewed-by: Amir Goldstein <amir73il@gmail.com> Looks fine Reviewed-by: Allison Collins <allison.henderson@oracle.com> > --- > fs/xfs/libxfs/xfs_dquot_buf.c | 18 ++++++++++++++++++ > fs/xfs/libxfs/xfs_quota_defs.h | 5 +++++ > fs/xfs/xfs_dquot.c | 12 ++++++------ > 3 files changed, 29 insertions(+), 6 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c > index 5a2db00b9d5f..cf85bad8a894 100644 > --- a/fs/xfs/libxfs/xfs_dquot_buf.c > +++ b/fs/xfs/libxfs/xfs_dquot_buf.c > @@ -288,3 +288,21 @@ const struct xfs_buf_ops xfs_dquot_buf_ra_ops = { > .verify_read = xfs_dquot_buf_readahead_verify, > .verify_write = xfs_dquot_buf_write_verify, > }; > + > +/* Convert an on-disk timer value into an incore timer value. */ > +time64_t > +xfs_dquot_from_disk_ts( > + struct xfs_disk_dquot *ddq, > + __be32 dtimer) > +{ > + return be32_to_cpu(dtimer); > +} > + > +/* Convert an incore timer value into an on-disk timer value. */ > +__be32 > +xfs_dquot_to_disk_ts( > + struct xfs_dquot *dqp, > + time64_t timer) > +{ > + return cpu_to_be32(timer); > +} > diff --git a/fs/xfs/libxfs/xfs_quota_defs.h b/fs/xfs/libxfs/xfs_quota_defs.h > index 076bdc7037ee..9a99910d857e 100644 > --- a/fs/xfs/libxfs/xfs_quota_defs.h > +++ b/fs/xfs/libxfs/xfs_quota_defs.h > @@ -143,4 +143,9 @@ extern int xfs_calc_dquots_per_chunk(unsigned int nbblks); > extern void xfs_dqblk_repair(struct xfs_mount *mp, struct xfs_dqblk *dqb, > xfs_dqid_t id, xfs_dqtype_t type); > > +struct xfs_dquot; > +time64_t xfs_dquot_from_disk_ts(struct xfs_disk_dquot *ddq, > + __be32 dtimer); > +__be32 xfs_dquot_to_disk_ts(struct xfs_dquot *ddq, time64_t timer); > + > #endif /* __XFS_QUOTA_H__ */ > diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c > index e63a933413a3..59c03e973741 100644 > --- a/fs/xfs/xfs_dquot.c > +++ b/fs/xfs/xfs_dquot.c > @@ -536,9 +536,9 @@ xfs_dquot_from_disk( > dqp->q_ino.warnings = be16_to_cpu(ddqp->d_iwarns); > dqp->q_rtb.warnings = be16_to_cpu(ddqp->d_rtbwarns); > > - dqp->q_blk.timer = be32_to_cpu(ddqp->d_btimer); > - dqp->q_ino.timer = be32_to_cpu(ddqp->d_itimer); > - dqp->q_rtb.timer = be32_to_cpu(ddqp->d_rtbtimer); > + dqp->q_blk.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_btimer); > + dqp->q_ino.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_itimer); > + dqp->q_rtb.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_rtbtimer); > > /* > * Reservation counters are defined as reservation plus current usage > @@ -581,9 +581,9 @@ xfs_dquot_to_disk( > ddqp->d_iwarns = cpu_to_be16(dqp->q_ino.warnings); > ddqp->d_rtbwarns = cpu_to_be16(dqp->q_rtb.warnings); > > - ddqp->d_btimer = cpu_to_be32(dqp->q_blk.timer); > - ddqp->d_itimer = cpu_to_be32(dqp->q_ino.timer); > - ddqp->d_rtbtimer = cpu_to_be32(dqp->q_rtb.timer); > + ddqp->d_btimer = xfs_dquot_to_disk_ts(dqp, dqp->q_blk.timer); > + ddqp->d_itimer = xfs_dquot_to_disk_ts(dqp, dqp->q_ino.timer); > + ddqp->d_rtbtimer = xfs_dquot_to_disk_ts(dqp, dqp->q_rtb.timer); > } > > /* Allocate and initialize the dquot buffer for this in-core dquot. */ >
diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c index 5a2db00b9d5f..cf85bad8a894 100644 --- a/fs/xfs/libxfs/xfs_dquot_buf.c +++ b/fs/xfs/libxfs/xfs_dquot_buf.c @@ -288,3 +288,21 @@ const struct xfs_buf_ops xfs_dquot_buf_ra_ops = { .verify_read = xfs_dquot_buf_readahead_verify, .verify_write = xfs_dquot_buf_write_verify, }; + +/* Convert an on-disk timer value into an incore timer value. */ +time64_t +xfs_dquot_from_disk_ts( + struct xfs_disk_dquot *ddq, + __be32 dtimer) +{ + return be32_to_cpu(dtimer); +} + +/* Convert an incore timer value into an on-disk timer value. */ +__be32 +xfs_dquot_to_disk_ts( + struct xfs_dquot *dqp, + time64_t timer) +{ + return cpu_to_be32(timer); +} diff --git a/fs/xfs/libxfs/xfs_quota_defs.h b/fs/xfs/libxfs/xfs_quota_defs.h index 076bdc7037ee..9a99910d857e 100644 --- a/fs/xfs/libxfs/xfs_quota_defs.h +++ b/fs/xfs/libxfs/xfs_quota_defs.h @@ -143,4 +143,9 @@ extern int xfs_calc_dquots_per_chunk(unsigned int nbblks); extern void xfs_dqblk_repair(struct xfs_mount *mp, struct xfs_dqblk *dqb, xfs_dqid_t id, xfs_dqtype_t type); +struct xfs_dquot; +time64_t xfs_dquot_from_disk_ts(struct xfs_disk_dquot *ddq, + __be32 dtimer); +__be32 xfs_dquot_to_disk_ts(struct xfs_dquot *ddq, time64_t timer); + #endif /* __XFS_QUOTA_H__ */ diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c index e63a933413a3..59c03e973741 100644 --- a/fs/xfs/xfs_dquot.c +++ b/fs/xfs/xfs_dquot.c @@ -536,9 +536,9 @@ xfs_dquot_from_disk( dqp->q_ino.warnings = be16_to_cpu(ddqp->d_iwarns); dqp->q_rtb.warnings = be16_to_cpu(ddqp->d_rtbwarns); - dqp->q_blk.timer = be32_to_cpu(ddqp->d_btimer); - dqp->q_ino.timer = be32_to_cpu(ddqp->d_itimer); - dqp->q_rtb.timer = be32_to_cpu(ddqp->d_rtbtimer); + dqp->q_blk.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_btimer); + dqp->q_ino.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_itimer); + dqp->q_rtb.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_rtbtimer); /* * Reservation counters are defined as reservation plus current usage @@ -581,9 +581,9 @@ xfs_dquot_to_disk( ddqp->d_iwarns = cpu_to_be16(dqp->q_ino.warnings); ddqp->d_rtbwarns = cpu_to_be16(dqp->q_rtb.warnings); - ddqp->d_btimer = cpu_to_be32(dqp->q_blk.timer); - ddqp->d_itimer = cpu_to_be32(dqp->q_ino.timer); - ddqp->d_rtbtimer = cpu_to_be32(dqp->q_rtb.timer); + ddqp->d_btimer = xfs_dquot_to_disk_ts(dqp, dqp->q_blk.timer); + ddqp->d_itimer = xfs_dquot_to_disk_ts(dqp, dqp->q_ino.timer); + ddqp->d_rtbtimer = xfs_dquot_to_disk_ts(dqp, dqp->q_rtb.timer); } /* Allocate and initialize the dquot buffer for this in-core dquot. */