It looks like the code should be changed to:

if (uio->uio_offset < 0 || uio->uio_offset + uio->uio_resid < 0) {
       hammer_done_transaction(&trans);
       return (EFBIG);
}

Applying that change the issue I'm able to copy zero-bytes sized files to a HAMMER partition:

master# touch /tmp/qq && cp /tmp/qq /datapool/
master# ls -l /datapool/qq
-rw-r--r--  1 root  wheel  0 Jun 10 19:43 /datapool/qq
master# mount |grep datapool
datapool on /datapool (hammer, local)

Thank you
Antonio Huete



basically the second check was <= instead of < which caught my eye.
I could be wrong, because I haven't dug into the code, but that's the most 
obvious point in the return (EFBIG) case.
Try that, Antonio, and once youve got a built kernel, try copying a zero-byte 
file to a HAMMER fs.

Regards.
Jon
________________________________________

Reply via email to