[PATCH 4.5 064/101] vfs: add vfs_select_inode() helper

2016-05-16 Thread Greg Kroah-Hartman
4.5-stable review patch.  If anyone has any objections, please let me know.

--

From: Miklos Szeredi 

commit 54d5ca871e72f2bb172ec9323497f01cd5091ec7 upstream.

Signed-off-by: Miklos Szeredi 
Signed-off-by: Greg Kroah-Hartman 

---
 fs/open.c  |   12 
 include/linux/dcache.h |   12 
 2 files changed, 16 insertions(+), 8 deletions(-)

--- a/fs/open.c
+++ b/fs/open.c
@@ -840,16 +840,12 @@ EXPORT_SYMBOL(file_path);
 int vfs_open(const struct path *path, struct file *file,
 const struct cred *cred)
 {
-   struct dentry *dentry = path->dentry;
-   struct inode *inode = dentry->d_inode;
+   struct inode *inode = vfs_select_inode(path->dentry, file->f_flags);
 
-   file->f_path = *path;
-   if (dentry->d_flags & DCACHE_OP_SELECT_INODE) {
-   inode = dentry->d_op->d_select_inode(dentry, file->f_flags);
-   if (IS_ERR(inode))
-   return PTR_ERR(inode);
-   }
+   if (IS_ERR(inode))
+   return PTR_ERR(inode);
 
+   file->f_path = *path;
return do_dentry_open(file, inode, NULL, cred);
 }
 
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -592,4 +592,16 @@ static inline struct dentry *d_real(stru
return dentry;
 }
 
+static inline struct inode *vfs_select_inode(struct dentry *dentry,
+unsigned open_flags)
+{
+   struct inode *inode = d_inode(dentry);
+
+   if (inode && unlikely(dentry->d_flags & DCACHE_OP_SELECT_INODE))
+   inode = dentry->d_op->d_select_inode(dentry, open_flags);
+
+   return inode;
+}
+
+
 #endif /* __LINUX_DCACHE_H */




[PATCH 4.5 064/101] vfs: add vfs_select_inode() helper

2016-05-16 Thread Greg Kroah-Hartman
4.5-stable review patch.  If anyone has any objections, please let me know.

--

From: Miklos Szeredi 

commit 54d5ca871e72f2bb172ec9323497f01cd5091ec7 upstream.

Signed-off-by: Miklos Szeredi 
Signed-off-by: Greg Kroah-Hartman 

---
 fs/open.c  |   12 
 include/linux/dcache.h |   12 
 2 files changed, 16 insertions(+), 8 deletions(-)

--- a/fs/open.c
+++ b/fs/open.c
@@ -840,16 +840,12 @@ EXPORT_SYMBOL(file_path);
 int vfs_open(const struct path *path, struct file *file,
 const struct cred *cred)
 {
-   struct dentry *dentry = path->dentry;
-   struct inode *inode = dentry->d_inode;
+   struct inode *inode = vfs_select_inode(path->dentry, file->f_flags);
 
-   file->f_path = *path;
-   if (dentry->d_flags & DCACHE_OP_SELECT_INODE) {
-   inode = dentry->d_op->d_select_inode(dentry, file->f_flags);
-   if (IS_ERR(inode))
-   return PTR_ERR(inode);
-   }
+   if (IS_ERR(inode))
+   return PTR_ERR(inode);
 
+   file->f_path = *path;
return do_dentry_open(file, inode, NULL, cred);
 }
 
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -592,4 +592,16 @@ static inline struct dentry *d_real(stru
return dentry;
 }
 
+static inline struct inode *vfs_select_inode(struct dentry *dentry,
+unsigned open_flags)
+{
+   struct inode *inode = d_inode(dentry);
+
+   if (inode && unlikely(dentry->d_flags & DCACHE_OP_SELECT_INODE))
+   inode = dentry->d_op->d_select_inode(dentry, open_flags);
+
+   return inode;
+}
+
+
 #endif /* __LINUX_DCACHE_H */