Commit 149e703c authored by Linus Torvalds's avatar Linus Torvalds

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
parents d897166d 6ee9706a
...@@ -52,7 +52,7 @@ prototypes: ...@@ -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 @@ ...@@ -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. ...@@ -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 @@ ...@@ -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); ...@@ -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) ...@@ -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))
......
...@@ -1169,6 +1169,20 @@ simple_nosetlease(struct file *filp, long arg, struct file_lock **flp, ...@@ -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)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment