On Sun, November 4, 2007 2:54 pm, mikkel@euro123.dk wrote:
You could truss the hanging process to see what it's doing. It's not an easy task since the delay is sometimes just a few (5-10) seconds. And when there is a complete stall the client aborts before I can find the process. But I'll give it a go.
I tried trussing a normal running process. Here's what I see all the time:
stat64("[path]/Maildir/new", 0xFFBFF470) = 0 stat64("[path]/Maildir/cur", 0xFFBFF4E0) = 0 stat64("[path]/Maildir/new", 0xFFBFF2F0) = 0 stat64("[path]/Maildir/cur", 0xFFBFF258) = 0 stat64("[path]/Maildir/dovecot-uidlist", 0xFFBFF1D0) = 0 chown("[path]/Maildir/dovecot-uidlist", 105, -1) = 0 stat64("[path]/Maildir/dovecot-uidlist", 0xFFBFF2F0) = 0 stat64("[path]/Maildir/dovecot.index.log", 0xFFBFDAE0) = 0 chown("[path]/Maildir/dovecot.index.log", 105, -1) = 0 stat64("[path]/Maildir/dovecot.index.log", 0xFFBFDBF0) = 0
What i notice is that stat64 is very often called twice in a row on the same file. Also I notice that chown() is always run before a file is accessed.
Regarding chown it looks like dovecot either thinks that the file hasn't got the rights it should have, or it just calls chown anyway to be sure.
I'm not a C-programmer so I have no idea whether its supposed to be like that. But if it isnt then perhaps it could explain the many writes (chowning constantly)?
What do you think?