Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 870f4817 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Linus Torvalds
Browse files

[PATCH] replace inode_update_time with file_update_time



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: default avatarChristoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@ftp.linux.org.uk>
Cc: Anton Altaparmakov <aia21@cantab.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3542c6e1
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -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;

@@ -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 (sync_it)
		mark_inode_dirty_sync(inode);
}

EXPORT_SYMBOL(inode_update_time);
EXPORT_SYMBOL(file_update_time);

int inode_needs_sync(struct inode *inode)
{
+1 −1
Original line number Diff line number Diff line
@@ -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;

+1 −1
Original line number Diff line number Diff line
@@ -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:
+19 −1
Original line number Diff line number Diff line
@@ -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.");
+2 −6
Original line number Diff line number Diff line
@@ -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))) {
@@ -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;
}
Loading