Hi everybody.
I have Linux file system quota for users and enabled "fs quota" and quota plugin for LDA. My test user is already deep over quoted:
Filesystem blocks quota limit nfse:/export 23768* 10240 10240
- If I tries to deliver _short_ message to user mbox - quota works:
$ echo "123123123123" | /usr/local/libexec/dovecot/deliver -d koc
Quota root: name=Quota backend=fs args=group:mount=/var/virtual/home/I/I/koc Quota rule: root=Quota mailbox=* bytes=10383360 messages=0 mbox: data=~/:INBOX=/var/virtual/mail/I/I/koc:INDEX=MEMORY fs: root=/var/virtual/home/I/I/koc, index=, control=, inbox=/var/virtual/mail/I/I/koc fs quota add storage dir = /var/virtual/home/I/I/koc fs quota block device = nfse:/export fs quota mount point = /mount/m5 quota-fs: host=nfse, path=/export, gid=5751796, bytes quota-fs: gid=5751796, value=24338432, limit=10485760, active=1
from=<>, msgid=: save failed to INBOX: Quota exceeded (mailbox for user is full) from=<>, msgid=: rejected: Quota exceeded (mailbox for user is full) msgid=: Return-Path missing, rejection reason: Quota exceeded (mailbox for user is full)
- But if I tries to deliver _BIG_ message to user mbox - quota broken:
$ cat big.msg | /usr/local/libexec/dovecot/deliver -d koc
Quota root: name=Quota backend=fs args=group:mount=/var/virtual/home/I/I/koc Quota rule: root=Quota mailbox=* bytes=10383360 messages=0 mbox: data=~/:INBOX=/var/virtual/mail/I/I/koc:INDEX=MEMORY fs: root=/var/virtual/home/I/I/koc, index=, control=, inbox=/var/virtual/mail/I/I/koc fs quota add storage dir = /var/virtual/home/I/I/koc fs quota block device = nfse:/export fs quota mount point = /mount/m5 quota-fs: host=nfse, path=/export, gid=5751796, bytes quota-fs: gid=5751796, value=24338432, limit=10485760, active=1
write_full(/var/virtual/home/I/I/koc/.temp.pigeon01.8822.64dfacc7e57d71b4) failed: Disk quota exceeded stat(/tmp/Dovecot Delivery Mail) failed: Disk quota exceeded from=<>, msgid=: save failed to INBOX: BUG: Unknown internal error
This "write_full() failed" from: src/lib/istream-seekable.c
static ssize_t i_stream_seekable_read(struct istream_private *stream) { ... /* save to our file */ data = i_stream_get_data(sstream->cur_input, &size); if (write_full(sstream->fd, data, size) < 0) { i_assert(errno != 0); stream->istream.stream_errno = errno; i_error("write_full(%s) failed: %m", sstream->temp_path); i_stream_close(&stream->istream); return -1; } ... }
=kostik