Skip to content

Commit

Permalink
[PATCH] replace inode_update_time with file_update_time
Browse files Browse the repository at this point in the history
To allow various options to work per-mount instead of per-sb we need a
struct vfsmount when updating ctime and mtime.  This preparation patch
replaces the inode_update_time routine with a file_update_atime routine so
we can easily get at the vfsmount.  (and the file makes more sense in this
context anyway).  Also get rid of the unused second argument - we always
want to update the ctime when calling this routine.

Signed-off-by: Christoph Hellwig <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Anton Altaparmakov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Christoph Hellwig authored and Linus Torvalds committed Jan 10, 2006
1 parent 3542c6e commit 870f481
Show file tree
Hide file tree
Showing 11 changed files with 44 additions and 27 deletions.
27 changes: 15 additions & 12 deletions fs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1204,16 +1204,20 @@ void update_atime(struct inode *inode)
EXPORT_SYMBOL(update_atime);

/**
* inode_update_time - update mtime and ctime time
* @inode: inode accessed
* @ctime_too: update ctime too
* file_update_time - update mtime and ctime time
* @file: file accessed
*
* Update the mtime time on an inode and mark it for writeback.
* When ctime_too is specified update the ctime too.
* Update the mtime and ctime members of an inode and mark the inode
* for writeback. Note that this function is meant exclusively for
* usage in the file write path of filesystems, and filesystems may
* choose to explicitly ignore update via this function with the
* S_NOCTIME inode flag, e.g. for network filesystem where these
* timestamps are handled by the server.
*/

void inode_update_time(struct inode *inode, int ctime_too)
void file_update_time(struct file *file)
{
struct inode *inode = file->f_dentry->d_inode;
struct timespec now;
int sync_it = 0;

Expand All @@ -1227,16 +1231,15 @@ void inode_update_time(struct inode *inode, int ctime_too)
sync_it = 1;
inode->i_mtime = now;

if (ctime_too) {
if (!timespec_equal(&inode->i_ctime, &now))
sync_it = 1;
inode->i_ctime = now;
}
if (!timespec_equal(&inode->i_ctime, &now))
sync_it = 1;
inode->i_ctime = now;

if (sync_it)
mark_inode_dirty_sync(inode);
}

EXPORT_SYMBOL(inode_update_time);
EXPORT_SYMBOL(file_update_time);

int inode_needs_sync(struct inode *inode)
{
Expand Down
2 changes: 1 addition & 1 deletion fs/ncpfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ ncp_file_write(struct file *file, const char __user *buf, size_t count, loff_t *
}
vfree(bouncebuffer);

inode_update_time(inode, 1);
file_update_time(file);

*ppos = pos;

Expand Down
2 changes: 1 addition & 1 deletion fs/ntfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -2173,7 +2173,7 @@ static ssize_t ntfs_file_aio_write_nolock(struct kiocb *iocb,
err = remove_suid(file->f_dentry);
if (err)
goto out;
inode_update_time(inode, 1);
file_update_time(file);
written = ntfs_file_buffered_write(iocb, iov, nr_segs, pos, ppos,
count);
out:
Expand Down
20 changes: 19 additions & 1 deletion fs/ntfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2767,7 +2767,25 @@ int ntfs_truncate(struct inode *vi)
up_write(&ni->runlist.lock);
done:
/* Update the mtime and ctime on the base inode. */
inode_update_time(VFS_I(base_ni), 1);
/* normally ->truncate shouldn't update ctime or mtime,
* but ntfs did before so it got a copy & paste version
* of file_update_time. one day someone should fix this
* for real.
*/
if (!IS_NOCMTIME(VFS_I(base_ni)) && !IS_RDONLY(VFS_I(base_ni))) {
struct timespec now = current_fs_time(VFS_I(base_ni)->i_sb);
int sync_it = 0;

if (!timespec_equal(&VFS_I(base_ni)->i_mtime, &now) ||
!timespec_equal(&VFS_I(base_ni)->i_ctime, &now))
sync_it = 1;
VFS_I(base_ni)->i_mtime = now;
VFS_I(base_ni)->i_ctime = now;

if (sync_it)
mark_inode_dirty_sync(VFS_I(base_ni));
}

if (likely(!err)) {
NInoClearTruncateFailed(ni);
ntfs_debug("Done.");
Expand Down
8 changes: 2 additions & 6 deletions fs/ocfs2/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,8 @@ static struct vm_operations_struct ocfs2_file_vm_ops = {
.nopage = ocfs2_nopage,
};

int ocfs2_mmap(struct file *file,
struct vm_area_struct *vma)
int ocfs2_mmap(struct file *file, struct vm_area_struct *vma)
{
struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
struct inode *inode = mapping->host;

/* We don't want to support shared writable mappings yet. */
if (((vma->vm_flags & VM_SHARED) || (vma->vm_flags & VM_MAYSHARE))
&& ((vma->vm_flags & VM_WRITE) || (vma->vm_flags & VM_MAYWRITE))) {
Expand All @@ -95,7 +91,7 @@ int ocfs2_mmap(struct file *file,
return -EINVAL;
}

update_atime(inode);
file_accessed(file);
vma->vm_ops = &ocfs2_file_vm_ops;
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion fs/pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ pipe_writev(struct file *filp, const struct iovec *_iov,
kill_fasync(PIPE_FASYNC_READERS(*inode), SIGIO, POLL_IN);
}
if (ret > 0)
inode_update_time(inode, 1); /* mtime and ctime */
file_update_time(filp);
return ret;
}

Expand Down
2 changes: 1 addition & 1 deletion fs/reiserfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1360,7 +1360,7 @@ static ssize_t reiserfs_file_write(struct file *file, /* the file we are going t
if (res)
goto out;

inode_update_time(inode, 1); /* Both mtime and ctime */
file_update_time(file);

// Ok, we are done with all the checks.

Expand Down
2 changes: 1 addition & 1 deletion fs/xfs/linux-2.6/xfs_lrw.c
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ xfs_write(
}

if (likely(!(ioflags & IO_INVIS))) {
inode_update_time(inode, 1);
file_update_time(file);
xfs_ichgtime_fast(xip, inode,
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
}
Expand Down
2 changes: 1 addition & 1 deletion include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1716,7 +1716,7 @@ extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const vo
extern int inode_change_ok(struct inode *, struct iattr *);
extern int __must_check inode_setattr(struct inode *, struct iattr *);

extern void inode_update_time(struct inode *inode, int ctime_too);
extern void file_update_time(struct file *file);

static inline ino_t parent_ino(struct dentry *dentry)
{
Expand Down
2 changes: 1 addition & 1 deletion mm/filemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -2108,7 +2108,7 @@ __generic_file_aio_write_nolock(struct kiocb *iocb, const struct iovec *iov,
if (err)
goto out;

inode_update_time(inode, 1);
file_update_time(file);

/* coalesce the iovecs and go direct-to-BIO for O_DIRECT */
if (unlikely(file->f_flags & O_DIRECT)) {
Expand Down
2 changes: 1 addition & 1 deletion mm/filemap_xip.c
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ xip_file_write(struct file *filp, const char __user *buf, size_t len,
if (ret)
goto out_backing;

inode_update_time(inode, 1);
file_update_time(filp);

ret = __xip_file_write (filp, buf, count, pos, ppos);

Expand Down

0 comments on commit 870f481

Please sign in to comment.