kAFS automount support
David Howells
maintainerPATCH 1/1 kAFS automount support
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
fs/afs/cmservice.c +0 -4
@@ -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);
fs/afs/internal.h +0 -2
@@ -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);
fs/afs/mntpt.c +0 -9
@@ -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
fs/afs/super.c +0 -2
@@ -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 );