2007-02-12 18:31:08

by Josef 'Jeff' Sipek

[permalink] [raw]
Subject: [GIT PULL -mm] Unionfs updates/cleanups

The following patches (also available though the git tree) fix few
cleanliness issues with Unionfs.

You can pull from 'master' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/jsipek/unionfs.git

to receive the following:

Erez Zadok (1):
Unionfs: Documentation update

Josef 'Jeff' Sipek (2):
fs/unionfs/: Use __roundup_pow_of_two instead of custom rounding code
fs/: Move eCryptfs & Unionfs config options into a sub-menu

Documentation/filesystems/unionfs/00-INDEX | 8 ++-
Documentation/filesystems/unionfs/issues.txt | 23 +++++++++
Documentation/filesystems/unionfs/usage.txt | 31 ++++--------
fs/Kconfig | 66 ++++++++++++++------------
fs/unionfs/main.c | 2 +-
fs/unionfs/rdstate.c | 11 +----
fs/unionfs/union.h | 1 +
7 files changed, 77 insertions(+), 65 deletions(-)

Josef 'Jeff' Sipek.



2007-02-12 18:31:13

by Josef 'Jeff' Sipek

[permalink] [raw]
Subject: [PATCH 1/3] fs/unionfs/: Use __roundup_pow_of_two instead of custom rounding code

