Browse Source

switch touch_atime to struct path

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
master
Al Viro 10 years ago
parent
commit
68ac1234fb
  1. 3
      fs/cachefiles/namei.c
  2. 9
      fs/ecryptfs/file.c
  3. 5
      fs/inode.c
  4. 2
      fs/namei.c
  5. 11
      fs/nfsd/vfs.c
  6. 2
      fs/stat.c
  7. 4
      include/linux/fs.h
  8. 4
      net/unix/af_unix.c

3
fs/cachefiles/namei.c

@ -646,7 +646,8 @@ lookup_again:
* (this is used to keep track of culling, and atimes are only
* updated by read, write and readdir but not lookup or
* open) */
touch_atime(cache->mnt, next);
path.dentry = next;
touch_atime(&path);
}
/* open a file interface onto a data file */

9
fs/ecryptfs/file.c

@ -48,8 +48,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
unsigned long nr_segs, loff_t pos)
{
ssize_t rc;
struct dentry *lower_dentry;
struct vfsmount *lower_vfsmount;
struct path lower;
struct file *file = iocb->ki_filp;
rc = generic_file_aio_read(iocb, iov, nr_segs, pos);
@ -60,9 +59,9 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
if (-EIOCBQUEUED == rc)
rc = wait_on_sync_kiocb(iocb);
if (rc >= 0) {
lower_dentry = ecryptfs_dentry_to_lower(file->f_path.dentry);
lower_vfsmount = ecryptfs_dentry_to_lower_mnt(file->f_path.dentry);
touch_atime(lower_vfsmount, lower_dentry);
lower.dentry = ecryptfs_dentry_to_lower(file->f_path.dentry);
lower.mnt = ecryptfs_dentry_to_lower_mnt(file->f_path.dentry);
touch_atime(&lower);
}
return rc;
}

5
fs/inode.c

@ -1499,9 +1499,10 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
* This function automatically handles read only file systems and media,
* as well as the "noatime" flag and inode specific "noatime" markers.
*/
void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
void touch_atime(struct path *path)
{
struct inode *inode = dentry->d_inode;
struct vfsmount *mnt = path->mnt;
struct inode *inode = path->dentry->d_inode;
struct timespec now;
if (inode->i_flags & S_NOATIME)

2
fs/namei.c

@ -642,7 +642,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
cond_resched();
current->total_link_count++;
touch_atime(link->mnt, dentry);
touch_atime(link);
nd_set_link(nd, NULL);
error = security_inode_follow_link(link->dentry, nd);

11
fs/nfsd/vfs.c

@ -1541,30 +1541,31 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
__be32
nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
{
struct dentry *dentry;
struct inode *inode;
mm_segment_t oldfs;
__be32 err;
int host_err;
struct path path;
err = fh_verify(rqstp, fhp, S_IFLNK, NFSD_MAY_NOP);
if (err)
goto out;
dentry = fhp->fh_dentry;
inode = dentry->d_inode;
path.mnt = fhp->fh_export->ex_path.mnt;
path.dentry = fhp->fh_dentry;
inode = path.dentry->d_inode;
err = nfserr_inval;
if (!inode->i_op->readlink)
goto out;
touch_atime(fhp->fh_export->ex_path.mnt, dentry);
touch_atime(&path);
/* N.B. Why does this call need a get_fs()??
* Remove the set_fs and watch the fireworks:-) --okir
*/
oldfs = get_fs(); set_fs(KERNEL_DS);
host_err = inode->i_op->readlink(dentry, buf, *lenp);
host_err = inode->i_op->readlink(path.dentry, buf, *lenp);
set_fs(oldfs);
if (host_err < 0)

2
fs/stat.c

@ -307,7 +307,7 @@ SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname,
if (inode->i_op->readlink) {
error = security_inode_readlink(path.dentry);
if (!error) {
touch_atime(path.mnt, path.dentry);
touch_atime(&path);
error = inode->i_op->readlink(path.dentry,
buf, bufsiz);
}

4
include/linux/fs.h

@ -1812,11 +1812,11 @@ static inline void inode_inc_iversion(struct inode *inode)
spin_unlock(&inode->i_lock);
}
extern void touch_atime(struct vfsmount *mnt, struct dentry *dentry);
extern void touch_atime(struct path *);
static inline void file_accessed(struct file *file)
{
if (!(file->f_flags & O_NOATIME))
touch_atime(file->f_path.mnt, file->f_path.dentry);
touch_atime(&file->f_path);
}
int sync_inode(struct inode *inode, struct writeback_control *wbc);

4
net/unix/af_unix.c

@ -771,7 +771,7 @@ static struct sock *unix_find_other(struct net *net,
goto put_fail;
if (u->sk_type == type)
touch_atime(path.mnt, path.dentry);
touch_atime(&path);
path_put(&path);
@ -787,7 +787,7 @@ static struct sock *unix_find_other(struct net *net,
struct dentry *dentry;
dentry = unix_sk(u)->path.dentry;
if (dentry)
touch_atime(unix_sk(u)->path.mnt, dentry);
touch_atime(&unix_sk(u)->path);
} else
goto fail;
}

Loading…
Cancel
Save