From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bharata B Rao Subject: [RFC][PATCH 4/14] Add config options for union mount Date: Mon, 14 May 2007 15:10:15 +0530 Message-ID: <20070514094015.GF4139@in.ibm.com> References: <20070514093722.GB4139@in.ibm.com> Reply-To: bharata@linux.vnet.ibm.com Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: linux-fsdevel@vger.kernel.org, Jan Blunck To: linux-kernel@vger.kernel.org Return-path: Content-Disposition: inline In-Reply-To: <20070514093722.GB4139@in.ibm.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org =46rom: Jan Blunck Subject: Add config options for union mount Introduces two new config options for union mount: CONFIG_UNION_MOUNT - Enables union mount CONFIG_UNION_MOUNT_DEBUG - Enables debugging support for union mount. Also adds debugging routines. =46IXME: this needs some work. printk'ing isn't the right method for ge= tting good debugging output. Signed-off-by: Jan Blunck Signed-off-by: Bharata B Rao --- fs/Kconfig | 16 +++++++++ include/linux/union_debug.h | 76 +++++++++++++++++++++++++++++++++++= +++++++++ 2 files changed, 92 insertions(+) --- a/fs/Kconfig +++ b/fs/Kconfig @@ -551,6 +551,22 @@ config INOTIFY_USER =20 If unsure, say Y. =20 +config UNION_MOUNT + bool "Union mount support (EXPERIMENTAL)" + depends on EXPERIMENTAL + ---help--- + If you say Y here, you will be able to mount file systems as + union mount stacks. This is a VFS based implementation and + should work with all file systems. If unsure, say N. + +config UNION_MOUNT_DEBUG + bool "Union mount debugging output" + depends on UNION_MOUNT + ---help--- + If you say Y here, the union mount debugging code will be + compiled in. You have activate the appropriate UNION_MOUNT_DE= BUG + flags in , too. + config QUOTA bool "Quota support" help --- /dev/null +++ b/include/linux/union_debug.h @@ -0,0 +1,76 @@ +/* + * VFS based union mount for Linux + * + * Copyright =A9 2004-2007 IBM Corporation + * Author(s): Jan Blunck (j.blunck@tu-harburg.de) + * + * This program is free software; you can redistribute it and/or modif= y it + * under the terms of the GNU General Public License as published by t= he Free + * Software Foundation; either version 2 of the License, or (at your o= ption) + * any later version. + * + */ +#ifndef __LINUX_UNION_DEBUG_H +#define __LINUX_UNION_DEBUG_H + +#ifdef __KERNEL__ + +#ifdef CONFIG_UNION_MOUNT_DEBUG + +#include + +#ifndef UNION_MOUNT_DEBUG +#define UNION_MOUNT_DEBUG 0 +#endif /* UNION_MOUNT_DEBUG */ +#ifndef UNION_MOUNT_DEBUG_DCACHE +#define UNION_MOUNT_DEBUG_DCACHE 0 +#endif /* UNION_MOUNT_DEBUG_DCACHE */ +#ifndef UNION_MOUNT_DEBUG_LOCK +#define UNION_MOUNT_DEBUG_LOCK 0 +#endif /* UNION_MOUNT_DEBUG_LOCK */ +#ifndef UNION_MOUNT_DEBUG_READDIR +#define UNION_MOUNT_DEBUG_READDIR 0 +#endif /* UNION_MOUNT_DEBUG_READDIR */ + +/* + * The really excessive debugging output is triggered by + * the user id (7777) which is accessing the union stack + */ +#define UM_DEBUG(fmt, args...) \ +do { \ + if (UNION_MOUNT_DEBUG) \ + printk(KERN_DEBUG "%s: " fmt, __FUNCTION__, ## args); \ +} while (0) +#define UM_DEBUG_UID(fmt, args...) \ +do { \ + if (UNION_MOUNT_DEBUG && (current->uid =3D=3D 7777)) \ + printk(KERN_DEBUG "%s: " fmt, __FUNCTION__, ## args); \ +} while (0) +#define UM_DEBUG_DCACHE(fmt, args...) \ +do { \ + if (UNION_MOUNT_DEBUG_DCACHE && (current->uid =3D=3D 7777)) \ + printk(KERN_DEBUG "%s: " fmt, __FUNCTION__, ## args); \ +} while (0) +#define UM_DEBUG_LOCK(fmt, args...) \ +do { \ + if (UNION_MOUNT_DEBUG_LOCK && (current->uid =3D=3D 7777)) \ + printk(KERN_DEBUG "%s: " fmt, __FUNCTION__, ## args); \ +} while (0) +#define UM_DEBUG_READDIR(fmt, args...) \ +do { \ + if (UNION_MOUNT_DEBUG_READDIR && (current->uid =3D=3D 7777)) \ + printk(KERN_DEBUG "%s: " fmt, __FUNCTION__, ## args); \ +} while (0) + +#else /* CONFIG_UNION_MOUNT_DEBUG */ + +#define UM_DEBUG(fmt, args...) do { /* empty */ } while (0) +#define UM_DEBUG_UID(fmt, args...) do { /* empty */ } while (0) +#define UM_DEBUG_DCACHE(fmt, args...) do { /* empty */ } while (0) +#define UM_DEBUG_LOCK(fmt, args...) do { /* empty */ } while (0) +#define UM_DEBUG_READDIR(fmt, args...) do { /* empty */ } while (0) + +#endif /* CONFIG_UNION_MOUNT_DEBUG */ + +#endif /* __KERNEL__ */ +#endif /* __LINUX_UNION_DEBUG_H */