Best way to find where a lock is taken and not released?

Nigel Cunningham
2004-10-16T09:33:37Z

Hi all.

I saw a hang the other day (2.6.8.1) where all other processes except
the suspending to disk one were refrigerated and the process doing the
suspending was stuck trying to take the dcache_lock via
shrink_all_memory. Obviously some path called via shrink_all_memory had
taken the lock and not released it, then tried to retake it _or_ another
process had taken the lock and then not released it when backing out and
entering the refrigator. My question is, what's the best way to find the
path on which this occurs? Grepping, I see dcache_lock all over the
show, so if there's a more efficient method that reading the files, I'd
like to learn it. It occurs to me that I might try wrapping calls to
lock and unlock that lock in printks, but I'm wondering if there's some
better way I don't yet know.

Regards,

Nigel
--
Nigel Cunningham
Pastoral Worker
Christian Reformed Church of Tuggeranong
PO Box 1004, Tuggeranong, ACT 2901

Many today claim to be tolerant. True tolerance, however, can cope with others
being intolerant.