Message ID | 20230807-mgctime-v7-6-d1dec143a704@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | fs: implement multigrain timestamps | expand |
On Mon 07-08-23 15:38:37, Jeff Layton wrote: > In later patches, we're going to drop the "now" parameter from the > update_time operation. Prepare ubifs for this, by having it use the new > inode_update_timestamps helper. > > Signed-off-by: Jeff Layton <jlayton@kernel.org> One comment below: > diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c > index df9086b19cd0..2d0178922e19 100644 > --- a/fs/ubifs/file.c > +++ b/fs/ubifs/file.c > @@ -1397,15 +1397,9 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time, > return err; > > mutex_lock(&ui->ui_mutex); > - if (flags & S_ATIME) > - inode->i_atime = *time; > - if (flags & S_CTIME) > - inode_set_ctime_to_ts(inode, *time); > - if (flags & S_MTIME) > - inode->i_mtime = *time; > - > - release = ui->dirty; > + inode_update_timestamps(inode, flags); > __mark_inode_dirty(inode, I_DIRTY_SYNC); > + release = ui->dirty; > mutex_unlock(&ui->ui_mutex); I think this is wrong. You need to keep sampling ui->dirty before calling __mark_inode_dirty(). Otherwise you could release budget for inode update you really need... > if (release) > ubifs_release_budget(c, &req); Honza
On Tue, Aug 08, 2023 at 11:37:01AM +0200, Jan Kara wrote: > On Mon 07-08-23 15:38:37, Jeff Layton wrote: > > In later patches, we're going to drop the "now" parameter from the > > update_time operation. Prepare ubifs for this, by having it use the new > > inode_update_timestamps helper. > > > > Signed-off-by: Jeff Layton <jlayton@kernel.org> > > One comment below: > > > diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c > > index df9086b19cd0..2d0178922e19 100644 > > --- a/fs/ubifs/file.c > > +++ b/fs/ubifs/file.c > > @@ -1397,15 +1397,9 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time, > > return err; > > > > mutex_lock(&ui->ui_mutex); > > - if (flags & S_ATIME) > > - inode->i_atime = *time; > > - if (flags & S_CTIME) > > - inode_set_ctime_to_ts(inode, *time); > > - if (flags & S_MTIME) > > - inode->i_mtime = *time; > > - > > - release = ui->dirty; > > + inode_update_timestamps(inode, flags); > > __mark_inode_dirty(inode, I_DIRTY_SYNC); > > + release = ui->dirty; > > mutex_unlock(&ui->ui_mutex); > > I think this is wrong. You need to keep sampling ui->dirty before calling > __mark_inode_dirty(). Otherwise you could release budget for inode update > you really need... Fixed in-tree.
On Wed 09-08-23 09:06:34, Christian Brauner wrote: > On Tue, Aug 08, 2023 at 11:37:01AM +0200, Jan Kara wrote: > > On Mon 07-08-23 15:38:37, Jeff Layton wrote: > > > In later patches, we're going to drop the "now" parameter from the > > > update_time operation. Prepare ubifs for this, by having it use the new > > > inode_update_timestamps helper. > > > > > > Signed-off-by: Jeff Layton <jlayton@kernel.org> > > > > One comment below: > > > > > diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c > > > index df9086b19cd0..2d0178922e19 100644 > > > --- a/fs/ubifs/file.c > > > +++ b/fs/ubifs/file.c > > > @@ -1397,15 +1397,9 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time, > > > return err; > > > > > > mutex_lock(&ui->ui_mutex); > > > - if (flags & S_ATIME) > > > - inode->i_atime = *time; > > > - if (flags & S_CTIME) > > > - inode_set_ctime_to_ts(inode, *time); > > > - if (flags & S_MTIME) > > > - inode->i_mtime = *time; > > > - > > > - release = ui->dirty; > > > + inode_update_timestamps(inode, flags); > > > __mark_inode_dirty(inode, I_DIRTY_SYNC); > > > + release = ui->dirty; > > > mutex_unlock(&ui->ui_mutex); > > > > I think this is wrong. You need to keep sampling ui->dirty before calling > > __mark_inode_dirty(). Otherwise you could release budget for inode update > > you really need... > > Fixed in-tree. Thanks. With that feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index df9086b19cd0..2d0178922e19 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c @@ -1397,15 +1397,9 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time, return err; mutex_lock(&ui->ui_mutex); - if (flags & S_ATIME) - inode->i_atime = *time; - if (flags & S_CTIME) - inode_set_ctime_to_ts(inode, *time); - if (flags & S_MTIME) - inode->i_mtime = *time; - - release = ui->dirty; + inode_update_timestamps(inode, flags); __mark_inode_dirty(inode, I_DIRTY_SYNC); + release = ui->dirty; mutex_unlock(&ui->ui_mutex); if (release) ubifs_release_budget(c, &req);
In later patches, we're going to drop the "now" parameter from the update_time operation. Prepare ubifs for this, by having it use the new inode_update_timestamps helper. Signed-off-by: Jeff Layton <jlayton@kernel.org> --- fs/ubifs/file.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-)