Signed-off-by: Josef 'Jeff' Sipek <[email protected]>
---
fs/unionfs/rdstate.c | 11 ++---------
fs/unionfs/union.h | 1 +
2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/fs/unionfs/rdstate.c b/fs/unionfs/rdstate.c
index 16ce1bf..e240285 100644
--- a/fs/unionfs/rdstate.c
+++ b/fs/unionfs/rdstate.c
@@ -115,19 +115,12 @@ struct unionfs_dir_state *alloc_rdstate(struct inode *inode, int bindex)
{
int i = 0;
int hashsize;
- int mallocsize = sizeof(struct unionfs_dir_state);
+ unsigned long mallocsize = sizeof(struct unionfs_dir_state);
struct unionfs_dir_state *rdstate;

hashsize = guesstimate_hash_size(inode);
mallocsize += hashsize * sizeof(struct list_head);
- /* Round it up to the next highest power of two. */
- mallocsize--;
- mallocsize |= mallocsize >> 1;
- mallocsize |= mallocsize >> 2;
- mallocsize |= mallocsize >> 4;
- mallocsize |= mallocsize >> 8;
- mallocsize |= mallocsize >> 16;
- mallocsize++;
+ mallocsize = __roundup_pow_of_two(mallocsize);

/* This should give us about 500 entries anyway. */
if (mallocsize > PAGE_SIZE)
diff --git a/fs/unionfs/union.h b/fs/unionfs/union.h
index 8e9a1cc..fc87b03 100644
--- a/fs/unionfs/union.h
+++ b/fs/unionfs/union.h
@@ -41,6 +41,7 @@
#include <linux/xattr.h>
#include <linux/fs_stack.h>
#include <linux/magic.h>
+#include <linux/log2.h>

#include <asm/mman.h>
#include <asm/system.h>
--
1.5.0.rc3.g5057

2007-02-12 18:31:33

by Josef 'Jeff' Sipek

[permalink] [raw]
Subject: [PATCH 3/3] Unionfs: Documentation update

From: Erez Zadok <[email protected]>

Be little gentler & updated the URLs

Signed-off-by: Erez Zadok <[email protected]>
Signed-off-by: Josef 'Jeff' Sipek <[email protected]>
---
Documentation/filesystems/unionfs/00-INDEX | 8 ++++--
Documentation/filesystems/unionfs/issues.txt | 23 +++++++++++++++++++
Documentation/filesystems/unionfs/usage.txt | 31 ++++++++-----------------
fs/Kconfig | 2 +-
fs/unionfs/main.c | 2 +-
5 files changed, 40 insertions(+), 26 deletions(-)
create mode 100644 Documentation/filesystems/unionfs/issues.txt

diff --git a/Documentation/filesystems/unionfs/00-INDEX b/Documentation/filesystems/unionfs/00-INDEX
index 32e96f2..96fdf67 100644
--- a/Documentation/filesystems/unionfs/00-INDEX
+++ b/Documentation/filesystems/unionfs/00-INDEX
@@ -1,8 +1,10 @@
00-INDEX
- this file.
concepts.txt
- - A brief introduction of concepts
+ - A brief introduction of concepts.
+issues.txt
+ - A summary of known issues with unionfs.
rename.txt
- - Information regarding rename operations
+ - Information regarding rename operations.
usage.txt
- - Usage and known limitations
+ - Usage information and examples.
diff --git a/Documentation/filesystems/unionfs/issues.txt b/Documentation/filesystems/unionfs/issues.txt
new file mode 100644
index 0000000..b070175
--- /dev/null
+++ b/Documentation/filesystems/unionfs/issues.txt
@@ -0,0 +1,23 @@
+KNOWN Unionfs ISSUES:
+=====================
+
+1. The NFS server returns -EACCES for read-only exports, instead of -EROFS.
+ This means we can't reliably detect a read-only NFS export.
+
+2. Modifying a Unionfs branch directly, while the union is mounted, is
+ currently unsupported. We have tested Unionfs under such conditions, and
+ fixed any bugs we found (Unionfs comes with an extensive regression test
+ suite). However, it may still be possible that changes made to lower
+ branches directly could cause cache incoherency which, in the worst case,
+ may case an oops. We are currently addressing this problem for Unionfs
+ and also generically for all stackable file systems, by handing mmap and
+ introducing small VFS/MM changes that would allow a file system to handle
+ cache coherency correctly.
+
+3. Unionfs should not use lookup_one_len() on the underlying f/s as it
+ confuses NFS. Currently, unionfs_lookup() passes lookup intents to the
+ lower file-system, this eliminates part of the problem. The remaining
+ calls to lookup_one_len may need to be changed to pass an intent.
+
+
+For more information, see <unionfs.filesystems.org>.
diff --git a/Documentation/filesystems/unionfs/usage.txt b/Documentation/filesystems/unionfs/usage.txt
index 3968c9e..14e0856 100644
--- a/Documentation/filesystems/unionfs/usage.txt
+++ b/Documentation/filesystems/unionfs/usage.txt
@@ -1,17 +1,18 @@
Unionfs is a stackable unification file system, which can appear to merge
the contents of several directories (branches), while keeping their physical
-content separate. Unionfs is useful for unified source tree management,
+content separate. Unionfs is useful for unified source tree management,
merged contents of split CD-ROM, merged separate software package
-directories, data grids, and more. Unionfs allows any mix of read-only and
+directories, data grids, and more. Unionfs allows any mix of read-only and
read-write branches, as well as insertion and deletion of branches anywhere
-in the fan-out. To maintain unix semantics, Unionfs handles elimination of
+in the fan-out. To maintain Unix semantics, Unionfs handles elimination of
duplicates, partial-error conditions, and more.

-mount -t unionfs -o branch-option[,union-options[,...]] none MOUNTPOINT
+# mount -t unionfs -o branch-option[,union-options[,...]] none MOUNTPOINT

The available branch-option for the mount command is:

-dirs=branch[=ro|=rw][:...]
+ dirs=branch[=ro|=rw][:...]
+
specifies a separated list of which directories compose the union.
Directories that come earlier in the list have a higher precedence than
those which come later. Additionally, read-only or read-write permissions of
@@ -19,24 +20,12 @@ the branch can be specified by appending =ro or =rw (default) to each
directory.

Syntax:
-dirs=/branch1[=ro|=rw]:/branch2[=ro|=rw]:...:/branchN[=ro|=rw]
-
-Example:
-dirs=/writable_branch=rw:/read-only_branch=ro

+ dirs=/branch1[=ro|=rw]:/branch2[=ro|=rw]:...:/branchN[=ro|=rw]

-KNOWN ISSUES:
-=============
-
-The NFS server returns -EACCES for read-only exports, instead of -EROFS.
-This means we can't reliably detect a read-only NFS export.
+Example:

-Modifying a Unionfs branch directly, while the union is mounted, is
-currently unsupported. Any such change can cause Unionfs to oops, or stay
-silent and even RESULT IN DATA LOSS.
+ dirs=/writable_branch=rw:/read-only_branch=ro

-Unionfs should not use lookup_one_len() on the underlying fs as it confuses
-NFS. Currently, unionfs_lookup() passes lookup intents to the lower
-filesystem, this eliminates part of the problem. The remaining calls to
-lookup_one_len may need to be changed to pass an intent.

+For more information, see unionfs.filesystems.org.
diff --git a/fs/Kconfig b/fs/Kconfig
index 99ea991..10a216e 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -1063,7 +1063,7 @@ config UNION_FS
merge the contents of several directories (branches), while keeping
their physical content separate.

- See <http://www.unionfs.org> for details
+ See <http://unionfs.filesystems.org> for details

config UNION_FS_XATTR
bool "Unionfs extended attributes"
diff --git a/fs/unionfs/main.c b/fs/unionfs/main.c
index 36d30bc..ca7ee26 100644
--- a/fs/unionfs/main.c
+++ b/fs/unionfs/main.c
@@ -679,7 +679,7 @@ static void __exit exit_unionfs_fs(void)
MODULE_AUTHOR("Erez Zadok, Filesystems and Storage Lab, Stony Brook University"
" (http://www.fsl.cs.sunysb.edu)");
MODULE_DESCRIPTION("Unionfs " UNIONFS_VERSION
- " (http://www.unionfs.org)");
+ " (http://unionfs.filesystems.org)");
MODULE_LICENSE("GPL");

