[OpenAFS-devel] appears that cvs trunk has a deadlock problem of some sort for linux24

Srikanth Vishwanathan vsrikanth@in.ibm.com
Thu, 4 Apr 2002 15:48:25 -0500


Hi -

This part of the code is needlessly complicated. The first
for loop is not at all required. We could get rid of the first
for loop and directly call TryFlush..() in the second for loop.

Something like:


#endif /* AFS_FBSD_ENV */

+#if defined(AFS_LINUX22_ENV)
+          if (tvc !=3D afs_globalVp && tvc->vrefCount && tvc->opens =3D=
=3D 0)
+              afs_TryFlushDcacheChildren(tvc);
+#endif

 =A0 =A0 =A0 =A0 =A0 if (VREFCOUNT(tvc) =3D=3D 0 && tvc->opens =3D=3D 0=

 =A0 =A0 =A0 =A0 =A0 =A0 =A0 && (tvc->states & CUnlinkedDel) =3D=3D 0) =
{
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0code =3D afs_FlushVCache(tvc, &fv_slept=
);
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (code =3D=3D 0) {
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0anumber--;
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (fv_slept) {
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0uq =3D VLRU.prev;
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0i =3D 0;
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0continue; =A0/* start over - may ha=
ve raced. */
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
 =A0 =A0 =A0 =A0 =A0 }
 =A0 =A0 =A0 =A0 =A0 if (tq =3D=3D uq ) break;
 =A0 =A0 =A0 =A0}

We also need to change TryFlushDcacheChildren to take a struct vcache *=

and traverse all its dentries (and their children).

I sent the previous post to "openafs-devel-admin@openafs.org" by mistak=
e.
Sorry about that.

Thanks,

Srikanth.
=