Problem while deleting mailbox on a private spool on NFS

Christophe Boyanique tof at raceme.org
Thu Mar 24 06:24:57 EST 2005


Derrick J Brashear a écrit :

> I suspect if you watch nfs network traffic you see a failed attempt to 
> delete the directory, the problem is likely that the nfs server for some 
> reason believes a file in the directory is still existant or possibly 
> even open and so is unwilling to delete. Is anything in your log?

You're right: the directory delete fails because directory is not empty.

The nfs implementation renames the 3 cyrus.* files to .nfs.something 
when deleting them. When Cyrus tries to delete the parent directory; it 
fails because these 3 files are still there.

So the question is: why these 3 files are still there ?

With a workmate we watched into Cyrus code and found that it tries to 
delete the mailbox directory before closing these 3 files handles opened 
just before. That works on local filesystem and doesn't work over NFS.

Here is a patch (appliable to Debian 2.1.17 or upstream 2.1.18 or 
2.2.12) in the mailbox_delete function in the imap/mailbox.c file which 
corrects this behaviour and solves the reported problem:

+++ cut +++
diff -Naur cyrus-imapd-2.1.17/imap/mailbox.c 
cyrus-imapd-2.1.17.patched/imap/mailbox.c
--- cyrus-imapd-2.1.17/imap/mailbox.c   2003-11-04 22:43:00.000000000 +0100
+++ cyrus-imapd-2.1.17.patched/imap/mailbox.c   2005-03-24 
11:57:14.000000000 +0100
@@ -2275,13 +2275,14 @@
         closedir(dirp);
      }

+    /* Close mailbox directory before removing it */
+    mailbox_close(mailbox);
+
      /* Remove empty directories, going up path */
      tail--;
      do {
         *tail = '\0';
      } while (rmdir(buf) == 0 && (tail = strrchr(buf, '/')));
-
-    mailbox_close(mailbox);
      return 0;
  }

+++ cut +++

 From what I saw, it doesn't seem to introduce side effect as the 
mailbox is to be deleted and the mailbox_delete function is only called 
from the mboxlist.c file; but as it is the first time I dig in the Cyrus 
code I'd like any feedback about this modification...

Christophe.
---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html




More information about the Info-cyrus mailing list