From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sat, 12 Oct 2002 18:23:23 +0400 From: Sergey Vlasov To: ALT Discussion List , Sisyphus ML Cc: ALT Developers List Message-Id: <20021012182323.5f35d14e.vsu@altlinux.ru> X-Mailer: Sylpheed version 0.8.5 (GTK+ 1.2.10; i586-alt-linux) Mime-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit Subject: [Comm] BUG: uw-imap locking does not work on reiserfs Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: Внимание, грабли! В uw-imap (по крайней мере, в версии uw-imap-2001a-alt6) не работает блокировка почтовых ящиков, если они находятся на файловой системе reiserfs (проверено с ядром 2.4.18-up-alt8). На ext2, ext3 блокировка работает. На других файловых системах тоже могут быть проблемы - не проверял. Ошибка может приводить к порче почтовых ящиков и потере сообщений. Причина, похоже, в следующем куске кода (src/osdep/unix/nfstnew.c): /* Test for NFS * Accepts: file descriptor * Returns: T if NFS file, NIL otherwise */ long test_nfs (int fd) { struct stat sbuf; struct ustat usbuf; struct statvfs vsbuf; /* Any base type that begins with "nfs" or "afs" is considered to be a * network filesystem. */ return ((!fstat (fd,&sbuf) && !ustat (sbuf.st_dev,&usbuf) && !++usbuf.f_tinode) || (!fstatvfs (fd,&vsbuf) && (vsbuf.f_basetype[1] == 'f') && (vsbuf.f_basetype[2] == 's') && ((vsbuf.f_basetype[0] == 'n') || (vsbuf.f_basetype[0] == 'a')))) ? LONGT : NIL; } На reiserfs функция ustat возвращает f_tinode == -1, в результате чего uw-imap считает, что работает с NFS, и прекращает использовать блокировки через fcntl (остается только dotlock, но этот метод не работает с системными ящиками в /var/spool/mail). -- Sergey Vlasov