GoboLinux Downloads Documentation Community Recipes Screenshots

GoboLinux Recipe & Package Search Tool

71 versions of Linux.

ProgramAgeSizeByWWWSummary
Linux 4.13.2-r1 879  88794 Luca...
The Linux Kernel.
Linux 4.9.16-r3 1050  100651 Luca...
The Linux Kernel.
Linux 4.9.4-r5 1106  99374 Luca...
The Linux Kernel.
Linux 4.8.2-r2 1172  89394 Luca...
The Linux Kernel.
Linux 4.7.4-r1 1242  82767 Luca...
The Linux Kernel.
Linux 4.7.0-r4 1297  82585 Luca...
The Linux Kernel.
Linux 3.13.3-r1 2177  252629 Luca...
The Linux Kernel.
Linux 3.12.6-r1 2237  238949 Luca...
The Linux Kernel.
Linux 3.9.4-r2 2432  70048 Luca...
The Linux Kernel.
Linux 3.7.1-r2 2605  67579 Luca...
The Linux Kernel.
Linux 3.5.0-r1 2756  124391 Luca...
The Linux Kernel.
Linux 3.4.4-r1 2756  124348 Luca...
The Linux Kernel.
Linux 3.3.6-r1 2756  124410 Luca...
The Linux Kernel.
Linux 3.2.12-r2 2884  124345 Luca...
The Linux Kernel.
Linux 3.2.7-r1 2914  123550 Mich...
The Linux Kernel.
Linux 3.1.1-r1 3019  122907 Mich...
The Linux Kernel.
Linux 3.0.4-r4 3080  122754 Luca...
The Linux Kernel.
Linux 2.6.36.3-r1 3303  116087 Diog...
The Linux Kernel.
Linux 2.6.32.3-r1 3681  117990 Luca...
The Linux Kernel.
Linux 2.6.32-r1 3722  117751 Luca...
The Linux Kernel.
Linux 2.6.31.6-r3 3727  126499 Luca...
The Linux Kernel.
Linux 2.6.30.5-r1 3806  166102 Jona...
The Linux Kernel.
Linux 2.6.29.1-r1 3949  117500 Luca...
The Linux Kernel.
Linux 2.6.28.7-r1 4005  115518 Giam...
The Linux Kernel.
Linux 2.6.28.1-r1 4005  115487 Giam...
The Linux Kernel.
Linux 2.6.28-r1 4005  116681 Mich...
The Linux Kernel.
Linux 2.6.27.8-r1 4005  134160 Giam...
The Linux Kernel.
Linux 2.6.27.4-r3 4005  149529 Luca...
The Linux Kernel.
Linux 2.6.25.17-r1 4005  172834 Giam...
The Linux Kernel.
Linux 2.6.25.16-r1 4005  166500 Giam...
The Linux Kernel.
Linux 2.6.25.10-r2 4005  165320 Giam...
The Linux Kernel.
Linux 2.6.25.7-r1 4005  157294 Giam...
The Linux Kernel.
Linux 2.6.25.4-r1 4005  133017 Hopp...
The Linux Kernel.
Linux 2.6.25-r1 4005  133216 Luca...
The Linux Kernel.
Linux 2.6.24.4-r5 4005  150733
The Linux Kernel.
Linux 2.6.24.3-r5 4005  150221 Luca...
The Linux Kernel.
Linux 2.6.24.2-r3 4005  146488 Giam...
The Linux Kernel.
Linux 2.6.24.1-r1 4005  146454 Giam...
The Linux Kernel.
Linux 2.6.24-r1 4005  146428 Luca...
The Linux Kernel.
Linux 2.6.23.8-r4 4005  155842 Luca...
The Linux Kernel.
Linux 2.6.22.7-r4 4005  114727 Luca...
The Linux Kernel.
Linux 2.6.22.1-r1 4005  121391 Luca...
The Linux Kernel.
Linux 2.6.21.1-r3 4005  118854 Luca...
The Linux Kernel.
Linux 2.6.20.7-r1 4005  117945 Luca...
The Linux Kernel.
Linux 2.6.20.4-r3 4005  151150 Luca...
The Linux Kernel.
Linux 2.6.20-r1 4005  106429 Luca...
The Linux Kernel.
Linux 2.6.18.3-r2 4005  111124 Luca...
The Linux Kernel.
Linux 2.6.17.11-r1 4005  164053 Luca...
The Linux Kernel.
Linux 2.6.17.3-r1 4005  165067 Luca...
The Linux Kernel.
view entry at GitHub | download recipe.bz2 file
01-gobohide.patch
02-unionfs-1.3.patch
03-squashfs-3.0.patch
04-section_mismatch_fix-smc.patch
05-section_mismatch_fix-hp.patch
06-section_mismatch_fix-3c5zz.patch
07-section_mismatch_fix-ne.patch
08-vesafb-tng-1.0-rc2-git-20060629.patch
09-sched-implement-smpnice-2.6.17.patch
10-video_modedb.patch
Recipe
Resources/Dependencies
Resources/Description
Resources/NewDependencies
i686/Recipe
i686/dot-config
ppc/Recipe
ppc/dot-config
diff -X dontdiff -Nurp linux-2.6.17.3.orig/fs/ioctl.c linux-2.6.17.3/fs/ioctl.c
--- linux-2.6.17.3.orig/fs/ioctl.c	2006-06-30 14:37:38.000000000 -0300
+++ linux-2.6.17.3/fs/ioctl.c	2006-07-04 15:13:56.000000000 -0300
@@ -13,6 +13,7 @@
 #include <linux/fs.h>
 #include <linux/security.h>
 #include <linux/module.h>
