[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
Wed, 07 Sep 2005 18:43:15 +0200
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 / # dmesg
[cut]
Starting AFS cache scan...found 0 non-empty cache files (0%).
afs_dentry_iput("phylo.natur.cuni.cz", f6eaed64)
AFS isn't unmounted yet! Call aborted
AFS isn't unmounted yet! Call aborted
afs_dentry_iput("afsws", e7cf802c)
afs_dentry_iput("home", e7df2d64)
afs_dentry_iput("phylo.natur.cuni.cz", f6eae260)
afs_dentry_iput("usr", e7cf8d64)
afs_dentry_iput("i386_linux26", e7d12260)
afs_dentry_iput(".phylo.natur.cuni.cz", f6eaed64)
afs_dentry_iput("/", f6eae8fc)
COLD shutting down of: CB... afs... BkG... CTrunc... AFSDB... RxEvent... UnmaskRxkSignals... RxListener...
phylo / #
So, it looks like the right approach. Would you suggest some more tests
for the RW mounts? I often work with RW volumes.
M.
chas williams - CONTRACTOR wrote:
> In message <0177ADA1C8ECB841A21DD4AC@endicott>,Chaskiel M Grundman writes:
>
>>I don't know. I don't really have a guess as to what the problem is. I'd
>>probably start by reintroducing the debugging code into
>>osi_linux_free_inode_pages. Perhaps also dump the old/new inode pointer
>>values and dp->d_count when the root changes so we know if it is the new or
>>old root that is the leftover inode.
>
>
> i did all that initially when i wrote the code. but after looking at
> this with some fresh eyes i see that i forgot to dput() the reference
> i took from d_find_alias(). the following seems to work now without
> resetting d_count.
>
> better?
>
> 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 7 Sep 2005 13:00:50 -0000
> @@ -309,8 +309,56 @@
> * 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
> + dput(dp);
> +
> + 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