mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull misc vfs updates from Al Viro: "Assorted stuff, with no common topic whatsoever..." * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: libfs: document simple_get_link() Documentation/filesystems/Locking: fix ->get_link() prototype Documentation/filesystems/vfs.txt: document how ->i_link works Documentation/filesystems/vfs.txt: remove bogus "Last updated" date fs: use timespec64 in relatime_need_update fs/block_dev.c: remove unused include
This commit is contained in:
commit
149e703cb8
5 changed files with 23 additions and 6 deletions
|
@ -52,7 +52,7 @@ prototypes:
|
||||||
int (*rename) (struct inode *, struct dentry *,
|
int (*rename) (struct inode *, struct dentry *,
|
||||||
struct inode *, struct dentry *, unsigned int);
|
struct inode *, struct dentry *, unsigned int);
|
||||||
int (*readlink) (struct dentry *, char __user *,int);
|
int (*readlink) (struct dentry *, char __user *,int);
|
||||||
const char *(*get_link) (struct dentry *, struct inode *, void **);
|
const char *(*get_link) (struct dentry *, struct inode *, struct delayed_call *);
|
||||||
void (*truncate) (struct inode *);
|
void (*truncate) (struct inode *);
|
||||||
int (*permission) (struct inode *, int, unsigned int);
|
int (*permission) (struct inode *, int, unsigned int);
|
||||||
int (*get_acl)(struct inode *, int);
|
int (*get_acl)(struct inode *, int);
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
Original author: Richard Gooch <rgooch@atnf.csiro.au>
|
Original author: Richard Gooch <rgooch@atnf.csiro.au>
|
||||||
|
|
||||||
Last updated on June 24, 2007.
|
|
||||||
|
|
||||||
Copyright (C) 1999 Richard Gooch
|
Copyright (C) 1999 Richard Gooch
|
||||||
Copyright (C) 2005 Pekka Enberg
|
Copyright (C) 2005 Pekka Enberg
|
||||||
|
|
||||||
|
@ -465,6 +463,12 @@ otherwise noted.
|
||||||
argument. If request can't be handled without leaving RCU mode,
|
argument. If request can't be handled without leaving RCU mode,
|
||||||
have it return ERR_PTR(-ECHILD).
|
have it return ERR_PTR(-ECHILD).
|
||||||
|
|
||||||
|
If the filesystem stores the symlink target in ->i_link, the
|
||||||
|
VFS may use it directly without calling ->get_link(); however,
|
||||||
|
->get_link() must still be provided. ->i_link must not be
|
||||||
|
freed until after an RCU grace period. Writing to ->i_link
|
||||||
|
post-iget() time requires a 'release' memory barrier.
|
||||||
|
|
||||||
readlink: this is now just an override for use by readlink(2) for the
|
readlink: this is now just an override for use by readlink(2) for the
|
||||||
cases when ->get_link uses nd_jump_link() or object is not in
|
cases when ->get_link uses nd_jump_link() or object is not in
|
||||||
fact a symlink. Normally filesystems should only implement
|
fact a symlink. Normally filesystems should only implement
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
#include <linux/cleancache.h>
|
#include <linux/cleancache.h>
|
||||||
#include <linux/dax.h>
|
#include <linux/dax.h>
|
||||||
#include <linux/badblocks.h>
|
|
||||||
#include <linux/task_io_accounting_ops.h>
|
#include <linux/task_io_accounting_ops.h>
|
||||||
#include <linux/falloc.h>
|
#include <linux/falloc.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
|
|
@ -1613,7 +1613,7 @@ EXPORT_SYMBOL(bmap);
|
||||||
* passed since the last atime update.
|
* passed since the last atime update.
|
||||||
*/
|
*/
|
||||||
static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
|
static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
|
||||||
struct timespec now)
|
struct timespec64 now)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!(mnt->mnt_flags & MNT_RELATIME))
|
if (!(mnt->mnt_flags & MNT_RELATIME))
|
||||||
|
@ -1714,7 +1714,7 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
|
||||||
|
|
||||||
now = current_time(inode);
|
now = current_time(inode);
|
||||||
|
|
||||||
if (!relatime_need_update(mnt, inode, timespec64_to_timespec(now)))
|
if (!relatime_need_update(mnt, inode, now))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (timespec64_equal(&inode->i_atime, &now))
|
if (timespec64_equal(&inode->i_atime, &now))
|
||||||
|
|
14
fs/libfs.c
14
fs/libfs.c
|
@ -1169,6 +1169,20 @@ simple_nosetlease(struct file *filp, long arg, struct file_lock **flp,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(simple_nosetlease);
|
EXPORT_SYMBOL(simple_nosetlease);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* simple_get_link - generic helper to get the target of "fast" symlinks
|
||||||
|
* @dentry: not used here
|
||||||
|
* @inode: the symlink inode
|
||||||
|
* @done: not used here
|
||||||
|
*
|
||||||
|
* Generic helper for filesystems to use for symlink inodes where a pointer to
|
||||||
|
* the symlink target is stored in ->i_link. NOTE: this isn't normally called,
|
||||||
|
* since as an optimization the path lookup code uses any non-NULL ->i_link
|
||||||
|
* directly, without calling ->get_link(). But ->get_link() still must be set,
|
||||||
|
* to mark the inode_operations as being for a symlink.
|
||||||
|
*
|
||||||
|
* Return: the symlink target
|
||||||
|
*/
|
||||||
const char *simple_get_link(struct dentry *dentry, struct inode *inode,
|
const char *simple_get_link(struct dentry *dentry, struct inode *inode,
|
||||||
struct delayed_call *done)
|
struct delayed_call *done)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue