The GLOCK is held while calling the filldir function in afs_linux_readdir().
If this function causes a page fault, and in particular if this fault
involves AFS, we're in trouble as we'll eventually deadlock in the
readpage code.
A simple test case for this is to call the getdents syscall on an
AFS directory with a buffer that is part of an mmaped AFS file.
This is already the case in the master branch; the change was part of
the merge of the NFS translator code.
FIXES 125555
Change-Id: I829838e45f94921d22335154587216f7842e3955
Reviewed-on: http://gerrit.openafs.org/760
Tested-by: Marc Dionne <marc.c.dionne@gmail.com>
Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
/* clean up from afs_FindVCache */
afs_PutVCache(tvc);
}
+ AFS_GUNLOCK();
code = (*filldir) (dirbuf, de->name, len, offset, ino, type);
+ AFS_GLOCK();
}
#else
code = (*filldir) (dirbuf, de->name, len, offset, ino);