From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261422AbUF3TlT (ORCPT ); Wed, 30 Jun 2004 15:41:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261474AbUF3TlT (ORCPT ); Wed, 30 Jun 2004 15:41:19 -0400 Received: from mx1.redhat.com ([66.187.233.31]:26531 "EHLO mx1.redhat.com") by vger.kernel.org with ESMTP id S261422AbUF3TlH (ORCPT ); Wed, 30 Jun 2004 15:41:07 -0400 From: David Howells To: torvalds@osdl.com, akpm@osdl.com Cc: linux-kernel@vger.kernel.org, viro@parcelfarce.linux.theplanet.co.uk Subject: [PATCH] kAFS automount support User-Agent: EMH/1.14.1 SEMI/1.14.5 (Awara-Onsen) FLIM/1.14.5 (Demachiyanagi) APEL/10.6 Emacs/21.3 (i386-redhat-linux-gnu) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Date: Wed, 30 Jun 2004 20:40:48 +0100 Message-ID: <31049.1088624448@redhat.com> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Hi Linus, Andrew, Here's a patch to allow the kAFS filesystem to use the automount facility patch presented in a previous email. It allows me to mount an AFS root volume on /afs and then just walk through the directory structure causing referenced volumes to be automounted and autoumounted. For instance, if I do: [root@andromeda root]# mount -t afs \#root.afs. /afs [root@andromeda root]# ls /afs asd cambridge cambridge.redhat.com grand.central.org [root@andromeda root]# ls /afs/cambridge afsdoc [root@andromeda root]# ls /afs/cambridge/afsdoc/ ChangeLog html LICENSE pdf RELNOTES-1.2.2 And then look in the mountpoint catalogue, I see: [root@andromeda root]# cat /proc/mounts ... #root.afs. /afs afs rw 0 0 #root.cell. /afs/cambridge.redhat.com afs rw 0 0 #afsdoc. /afs/cambridge.redhat.com/afsdoc afs rw 0 0 Then after waiting a few minutes: [root@andromeda root]# cat /proc/mounts ... #root.afs. /afs afs rw 0 0 Is all that remains. David diff -uNr linux-2.6.7/fs/afs/cmservice.c linux-2.6.7-auto/fs/afs/cmservice.c --- linux-2.6.7/fs/afs/cmservice.c 2004-06-18 13:41:16.000000000 +0100 +++ linux-2.6.7-auto/fs/afs/cmservice.c 2004-06-30 20:04:06.392069575 +0100 @@ -307,10 +307,8 @@ if (ret < 0) goto kill; -#ifdef AFS_AUTOMOUNT_SUPPORT afs_kafstimod_add_timer(&afs_mntpt_expiry_timer, afs_mntpt_expiry_timeout * HZ); -#endif } afscm_usage++; @@ -392,9 +390,7 @@ } spin_unlock(&kafscmd_attention_lock); -#ifdef AFS_AUTOMOUNT_SUPPORT afs_kafstimod_del_timer(&afs_mntpt_expiry_timer); -#endif } up_write(&afscm_sem); diff -uNr linux-2.6.7/fs/afs/internal.h linux-2.6.7-auto/fs/afs/internal.h --- linux-2.6.7/fs/afs/internal.h 2004-06-18 13:41:17.000000000 +0100 +++ linux-2.6.7-auto/fs/afs/internal.h 2004-06-30 20:04:06.390069741 +0100 @@ -107,11 +107,9 @@ */ extern struct inode_operations afs_mntpt_inode_operations; extern struct file_operations afs_mntpt_file_operations; -#ifdef AFS_AUTOMOUNT_SUPPORT extern struct afs_timer afs_mntpt_expiry_timer; extern struct afs_timer_ops afs_mntpt_expiry_timer_ops; extern unsigned long afs_mntpt_expiry_timeout; -#endif extern int afs_mntpt_check_symlink(struct afs_vnode *vnode); diff -uNr linux-2.6.7/fs/afs/mntpt.c linux-2.6.7-auto/fs/afs/mntpt.c --- linux-2.6.7/fs/afs/mntpt.c 2004-06-18 13:41:16.000000000 +0100 +++ linux-2.6.7-auto/fs/afs/mntpt.c 2004-06-30 20:04:04.180253426 +0100 @@ -30,10 +30,7 @@ struct dentry *dentry, struct nameidata *nd); static int afs_mntpt_open(struct inode *inode, struct file *file); - -#ifdef AFS_AUTOMOUNT_SUPPORT static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd); -#endif struct file_operations afs_mntpt_file_operations = { .open = afs_mntpt_open, @@ -41,14 +38,11 @@ struct inode_operations afs_mntpt_inode_operations = { .lookup = afs_mntpt_lookup, -#ifdef AFS_AUTOMOUNT_SUPPORT .follow_link = afs_mntpt_follow_link, -#endif .readlink = page_readlink, .getattr = afs_inode_getattr, }; -#ifdef AFS_AUTOMOUNT_SUPPORT static LIST_HEAD(afs_vfsmounts); static void afs_mntpt_expiry_timed_out(struct afs_timer *timer); @@ -60,7 +54,6 @@ struct afs_timer afs_mntpt_expiry_timer; unsigned long afs_mntpt_expiry_timeout = 20; -#endif /*****************************************************************************/ /* @@ -156,7 +149,6 @@ return -EREMOTE; } /* end afs_mntpt_open() */ -#ifdef AFS_AUTOMOUNT_SUPPORT /*****************************************************************************/ /* * create a vfsmount to be automounted @@ -288,4 +280,3 @@ kleave(""); } /* end afs_mntpt_expiry_timed_out() */ -#endif diff -uNr linux-2.6.7/fs/afs/super.c linux-2.6.7-auto/fs/afs/super.c --- linux-2.6.7/fs/afs/super.c 2004-06-18 13:41:16.000000000 +0100 +++ linux-2.6.7-auto/fs/afs/super.c 2004-06-30 20:04:06.394069408 +0100 @@ -78,9 +78,7 @@ _enter(""); -#ifdef AFS_AUTOMOUNT_SUPPORT afs_timer_init(&afs_mntpt_expiry_timer, &afs_mntpt_expiry_timer_ops); -#endif /* create ourselves an inode cache */ atomic_set(&afs_count_active_inodes, 0);