Loading Documentation/filesystems/Locking +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ prototypes: struct vfsmount *(*d_automount)(struct path *path); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, const struct inode *, unsigned int); unsigned int, unsigned int); locking rules: rename_lock ->d_lock may block rcu-walk Loading Documentation/filesystems/vfs.txt +1 −1 Original line number Diff line number Diff line Loading @@ -990,7 +990,7 @@ struct dentry_operations { struct vfsmount *(*d_automount)(struct path *); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, const struct inode *, unsigned int); unsigned int, unsigned int); }; d_revalidate: called when the VFS needs to revalidate a dentry. This Loading fs/open.c +2 −2 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ long vfs_truncate(const struct path *path, loff_t length) * write access on the upper inode, not on the overlay inode. For * non-overlay filesystems d_real() is an identity function. */ upperdentry = d_real(path->dentry, NULL, O_WRONLY); upperdentry = d_real(path->dentry, NULL, O_WRONLY, 0); error = PTR_ERR(upperdentry); if (IS_ERR(upperdentry)) goto mnt_drop_write_and_out; Loading Loading @@ -857,7 +857,7 @@ EXPORT_SYMBOL(file_path); int vfs_open(const struct path *path, struct file *file, const struct cred *cred) { struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags); struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags, 0); if (IS_ERR(dentry)) return PTR_ERR(dentry); Loading fs/overlayfs/super.c +2 −2 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ static int ovl_check_append_only(struct inode *inode, int flag) static struct dentry *ovl_d_real(struct dentry *dentry, const struct inode *inode, unsigned int open_flags) unsigned int open_flags, unsigned int flags) { struct dentry *real; int err; Loading Loading @@ -102,7 +102,7 @@ static struct dentry *ovl_d_real(struct dentry *dentry, goto bug; /* Handle recursion */ real = d_real(real, inode, open_flags); real = d_real(real, inode, open_flags, 0); if (!inode || inode == d_inode(real)) return real; Loading include/linux/dcache.h +6 −5 Original line number Diff line number Diff line Loading @@ -147,7 +147,7 @@ struct dentry_operations { struct vfsmount *(*d_automount)(struct path *); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, const struct inode *, unsigned int); unsigned int, unsigned int); } ____cacheline_aligned; /* Loading Loading @@ -566,7 +566,8 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper) * d_real - Return the real dentry * @dentry: the dentry to query * @inode: inode to select the dentry from multiple layers (can be NULL) * @flags: open flags to control copy-up behavior * @open_flags: open flags to control copy-up behavior * @flags: flags to control what is returned by this function * * If dentry is on a union/overlay, then return the underlying, real dentry. * Otherwise return the dentry itself. Loading @@ -575,10 +576,10 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper) */ static inline struct dentry *d_real(struct dentry *dentry, const struct inode *inode, unsigned int flags) unsigned int open_flags, unsigned int flags) { if (unlikely(dentry->d_flags & DCACHE_OP_REAL)) return dentry->d_op->d_real(dentry, inode, flags); return dentry->d_op->d_real(dentry, inode, open_flags, flags); else return dentry; } Loading @@ -593,7 +594,7 @@ static inline struct dentry *d_real(struct dentry *dentry, static inline struct inode *d_real_inode(const struct dentry *dentry) { /* This usage of d_real() results in const dentry */ return d_backing_inode(d_real((struct dentry *) dentry, NULL, 0)); return d_backing_inode(d_real((struct dentry *) dentry, NULL, 0, 0)); } struct name_snapshot { Loading Loading
Documentation/filesystems/Locking +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ prototypes: struct vfsmount *(*d_automount)(struct path *path); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, const struct inode *, unsigned int); unsigned int, unsigned int); locking rules: rename_lock ->d_lock may block rcu-walk Loading
Documentation/filesystems/vfs.txt +1 −1 Original line number Diff line number Diff line Loading @@ -990,7 +990,7 @@ struct dentry_operations { struct vfsmount *(*d_automount)(struct path *); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, const struct inode *, unsigned int); unsigned int, unsigned int); }; d_revalidate: called when the VFS needs to revalidate a dentry. This Loading
fs/open.c +2 −2 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ long vfs_truncate(const struct path *path, loff_t length) * write access on the upper inode, not on the overlay inode. For * non-overlay filesystems d_real() is an identity function. */ upperdentry = d_real(path->dentry, NULL, O_WRONLY); upperdentry = d_real(path->dentry, NULL, O_WRONLY, 0); error = PTR_ERR(upperdentry); if (IS_ERR(upperdentry)) goto mnt_drop_write_and_out; Loading Loading @@ -857,7 +857,7 @@ EXPORT_SYMBOL(file_path); int vfs_open(const struct path *path, struct file *file, const struct cred *cred) { struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags); struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags, 0); if (IS_ERR(dentry)) return PTR_ERR(dentry); Loading
fs/overlayfs/super.c +2 −2 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ static int ovl_check_append_only(struct inode *inode, int flag) static struct dentry *ovl_d_real(struct dentry *dentry, const struct inode *inode, unsigned int open_flags) unsigned int open_flags, unsigned int flags) { struct dentry *real; int err; Loading Loading @@ -102,7 +102,7 @@ static struct dentry *ovl_d_real(struct dentry *dentry, goto bug; /* Handle recursion */ real = d_real(real, inode, open_flags); real = d_real(real, inode, open_flags, 0); if (!inode || inode == d_inode(real)) return real; Loading
include/linux/dcache.h +6 −5 Original line number Diff line number Diff line Loading @@ -147,7 +147,7 @@ struct dentry_operations { struct vfsmount *(*d_automount)(struct path *); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, const struct inode *, unsigned int); unsigned int, unsigned int); } ____cacheline_aligned; /* Loading Loading @@ -566,7 +566,8 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper) * d_real - Return the real dentry * @dentry: the dentry to query * @inode: inode to select the dentry from multiple layers (can be NULL) * @flags: open flags to control copy-up behavior * @open_flags: open flags to control copy-up behavior * @flags: flags to control what is returned by this function * * If dentry is on a union/overlay, then return the underlying, real dentry. * Otherwise return the dentry itself. Loading @@ -575,10 +576,10 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper) */ static inline struct dentry *d_real(struct dentry *dentry, const struct inode *inode, unsigned int flags) unsigned int open_flags, unsigned int flags) { if (unlikely(dentry->d_flags & DCACHE_OP_REAL)) return dentry->d_op->d_real(dentry, inode, flags); return dentry->d_op->d_real(dentry, inode, open_flags, flags); else return dentry; } Loading @@ -593,7 +594,7 @@ static inline struct dentry *d_real(struct dentry *dentry, static inline struct inode *d_real_inode(const struct dentry *dentry) { /* This usage of d_real() results in const dentry */ return d_backing_inode(d_real((struct dentry *) dentry, NULL, 0)); return d_backing_inode(d_real((struct dentry *) dentry, NULL, 0, 0)); } struct name_snapshot { Loading