+#include <linux/gobolinux.h>
 
 #include <asm/uaccess.h>
 #include <asm/ioctls.h>
@@ -147,6 +148,19 @@ int vfs_ioctl(struct file *filp, unsigne
 			else
 				error = -ENOTTY;
 			break;
+#ifdef CONFIG_GOBOHIDE_FS
+		case FIGOBOLINUX:
+			do {
+				struct inode *inode = filp->f_dentry->d_inode;
+
+				if (!arg) {
+					error = -EINVAL;
+					break;
+				}
+				error = gobolinux_fs_ioctl (inode, (struct gobolinux_hide *) arg);
+			}while (0);
+			break;
+#endif
 		default:
 			if (S_ISREG(filp->f_dentry->d_inode->i_mode))
 				error = file_ioctl(filp, cmd, arg);
diff -X dontdiff -Nurp linux-2.6.17.3.orig/fs/Kconfig linux-2.6.17.3/fs/Kconfig
--- linux-2.6.17.3.orig/fs/Kconfig	2006-06-30 14:37:38.000000000 -0300
+++ linux-2.6.17.3/fs/Kconfig	2006-07-04 15:13:56.000000000 -0300
@@ -1204,6 +1204,18 @@ config VXFS_FS
 	  To compile this as a module, choose M here: the module will be
 	  called freevxfs.  If unsure, say N.
 
+config GOBOHIDE_FS
+	bool "GoboHide support on file systems"
+	default y
+	help
+	  GoboHide is a general interface for providing real hidden files 
+	  in a filesystem. GoboHide now supports all filesystems, including
+	  UnionFS, SquashFS and any other sitted on the top of the VFS.
+	  This patch was created especially for GoboLinux, in order to remove
+	  the legacy tree from the usual system view.
+	  To use it, see the documentation of the gobohide userspace tool.
+
+	  GoboLinux users will normally want to say Y.
 
 config HPFS_FS
 	tristate "OS/2 HPFS file system support"
diff -X dontdiff -Nurp linux-2.6.17.3.orig/fs/namei.c linux-2.6.17.3/fs/namei.c
--- linux-2.6.17.3.orig/fs/namei.c	2006-06-30 14:37:38.000000000 -0300
+++ linux-2.6.17.3/fs/namei.c	2006-07-06 10:22:41.000000000 -0300
@@ -32,6 +32,7 @@
 #include <linux/file.h>
 #include <linux/fcntl.h>
 #include <linux/namei.h>
+#include <linux/gobolinux.h>
 #include <asm/namei.h>
 #include <asm/uaccess.h>
 
@@ -1975,6 +1976,10 @@ int vfs_rmdir(struct inode *dir, struct 
 	}
 	mutex_unlock(&dentry->d_inode->i_mutex);
 	if (!error) {
+#if CONFIG_GOBOHIDE_FS
+		if (gobolinux_hide(dentry->d_inode->i_ino, dentry->d_sb) > 0)
+			gobolinux_inode_del(dentry->d_inode->i_ino);
+#endif
 		d_delete(dentry);
 	}
 	dput(dentry);
@@ -2052,6 +2057,12 @@ int vfs_unlink(struct inode *dir, struct
 
 	/* We don't d_delete() NFS sillyrenamed files--they still exist. */
 	if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
+#if CONFIG_GOBOHIDE_FS
+		if (dentry->d_inode && (S_ISLNK(dentry->d_inode->i_mode) || S_ISDIR(dentry->d_inode->i_mode))) \
{
+			if (gobolinux_hide(dentry->d_inode->i_ino, dentry->d_sb) > 0)
+				gobolinux_inode_del(dentry->d_inode->i_ino);
+		}
+#endif
 		d_delete(dentry);
 	}
 
diff -X dontdiff -Nurp linux-2.6.17.3.orig/fs/readdir.c linux-2.6.17.3/fs/readdir.c
--- linux-2.6.17.3.orig/fs/readdir.c	2006-06-30 14:37:38.000000000 -0300
+++ linux-2.6.17.3/fs/readdir.c	2006-07-06 10:30:53.000000000 -0300
@@ -16,6 +16,7 @@
 #include <linux/security.h>
 #include <linux/syscalls.h>
 #include <linux/unistd.h>
+#include <linux/gobolinux.h>
 
 #include <asm/uaccess.h>
 
@@ -66,6 +67,7 @@ struct old_linux_dirent {
 struct readdir_callback {
 	struct old_linux_dirent __user * dirent;
 	int result;
+	struct super_block *inode_sb;
 };
 
 static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset,
@@ -107,6 +109,7 @@ asmlinkage long old_readdir(unsigned int
 
 	buf.result = 0;
 	buf.dirent = dirent;
+	buf.inode_sb = file->f_dentry->d_sb;
 
 	error = vfs_readdir(file, fillonedir, &buf);
 	if (error >= 0)
@@ -135,6 +138,7 @@ struct getdents_callback {
 	struct linux_dirent __user * previous;
 	int count;
 	int error;
+	struct super_block *inode_sb;
 };
 
 static int filldir(void * __buf, const char * name, int namlen, loff_t offset,
@@ -144,6 +148,11 @@ static int filldir(void * __buf, const c
 	struct getdents_callback * buf = (struct getdents_callback *) __buf;
 	int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 2);
 
+#ifdef CONFIG_GOBOHIDE_FS
+	if (gobolinux_hide(ino, buf->inode_sb))
+		return 0;
+#endif
+
 	buf->error = -EINVAL;	/* only used if we fail.. */
 	if (reclen > buf->count)
 		return -EINVAL;
@@ -193,6 +202,7 @@ asmlinkage long sys_getdents(unsigned in
 	buf.previous = NULL;
 	buf.count = count;
 	buf.error = 0;
+	buf.inode_sb = file->f_dentry->d_sb;
 
 	error = vfs_readdir(file, filldir, &buf);
 	if (error < 0)
@@ -219,6 +229,7 @@ struct getdents_callback64 {
 	struct linux_dirent64 __user * previous;
 	int count;
 	int error;
+	struct super_block *inode_sb;
 };
 
 static int filldir64(void * __buf, const char * name, int namlen, loff_t offset,
@@ -228,6 +239,11 @@ static int filldir64(void * __buf, const
 	struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf;
 	int reclen = ROUND_UP64(NAME_OFFSET(dirent) + namlen + 1);
 
+#ifdef CONFIG_GOBOHIDE_FS
+	if (gobolinux_hide(ino, buf->inode_sb))
+		return 0;
+#endif
+
 	buf->error = -EINVAL;	/* only used if we fail.. */
 	if (reclen > buf->count)
 		return -EINVAL;
@@ -279,6 +295,7 @@ asmlinkage long sys_getdents64(unsigned 
 	buf.previous = NULL;
 	buf.count = count;
 	buf.error = 0;
+	buf.inode_sb = file->f_dentry->d_sb;
 
 	error = vfs_readdir(file, filldir64, &buf);
 	if (error < 0)
diff -X dontdiff -Nurp linux-2.6.17.3.orig/gobolinux/fs/gobohide.c linux-2.6.17.3/gobolinux/fs/gobohide.c
--- linux-2.6.17.3.orig/gobolinux/fs/gobohide.c	1969-12-31 21:00:00.000000000 -0300
+++ linux-2.6.17.3/gobolinux/fs/gobohide.c	2006-07-06 10:57:56.000000000 -0300
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2002 CScience.ORG World Domination Inc.
+ *
+ * These modifications are released under the GNU General Public License
+ * version 2 or later, incorporated herein by reference.
+ * Modifications/features/bug fixes based on or derived from this code 
+ * fall under the GPL and must retain the authorship, copyright and license 
+ * notice.  This file is not a complete program and may only be used when 
+ * the entire operating system is licensed under the GPL. 
+ *
+ * See the file COPYING in this distribution for more information.
+ *
+ * Author: Felipe W Damasio <felipewd@terra.com.br>.
+ * Original idea: Lucas C V Real <lucasvr@gobolinux.org>
+ *
+ * Changes:
+ * 04-Jul-2006 - Lucas C. Villa Real
+ *               Added GoboHide support to all filesystems through the VFS.
+ *               
+ * 21-Feb-2004 - Lucas C. Villa Real
+ *               Added an extra check for the inode's VFS root, so that
+ *               the same inode number on different partitions don't get
+ *               hidden mistakenly.
+ *              
+ * 11-Nov-2003 - Lucas C. Villa Real
+ *               Removed the spinlocks from gobolinux_show_hidden(), since
+ *               we were already working with list_for_each_safe(), which
+ *               iterates safely against removal of list entries.
+ *
+ * 05-May-2003 - Felipe W Damasio
+ *               Using read-write locks instead of spinlocks,
+ *               improving quite a bit read operations
+ *               (allow concurrent readers, but only a single writer)
+ *
+ * 28-Apr-2003 - Lucas C. Villa Real
+ *               Centralized checks for UID on gobolinux/fs/ioctl.c.
+ *               Fixed get_free_page() to work on 64-bit archs as well.
+ *
+ * 12-Apr-2003 - Lucas C. Villa Real
+ *               Removed support for UID's different than 0 hide inodes.
+ *              
+ * 24-Mar-2003 - Lucas C. Villa Real
+ *               Modified struct hide and calls so we have pathnames related
+ *               to the "real" root dir and not the the mount point.
+ *              
+ * 17-Mar-2003 - Lucas C. Villa Real
+ *               Added support for full pathname, rather than dealing only
+ *               with inode numbers.
+ *
+ * 10-Jan-2003 - Lucas C. Villa Real
+ *               Added statistics support.
+ */
+#include <linux/fs.h>
+#include <linux/namei.h>
+#include <linux/sched.h>
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <linux/file.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/gobolinux.h>
+#include <linux/spinlock.h>
+#include <linux/proc_fs.h>
+#include <linux/stat.h>
+#include <linux/mount.h>
+
+#include <asm/uaccess.h>
+
+static LIST_HEAD(inode_list);
+static rwlock_t inode_lock = RW_LOCK_UNLOCKED;
+
+int gobolinux_resolve_path(struct hide *inode)
+{
+	int len;
+	struct file *filp = inode->filp;
+	
+	inode->page = __get_free_page(GFP_USER);
+	if (! inode->page)
+		return -ENOMEM;
+	
+	inode->pathname = d_path(filp->f_dentry, filp->f_vfsmnt, (char *) inode->page, \
PAGE_SIZE);
+	len = PAGE_SIZE + inode->page - (unsigned long) inode->pathname;
+
+	return len < PATH_MAX ? len : PATH_MAX;
+}
+
+/**
+ * gobolinux_count_hidden - Counts how many inodes are hidden.
+ * @hide: the structure containing a pointer to store the number of inodes 
+ *        hidden.
+ */
+int gobolinux_count_hidden(struct gobolinux_hide *hide)
+{
+	struct list_head *p, *next;
+	struct hide *inode;
+	unsigned long flags;
+	
+	hide->stats.hidden_inodes = 0;
+	
+	read_lock_irqsave(&inode_lock, flags);
+	list_for_each_safe(p, next, &inode_list) {
+		inode = list_entry(p, struct hide, head);
+		if (inode)
+			hide->stats.hidden_inodes++;
+	}
+	read_unlock_irqrestore(&inode_lock, flags);
+	return 0;
+}
+
+/**
+ * gobolinux_show_hidden - Lists the currently hidden inodes.
+ * @hide: the structure containing a pointer to a previous-allocated array
+ *        of no more than @hide->stats.hidden_inodes elements of unsigned long. \

+ *
+ * This array is filled with the directories being hidden.
+ */
+int gobolinux_show_hidden(struct gobolinux_hide *hide)
+{
+	struct list_head *p, *next;
+	struct hide *inode;
+	struct gobolinux_hide_stats *stats;
+	
+	hide->stats.filled_size = 0;
+	
+	list_for_each_safe(p, next, &inode_list) {
+		inode = list_entry(p, struct hide, head);
+		stats = &hide->stats;
+		if (inode && (stats->filled_size < stats->hidden_inodes)) {	
+			if (copy_to_user(stats->hidden_list[stats->filled_size++],
+				inode->pathname, strlen(inode->pathname))) {
+				return -EFAULT;
+			}
+		} 
+	}
+	
+	return 0;
+}
+
+/**
+ * gobolinux_get_filp - Returns the struct file related to a given descriptor.
+ * @ino: the inode number
+ * @pathname: the pathname associated with @ino
+ */
+struct file *gobolinux_get_filp(ino_t ino, const char *pathname, int *ret)
+{
+	struct nameidata nd;
+	
+	*ret = user_path_walk_link(pathname, &nd);
+	if (*ret)
+		return NULL;
+
+	if (nd.dentry->d_inode->i_ino == ino)
+		return dentry_open(nd.dentry, nd.mnt, 0);
+	
+	return NULL;
+}
+
+/**
+ * gobolinux_inode_add - Add the inode to the "must hide" list 
+ * @ino: inode to be added
+ * @pathname: the pathname associated with @ino
+ */
+int gobolinux_inode_add(ino_t ino, const char *pathname)
+{
+	int len, ret = 0;
+	struct hide *n;
+	unsigned long flags;
+	
+	n = kmalloc (sizeof(struct hide), GFP_KERNEL);
+	if (!n)
+		return -ENOMEM;
+	
+	n->filp = gobolinux_get_filp(ino, pathname, &ret);
+	if (!n->filp) 
+		goto out;
+
+	len = gobolinux_resolve_path(n);
+	if (len < 0) {
+		ret = len;
+		goto out;
+	}
+	
+	if (gobolinux_hide(ino, n->filp->f_dentry->d_sb)) {
+		ret = -EEXIST;
+		goto out;
+	}	
+	
+	write_lock_irqsave (&inode_lock, flags);
+	INIT_LIST_HEAD(&n->head);
+	
+	list_add (&n->head, &inode_list);
+	write_unlock_irqrestore (&inode_lock, flags);
+out:
+	return ret;
+}
+
+/**
+ * gobolinux_inode_del - Remove the inode from the "must hide" list 
+ * @ino: inode to be removed
+ */
+int gobolinux_inode_del(ino_t ino)
+{
+	struct list_head *p, *next;
+	struct hide *inode;
+	unsigned long flags;
+	
+	write_lock_irqsave(&inode_lock, flags);
+	list_for_each_safe(p, next, &inode_list) {
+		inode = list_entry(p, struct hide, head);
+		if (inode && (inode->filp->f_dentry->d_inode->i_ino== ino)) {
+			list_del(&inode->head);
+			free_page(inode->page);
+			filp_close(inode->filp, current->files);
+			kfree(inode);
+			break;
+		}
+	}
+
+	write_unlock_irqrestore(&inode_lock, flags);
+	return 0;
+}
+
+/** 
+ * gobolinux_hide_inode - Test if the inode is in the "must hide" list,
+ *       comparing against the inode number and the superblock.
+ *
+ * @ino: inode being readdir'd
+ * @part_info: the struct inode from which its superblock can be found.
+ *
+ * Should be pretty straight-forward: If the inode number is in
+ * the inode_list, returns 1. If it isn't, returns 0.
+ * Returns -1 if an invalid inode is received 
+ */
+int gobolinux_hide(ino_t ino, struct super_block *inode_sb)
+{
+	struct list_head *p;
+	int ret = -1;
+	struct hide *inode;
+	unsigned long flags;
+	
+	if (!ino)
+		goto out;
+
+	ret = 0;
+	read_lock_irqsave(&inode_lock, flags);
+	list_for_each(p, &inode_list) {
+		inode = list_entry(p, struct hide, head);
+		if (inode->filp->f_dentry->d_inode->i_ino == ino) {
+			if (inode->filp->f_dentry->d_sb == inode_sb)
+				ret = 1;
+			break;
+		}
+	}
+	read_unlock_irqrestore(&inode_lock, flags);
+out:
+	return ret;
+}
+
+/* We need to export this function to add support on the VFS */
+EXPORT_SYMBOL(gobolinux_hide);
+
+/**
+ * These are only exported for the ioctl handler's sake 
+ */
+EXPORT_SYMBOL(gobolinux_inode_add);
+EXPORT_SYMBOL(gobolinux_inode_del);
+EXPORT_SYMBOL(gobolinux_show_hidden);
+EXPORT_SYMBOL(gobolinux_count_hidden);
diff -X dontdiff -Nurp linux-2.6.17.3.orig/gobolinux/fs/ioctl.c linux-2.6.17.3/gobolinux/fs/ioctl.c
--- linux-2.6.17.3.orig/gobolinux/fs/ioctl.c	1969-12-31 21:00:00.000000000 -0300
+++ linux-2.6.17.3/gobolinux/fs/ioctl.c	2006-07-04 15:32:52.000000000 -0300
@@ -0,0 +1,85 @@
+/*
+ * ioctl.c: ioctl handling for gobolinux-fs
+ */
+
+/*
+ * Copyright (C) 2002 CScience.ORG World Domination Inc.
+ *
+ * These modifications are released under the GNU General Public License
+ * version 2 or later, incorporated herein by reference.
+ * Modifications/features/bug fixes based on or derived from this code 
+ * fall under the GPL and must retain the authorship, copyright and license 
+ * notice.  This file is not a complete program and may only be used when 
+ * the entire operating system is licensed under the GPL. 
+ *
+ * See the file COPYING in this distribution for more information.
+ *
+ * Author: Felipe W Damasio <felipewd@terra.com.br>.
+ *
+ * Changes:
+ * 18-Oct-2005 - Lucas C. Villa Real
+ *               Allowing to hide symlinks which points to files
+ */
+
+#include <linux/fs.h>
+#include <linux/sched.h>
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <linux/file.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/gobolinux.h>
+#include <linux/spinlock.h>
+
+/** 
+ * gobolinux_fs_ioctl - Handle fs-related ioctls 
+ * @inode: inode number being added/removed from the hide-list
+ * @hide: structure containing the user's request 
+ */
+
+int
+gobolinux_fs_ioctl(struct inode *inode, struct gobolinux_hide *hide)
+{
+	int error = 0;
+	
+	if (!hide) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	/* We only support symbolic links and directories */
+	if (hide->inode && !S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	/* We only allow process with admin privileges 
+	 * to use the fs-related gobo ioctls 
+	 */
+	if (current->uid != 0 && current->euid != 0) {
+		error = -EPERM;
+		goto out;
+	}
+
+	switch (hide->operation) {
+		case GOBOLINUX_HIDEINODE:
+			error = gobolinux_inode_add(hide->inode, hide->pathname);
+			break;
+		case GOBOLINUX_UNHIDEINODE:
+			error = gobolinux_inode_del(hide->inode);
+			break;
+		case GETSTATSUIDNUMBER:
+			error = gobolinux_count_hidden(hide);
+			break;
+		case GETSTATSUID:
+			error = gobolinux_show_hidden(hide);
+			break;
+		default:
+			return -EOPNOTSUPP;
+	}
+
+out:
+	return error;
+}
+
+EXPORT_SYMBOL(gobolinux_fs_ioctl);
diff -X dontdiff -Nurp linux-2.6.17.3.orig/gobolinux/fs/Makefile linux-2.6.17.3/gobolinux/fs/Makefile
--- linux-2.6.17.3.orig/gobolinux/fs/Makefile	1969-12-31 21:00:00.000000000 -0300
+++ linux-2.6.17.3/gobolinux/fs/Makefile	2006-07-04 15:13:56.000000000 -0300
@@ -0,0 +1,5 @@
+#
+# Makefile for the gobolinux-fs features
+#
+
+obj-$(CONFIG_GOBOHIDE_FS) := ioctl.o gobohide.o
diff -X dontdiff -Nurp linux-2.6.17.3.orig/gobolinux/Makefile linux-2.6.17.3/gobolinux/Makefile
--- linux-2.6.17.3.orig/gobolinux/Makefile	1969-12-31 21:00:00.000000000 -0300
+++ linux-2.6.17.3/gobolinux/Makefile	2006-07-04 15:13:56.000000000 -0300
@@ -0,0 +1,5 @@
+#
+# Makefile for the gobolinux features
+#
+
+obj-$(CONFIG_GOBOHIDE_FS) := fs/
diff -X dontdiff -Nurp linux-2.6.17.3.orig/include/linux/fs.h linux-2.6.17.3/include/linux/fs.h
--- linux-2.6.17.3.orig/include/linux/fs.h	2006-06-30 14:37:38.000000000 -0300
+++ linux-2.6.17.3/include/linux/fs.h	2006-07-04 15:13:56.000000000 -0300
@@ -212,6 +212,7 @@ extern int dir_notify_enable;
 #define BMAP_IOCTL 1		/* obsolete - kept for compatibility */
 #define FIBMAP	   _IO(0x00,1)	/* bmap access */
 #define FIGETBSZ   _IO(0x00,2)	/* get the block size used for bmap */
+#define FIGOBOLINUX _IOW(0x00, 0x22,size_t) /* gobolinux-fs ioctl */
 
 #define SYNC_FILE_RANGE_WAIT_BEFORE	1
 #define SYNC_FILE_RANGE_WRITE		2
diff -X dontdiff -Nurp linux-2.6.17.3.orig/include/linux/gobolinux.h linux-2.6.17.3/include/linux/gobolinux.h
--- linux-2.6.17.3.orig/include/linux/gobolinux.h	1969-12-31 21:00:00.000000000 -0300
+++ linux-2.6.17.3/include/linux/gobolinux.h	2006-07-06 10:20:14.000000000 -0300
@@ -0,0 +1,45 @@
+#ifndef _LINUX_GOBOLINUX_H
+#define _LINUX_GOBOLINUX_H
+
+#ifdef CONFIG_GOBOHIDE_FS
+#include <linux/fs.h>
+
+/* Gobolinux internal ioctls */
+
+#define GOBOLINUX_HIDEINODE   0x0000001 /* Hide a given inode number */
+#define GOBOLINUX_UNHIDEINODE 0x0000002 /* Unhide a given inode number */
+#define GETSTATSUIDNUMBER     0x0000003 /* Get the _number_ of inodes 
+					   being hidden */
+#define GETSTATSUID           0x0000004 /* Get the inodes hidden */
+
+struct hide {
+	struct file *filp;      /* a file pointer, used to recover the inode's pathname \
*/
+	char *pathname;         /* a fresh cache of the inode's pathname */
+	unsigned long page;		/* page on which pathname has been copied */
+	struct list_head head;  /* a simple doubly linked list */
+};
+
+struct gobolinux_hide_stats {
+	int hidden_inodes;      /* how many inodes we're hiding */
+	int filled_size;        /* how many inodes we filled on the hidden_list */
+	char **hidden_list;     /* the hidden list */
+};
+
+struct gobolinux_hide {
+	ino_t inode;                        /* the inode number */
+	const char *pathname;               /* the pathname being submitted */
+	char symlink;                       /* is inode a symlink? */
+	char operation;                     /* the operation to be performed */
+	struct gobolinux_hide_stats stats;  /* statistics about the inodes being hidden \
*/
+};
+
+struct dentry *gobolinux_get_dentry(ino_t ino, const char *pathname);
+int  gobolinux_count_hidden(struct gobolinux_hide *hide);
+int  gobolinux_show_hidden(struct gobolinux_hide *hide);
+int  gobolinux_hide(ino_t ino, struct super_block *inode_sb);
+int  gobolinux_inode_add(ino_t ino, const char *pathname);
+int  gobolinux_inode_del(ino_t ino);
+int  gobolinux_fs_ioctl(struct inode *inode, struct gobolinux_hide *hide);
+
+#endif  /* CONFIG_GOBOHIDE_FS */
+#endif  /* _LINUX_GOBOLINUX_H */
diff -X dontdiff -Nurp linux-2.6.17.3.orig/Makefile linux-2.6.17.3/Makefile
--- linux-2.6.17.3.orig/Makefile	2006-06-30 14:37:38.000000000 -0300
+++ linux-2.6.17.3/Makefile	2006-07-04 15:13:56.000000000 -0300
@@ -518,7 +518,7 @@ export MODLIB
 
 
 ifeq ($(KBUILD_EXTMOD),)
-core-y		+= kernel/ mm/ fs/ ipc/ security/ crypto/ block/
+core-y		+= kernel/ mm/ fs/ ipc/ security/ crypto/ block/ gobolinux/
 
 vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
 		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
Linux 2.6.16.20-r1 4005  133625 Luca...
The Linux Kernel.
Linux 2.6.16.14-r1 4005  168270 Luca...
The Linux Kernel.
Linux 2.6.15.5-r1 4005  224686 Jona...
The Linux Kernel.
Linux 2.6.15.2-r1 4005  177165 Carl...
The Linux Kernel.
Linux 2.6.15.1-r1 4005  149219 Jona...
The Linux Kernel.
Linux 2.6.15-r1 4005  149214 Luca...
The Linux Kernel.
Linux 2.6.14.4-r1 4005  150166 Jona...
The Linux Kernel.
Linux 2.6.14.3-r1 4005  150060 Jona...
The Linux Kernel.
Linux 2.6.14.2-r1 4005  149791 Carl...
The Linux Kernel.
Linux 2.6.13.4-r1 4005  149559 Luca...
The Linux Kernel.
Linux 2.6.13.2-r1 4005  56611 Jona...
The Linux Kernel.
Linux 2.6.13.1-r1 4005  56378 Luca...
The Linux Kernel.
Linux 2.6.12.2-r1 4005  50355 Luca...
The Linux Kernel.
Linux 2.6.11.9-r1 4005  98969 Luca...
The Linux Kernel.
Linux 2.6.11.8-r1 4005  109424 Jona...
The Linux Kernel.
Linux 2.6.11-r1 4005  99032 Luca...
The Linux Kernel.
Linux 2.6.10-r1 4005  65969 Luca...
The Linux Kernel.
Linux 2.6.9-r1 4005  278461 Luca...
The Linux Kernel.
Linux 2.6.8.1-r1 4005  35576 Luca...
The Linux Kernel.
Linux 2.6.7-r1 4005  22610 Luca...
The Linux Kernel.
Linux 2.6.6-r1 4005  21958 Luca...
The Linux Kernel.
Linux 2.4.26-r1 4005  22359 Luca...
The Linux Kernel.