]> git.michaelhowe.org Git - packages/o/openafs.git/commit
STABLE14-vmalloc-no-glock-20070418
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Wed, 18 Apr 2007 19:04:10 +0000 (19:04 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 18 Apr 2007 19:04:10 +0000 (19:04 +0000)
commita9f5e9b4f86e63b64fecb557c3f5249df5e7ea18
treec80b1bfa486a6b3f035ebeacd5f88656f3fb1045
parent20f2501322d0fc35ca061eac323359401d994899
STABLE14-vmalloc-no-glock-20070418

Based on Chris Wing's analysis which stated in part:
GFP_NOFS tells the allocator not to recurse back into the filesystem if it's
necessary to free up memory.  However, vmalloc() does not have such an
option.  Therefore, calling osi_Alloc() to request more than a page of
memory may end up recursing back into AFS to try to free unused inodes or
dentries.

In this case, what happened was that osi_Alloc() is called within an
AFS_GLOCK(); osi_Alloc() calls vmalloc() which tries to free dentry objects,
which then calls back into the AFS module.  Unfortunately, AFS_GLOCK() is
already held and we deadlock.

(cherry picked from commit 9943fe1fd71fc29331dcac7cd6a51bd37f307876)
src/afs/LINUX/osi_alloc.c