module_init(init_unionfs_fs);
--
1.5.0.rc3.g5057

2007-02-12 18:31:51

by Josef 'Jeff' Sipek

[permalink] [raw]
Subject: [PATCH 2/3] fs/: Move eCryptfs & Unionfs config options into a sub-menu

Using The Misc filesystems sub-menu for layered/stackable filesystems only
makes it harder for users to find eCryptfs/Unionfs.

Additionally, the menu can be easily turned into a menuconfig, which could
be used to turn on any VFS/VM functionality required by layered filesystems
(there is none at the moment).

Signed-off-by: Josef 'Jeff' Sipek <[email protected]>
Signed-off-by: Michael Halcrow <[email protected]>
---
fs/Kconfig | 66 +++++++++++++++++++++++++++++++----------------------------
1 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/fs/Kconfig b/fs/Kconfig
index cf46c71..99ea991 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -1041,6 +1041,41 @@ config CONFIGFS_FS

endmenu

+menu "Layered filesystems"
+
+config ECRYPT_FS
+ tristate "eCrypt filesystem layer support (EXPERIMENTAL)"
+ depends on EXPERIMENTAL && KEYS && CRYPTO
+ help
+ Encrypted filesystem that operates on the VFS layer. See
+ <file:Documentation/ecryptfs.txt> to learn more about
+ eCryptfs. Userspace components are required and can be
+ obtained from <http://ecryptfs.sf.net>.
+
+ To compile this file system support as a module, choose M here: the
+ module will be called ecryptfs.
+
+config UNION_FS
+ tristate "Union file system (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
+ help
+ Unionfs is a stackable unification file system, which appears to
+ merge the contents of several directories (branches), while keeping
+ their physical content separate.
+
+ See <http://www.unionfs.org> for details
+
+config UNION_FS_XATTR
+ bool "Unionfs extended attributes"
+ depends on UNION_FS
+ help
+ Extended attributes are name:value pairs associated with inodes by
+ the kernel or by users (see the attr(5) manual page).
+
+ If unsure, say N.
+
+endmenu
+
menu "Miscellaneous filesystems"

config ADFS_FS
@@ -1093,18 +1128,6 @@ config AFFS_FS
To compile this file system support as a module, choose M here: the
module will be called affs. If unsure, say N.

-config ECRYPT_FS
- tristate "eCrypt filesystem layer support (EXPERIMENTAL)"
- depends on EXPERIMENTAL && KEYS && CRYPTO
- help
- Encrypted filesystem that operates on the VFS layer. See
- <file:Documentation/ecryptfs.txt> to learn more about
- eCryptfs. Userspace components are required and can be
- obtained from <http://ecryptfs.sf.net>.
-
- To compile this file system support as a module, choose M here: the
- module will be called ecryptfs.
-
config HFS_FS
tristate "Apple Macintosh file system support (EXPERIMENTAL)"
depends on BLOCK && EXPERIMENTAL
@@ -1554,25 +1577,6 @@ config UFS_DEBUG
Y here. This will result in _many_ additional debugging messages to be
written to the system log.

-config UNION_FS
- tristate "Union file system (EXPERIMENTAL)"
- depends on EXPERIMENTAL
- help
- Unionfs is a stackable unification file system, which appears to
- merge the contents of several directories (branches), while keeping
- their physical content separate.
-
- See <http://www.unionfs.org> for details
-
-config UNION_FS_XATTR
- bool "Unionfs extended attributes"
- depends on UNION_FS
- help
- Extended attributes are name:value pairs associated with inodes by
- the kernel or by users (see the attr(5) manual page).
-
- If unsure, say N.
-
endmenu

menu "Network File Systems"
--
1.5.0.rc3.g5057