[PATCH 13/38] fallthru: Basic fallthru definitions

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Valerie Aurora
Date: Friday, August 6, 2010 - 3:34 pm

Define the fallthru dcache flag and file system op.  Mask out the
DCACHE_FALLTHRU flag on dentry creation.  Actual users and changes to
lookup come in later patches.

Signed-off-by: Valerie Aurora <vaurora@redhat.com>
---
 Documentation/filesystems/vfs.txt |    6 ++++++
 fs/dcache.c                       |    2 +-
 include/linux/dcache.h            |    7 +++++++
 include/linux/fs.h                |    2 ++
 4 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt
index 964e0fc..bbaefa9 100644
--- a/Documentation/filesystems/vfs.txt
+++ b/Documentation/filesystems/vfs.txt
@@ -320,6 +320,7 @@ struct inode_operations {
 	int (*rmdir) (struct inode *,struct dentry *);
 	int (*mknod) (struct inode *,struct dentry *,int,dev_t);
 	int (*whiteout) (struct inode *, struct dentry *, struct dentry *);
+	int (*fallthru) (struct inode *, struct dentry *);
 	int (*rename) (struct inode *, struct dentry *,
 			struct inode *, struct dentry *);
 	int (*readlink) (struct dentry *, char __user *,int);
@@ -390,6 +391,11 @@ otherwise noted.
         second is the dentry for the whiteout itself.  This method
         must unlink() or rmdir() the original entry if it exists.
 
+  fallthru: called by the readdir(2) system call on a layered file
+        system.  Only required if you want to support fallthrus.
+        Fallthrus are place-holders for directory entries visible from
+        a lower level file system.
+
   rename: called by the rename(2) system call to rename the object to
 	have the parent and name given by the second inode and dentry.
 
diff --git a/fs/dcache.c b/fs/dcache.c
index 79b9f6a..249d077 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -992,7 +992,7 @@ EXPORT_SYMBOL(d_alloc_name);
 static void __d_instantiate(struct dentry *dentry, struct inode *inode)
 {
 	if (inode) {
-		dentry->d_flags &= ~DCACHE_WHITEOUT;
+		dentry->d_flags &= ~(DCACHE_WHITEOUT|DCACHE_FALLTHRU);
 		list_add(&dentry->d_alias, &inode->i_dentry);
 	}
 	dentry->d_inode = inode;
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 7d650a2..0904716 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -190,6 +190,8 @@ d_iput:		no		no		no       yes
 
 #define DCACHE_WHITEOUT		0x0200	/* Stop lookup in a unioned file system */
 
+#define DCACHE_FALLTHRU		0x0400	/* Continue lookup below an opaque dir */
+
 extern spinlock_t dcache_lock;
 extern seqlock_t rename_lock;
 
@@ -379,6 +381,11 @@ static inline int d_is_whiteout(struct dentry *dentry)
 	return (dentry->d_flags & DCACHE_WHITEOUT);
 }
 
+static inline int d_is_fallthru(struct dentry *dentry)
+{
+	return (dentry->d_flags & DCACHE_FALLTHRU);
+}
+
 static inline struct dentry *dget_parent(struct dentry *dentry)
 {
 	struct dentry *ret;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 1dbe156..71ee74e 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -210,6 +210,7 @@ struct inodes_stat_t {
 #define MS_I_VERSION	(1<<23) /* Update inode I_version field */
 #define MS_STRICTATIME	(1<<24) /* Always perform atime updates */
 #define MS_WHITEOUT	(1<<25) /* FS supports whiteout filetype */
+#define MS_FALLTHRU	(1<<26) /* FS supports fallthru filetype */
 #define MS_ACTIVE	(1<<30)
 #define MS_NOUSER	(1<<31)
 
@@ -1534,6 +1535,7 @@ struct inode_operations {
 	int (*rmdir) (struct inode *,struct dentry *);
 	int (*mknod) (struct inode *,struct dentry *,int,dev_t);
 	int (*whiteout) (struct inode *, struct dentry *, struct dentry *);
+	int (*fallthru) (struct inode *, struct dentry *);
 	int (*rename) (struct inode *, struct dentry *,
 			struct inode *, struct dentry *);
 	int (*readlink) (struct dentry *, char __user *,int);
-- 
1.6.3.3

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/38] VFS union mounts - Add MS_FALLTHRU, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 09/38] whiteout: tmpfs whiteout support, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 11/38] whiteout: ext2 whiteout support, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 12/38] whiteout: jffs2 whiteout support, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 13/38] fallthru: Basic fallthru definitions, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 14/38] fallthru: ext2 fallthru support, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 15/38] fallthru: jffs2 fallthru support, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 16/38] fallthru: tmpfs fallthru support, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 17/38] union-mount: Union mounts documentation, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 22/38] union-mount: Implement union lookup, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 27/38] union-mount: In-kernel file copyup routines, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 29/38] union-mount: Implement union-aware link(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 30/38] union-mount: Implement union-aware rename(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 32/38] union-mount: Implement union-aware chown(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 35/38] union-mount: Implement union-aware lchown(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
Re: [PATCH 14/38] fallthru: ext2 fallthru support, Andreas Dilger, (Fri Aug 6, 5:28 pm)
Re: [PATCH 14/38] fallthru: ext2 fallthru support, Valerie Aurora, (Sun Aug 8, 9:40 am)