[devel] BUG: uw-imap locking does not work on reiserfs
Sergey Vlasov
=?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Сб Окт 12 18:23:23 MSD 2002
Внимание, грабли!
В 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
Подробная информация о списке рассылки Devel