[OpenAFS-devel] kernel BUG at /scratch/openafs/src/libafs/MODLOAD-2.6.13-MP/rx_kcommon.c:131!

Martin MOKREJŠ mmokrejs@ribosome.natur.cuni.cz
Tue, 06 Sep 2005 12:34:27 +0200


Yes, this works fine too, but ...

phylo .phylo.natur.cuni.cz # /usr/vice/etc/afsd -shutdown -debug -verbose
afsd: Shutting down all afs processes and afs state
SScall(137, 28, 201)=13 afsd: AFS still mounted; Not shutting down
phylo .phylo.natur.cuni.cz # umount /afs
umount: /afs: device is busy
umount: /afs: device is busy
phylo .phylo.natur.cuni.cz # /usr/vice/etc/afsd -shutdown -debug -verbose
afsd: Shutting down all afs processes and afs state
SScall(137, 28, 201)=13 afsd: AFS still mounted; Not shutting down
phylo .phylo.natur.cuni.cz # cd /
phylo / # umount /afs
phylo / #

phylo / # dmesg
[cut]
Starting AFS cache scan...found 0 non-empty cache files (0%).
afs_dentry_iput("phylo.natur.cuni.cz", e7d98260)
AFS isn't unmounted yet! Call aborted
AFS isn't unmounted yet! Call aborted
afs_dentry_iput("afsws", e772102c)
afs_dentry_iput("home", e83bfb30)
afs_dentry_iput("phylo.natur.cuni.cz", e7d98b30)
afs_dentry_iput("usr", e76c8b30)
afs_dentry_iput("i386_linux26", e7721b30)
afs_dentry_iput(".phylo.natur.cuni.cz", e7d98260)
Failed to invalidate all pages on inode 0xe76c8d64
COLD shutting down of: CB... afs... BkG... CTrunc... AFSDB... RxEvent... UnmaskRxkSignals... RxListener... 
VFS: Busy inodes after unmount. Self-destruct in 5 seconds.  Have a nice day...
phylo / #


chas williams - CONTRACTOR wrote:
> In message <431C64B7.10103@ribosome.natur.cuni.cz>,=?ISO-8859-2?Q?Martin_MOKREJ=A9?= writes:
> 
>>Yes, it doesn't crash anymore:
> 
> 
> good.  could you please try this patch?  this should be right way to fix
> the problem.  we lookup the new root volume and stick it in the dentry.
> then, we can drop the dentry's reference on the the old root inode and
> put the new inode into the global reference to the root inode.
> 
> if anything fails, we just leave things alone.
> 
> Index: src/afs/afs_daemons.c
> ===================================================================
> RCS file: /cvs/openafs/src/afs/afs_daemons.c,v
> retrieving revision 1.33
> diff -u -u -r1.33 afs_daemons.c
> --- src/afs/afs_daemons.c	3 Apr 2005 18:13:30 -0000	1.33
> +++ src/afs/afs_daemons.c	6 Sep 2005 01:04:48 -0000
> @@ -309,8 +309,55 @@
>  		 * count to zero and fs checkv is executed when the current
>  		 * directory is /afs.
>  		 */
> +
> +#ifdef AFS_LINUX20_ENV
> +		{
> +			struct vrequest treq;
> +			struct vattr vattr;
> +			cred_t *credp;
> +			struct dentry *dp;
> +			struct vcache *vcp;
> +
> +			afs_rootFid.Fid.Volume = volid;
> +			afs_rootFid.Fid.Vnode = 1;
> +			afs_rootFid.Fid.Unique = 1;
> +
> +			credp = crref();
> +			if (afs_InitReq(&treq, credp))
> +			    goto out;
> +			vcp = afs_GetVCache(&afs_rootFid, &treq, NULL, NULL);
> +			if (!vcp)
> +			    goto out;
> +			afs_getattr(vcp, &vattr, credp);
> +			afs_fill_inode(AFSTOV(vcp), &vattr);
> +
> +			dp = d_find_alias(AFSTOV(afs_globalVp));
> +
> +#if defined(AFS_LINUX24_ENV)
> +			spin_lock(&dcache_lock);
> +#if defined(AFS_LINUX26_ENV)
> +			spin_lock(&dp->d_lock);
> +#endif
> +#endif
> +			list_del_init(&dp->d_alias);
> +			list_add(&dp->d_alias, &(AFSTOV(vcp)->i_dentry));
> +			dp->d_inode = AFSTOV(vcp);
> +#if defined(AFS_LINUX24_ENV)
> +#if defined(AFS_LINUX26_ENV)
> +			spin_unlock(&dp->d_lock);
> +#endif
> +			spin_unlock(&dcache_lock);
> +#endif
> +
> +			AFS_FAST_RELE(afs_globalVp);
> +			afs_globalVp = vcp;
> +out:
> +			crfree(credp);
> +		}
> +#else
>  		AFS_FAST_RELE(afs_globalVp);
>  		afs_globalVp = 0;
> +#endif
>  	    }
>  	    afs_rootFid.Fid.Volume = volid;
>  	    afs_rootFid.Fid.Vnode = 1;
> _______________________________________________
> OpenAFS-devel mailing list
> OpenAFS-devel@openafs.org
> https://lists.openafs.org/mailman/listinfo/openafs-devel
> 
> 

-- 
Martin Mokrejs
Email: 'bW9rcmVqc21Acmlib3NvbWUubmF0dXIuY3VuaS5jeg==\n'.decode('base64')
GPG key is at http://www.natur.cuni.cz/~mmokrejs