mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 05:11:48 +00:00
switch touch_atime to struct path
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
40ffe67d2e
commit
68ac1234fb
@ -646,7 +646,8 @@ lookup_again:
|
|||||||
* (this is used to keep track of culling, and atimes are only
|
* (this is used to keep track of culling, and atimes are only
|
||||||
* updated by read, write and readdir but not lookup or
|
* updated by read, write and readdir but not lookup or
|
||||||
* open) */
|
* open) */
|
||||||
touch_atime(cache->mnt, next);
|
path.dentry = next;
|
||||||
|
touch_atime(&path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* open a file interface onto a data file */
|
/* open a file interface onto a data file */
|
||||||
|
@ -48,8 +48,7 @@ static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb,
|
|||||||
unsigned long nr_segs, loff_t pos)
|
unsigned long nr_segs, loff_t pos)
|
||||||
{
|
{
|
||||||
ssize_t rc;
|
ssize_t rc;
|
||||||
struct dentry *lower_dentry;
|
struct path lower;
|
||||||
struct vfsmount *lower_vfsmount;
|
|
||||||
struct file *file = iocb->ki_filp;
|
struct file *file = iocb->ki_filp;
|
||||||
|
|
||||||
rc = generic_file_aio_read(iocb, iov, nr_segs, pos);
|
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)
|
if (-EIOCBQUEUED == rc)
|
||||||
rc = wait_on_sync_kiocb(iocb);
|
rc = wait_on_sync_kiocb(iocb);
|
||||||
if (rc >= 0) {
|
if (rc >= 0) {
|
||||||
lower_dentry = ecryptfs_dentry_to_lower(file->f_path.dentry);
|
lower.dentry = ecryptfs_dentry_to_lower(file->f_path.dentry);
|
||||||
lower_vfsmount = ecryptfs_dentry_to_lower_mnt(file->f_path.dentry);
|
lower.mnt = ecryptfs_dentry_to_lower_mnt(file->f_path.dentry);
|
||||||
touch_atime(lower_vfsmount, lower_dentry);
|
touch_atime(&lower);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
* This function automatically handles read only file systems and media,
|
||||||
* as well as the "noatime" flag and inode specific "noatime" markers.
|
* 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;
|
struct timespec now;
|
||||||
|
|
||||||
if (inode->i_flags & S_NOATIME)
|
if (inode->i_flags & S_NOATIME)
|
||||||
|
@ -642,7 +642,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
|
|||||||
cond_resched();
|
cond_resched();
|
||||||
current->total_link_count++;
|
current->total_link_count++;
|
||||||
|
|
||||||
touch_atime(link->mnt, dentry);
|
touch_atime(link);
|
||||||
nd_set_link(nd, NULL);
|
nd_set_link(nd, NULL);
|
||||||
|
|
||||||
error = security_inode_follow_link(link->dentry, nd);
|
error = security_inode_follow_link(link->dentry, nd);
|
||||||
|
@ -1541,30 +1541,31 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
|||||||
__be32
|
__be32
|
||||||
nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
|
nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
|
||||||
{
|
{
|
||||||
struct dentry *dentry;
|
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
mm_segment_t oldfs;
|
mm_segment_t oldfs;
|
||||||
__be32 err;
|
__be32 err;
|
||||||
int host_err;
|
int host_err;
|
||||||
|
struct path path;
|
||||||
|
|
||||||
err = fh_verify(rqstp, fhp, S_IFLNK, NFSD_MAY_NOP);
|
err = fh_verify(rqstp, fhp, S_IFLNK, NFSD_MAY_NOP);
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
dentry = fhp->fh_dentry;
|
path.mnt = fhp->fh_export->ex_path.mnt;
|
||||||
inode = dentry->d_inode;
|
path.dentry = fhp->fh_dentry;
|
||||||
|
inode = path.dentry->d_inode;
|
||||||
|
|
||||||
err = nfserr_inval;
|
err = nfserr_inval;
|
||||||
if (!inode->i_op->readlink)
|
if (!inode->i_op->readlink)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
touch_atime(fhp->fh_export->ex_path.mnt, dentry);
|
touch_atime(&path);
|
||||||
/* N.B. Why does this call need a get_fs()??
|
/* N.B. Why does this call need a get_fs()??
|
||||||
* Remove the set_fs and watch the fireworks:-) --okir
|
* Remove the set_fs and watch the fireworks:-) --okir
|
||||||
*/
|
*/
|
||||||
|
|
||||||
oldfs = get_fs(); set_fs(KERNEL_DS);
|
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);
|
set_fs(oldfs);
|
||||||
|
|
||||||
if (host_err < 0)
|
if (host_err < 0)
|
||||||
|
@ -307,7 +307,7 @@ SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname,
|
|||||||
if (inode->i_op->readlink) {
|
if (inode->i_op->readlink) {
|
||||||
error = security_inode_readlink(path.dentry);
|
error = security_inode_readlink(path.dentry);
|
||||||
if (!error) {
|
if (!error) {
|
||||||
touch_atime(path.mnt, path.dentry);
|
touch_atime(&path);
|
||||||
error = inode->i_op->readlink(path.dentry,
|
error = inode->i_op->readlink(path.dentry,
|
||||||
buf, bufsiz);
|
buf, bufsiz);
|
||||||
}
|
}
|
||||||
|
@ -1812,11 +1812,11 @@ static inline void inode_inc_iversion(struct inode *inode)
|
|||||||
spin_unlock(&inode->i_lock);
|
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)
|
static inline void file_accessed(struct file *file)
|
||||||
{
|
{
|
||||||
if (!(file->f_flags & O_NOATIME))
|
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);
|
int sync_inode(struct inode *inode, struct writeback_control *wbc);
|
||||||
|
@ -771,7 +771,7 @@ static struct sock *unix_find_other(struct net *net,
|
|||||||
goto put_fail;
|
goto put_fail;
|
||||||
|
|
||||||
if (u->sk_type == type)
|
if (u->sk_type == type)
|
||||||
touch_atime(path.mnt, path.dentry);
|
touch_atime(&path);
|
||||||
|
|
||||||
path_put(&path);
|
path_put(&path);
|
||||||
|
|
||||||
@ -787,7 +787,7 @@ static struct sock *unix_find_other(struct net *net,
|
|||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
dentry = unix_sk(u)->path.dentry;
|
dentry = unix_sk(u)->path.dentry;
|
||||||
if (dentry)
|
if (dentry)
|
||||||
touch_atime(unix_sk(u)->path.mnt, dentry);
|
touch_atime(&unix_sk(u)->path);
|
||||||
} else
|
} else
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user