Zach Brown wrote: > It will not return until kiocbSetKicked() is called, > and that is only called from kick_iocb(). There is no test or wait of Kicked in considered for (;;) aio_write() loop.
Zach Brown wrote: >> The proposed patch does not crate this bug if any. > Right, and I said that in the mail you're quoting. ... > You're introducing other bugs with the patch. Could you list other introduced bugs? >> It is interesting that I've not seen any EIOCBQUEUED returned >> to aio_run_iocb() during 5 hours aiostress running. > What arguments are you running aio-stress with? -EIOCBQUEUED is only > used for O_DIRECT I wrote in the vary first mail that the panic is appearing in random write O_DIRECT aio-stress running. Other aio-stress modes where tested after patching as well. > and then only in certain circumstances. Looking closely into sources we can see that EIOCBQUEUED never may be returned to aio_run_iocb(). include/linux/aio.h says * If ki_retry returns -EIOCBRETRY ... Could you point source line which "returns -EIOCBRETRY"? Leonid -----Original Message----- From: Zach Brown [mailto:[EMAIL PROTECTED] Sent: Friday, February 16, 2007 3:01 AM To: Ananiev, Leonid I Cc: Ken Chen; [EMAIL PROTECTED]; Andrew Morton; linux-kernel@vger.kernel.org; linux-aio; Chris Mason Subject: Re: [PATCH] aio: fix kernel bug when page is temporally busy On Feb 15, 2007, at 3:32 PM, Ananiev, Leonid I wrote: >>> If EIOCBRETRY then generic_file_aio_write() will be recalled for the >>> same iocb. >> Only if kick_iocb() is called. It won't be called if i_i_p2_r() was >> the only thing to return -EIOCBRETRY. > It is not need to call kick_iocb() > for generic_file_aio_write() calling. > It is recalled without any wakeup waiting: > for (;;) { > ret = filp->f_op->aio_write(&kiocb, &iov, 1, > kiocb.ki_pos); > if (ret != -EIOCBRETRY) > break; > wait_on_retry_sync_kiocb(&kiocb); > } > Note: wait_on_retry_sync_kiocb() does not wait. Yes it does. It will not return until kiocbSetKicked() is called, and that is only called from kick_iocb(). >>> It overwrites -EIOCBQUEUED > Do you mean that there is one more kernel bug which > overwrites -EIOCBQUEUED by any errno or number of bytes and this > new value is returned to caller as an IO result > while IO is not finished yet. > > The proposed patch does not crate this bug if any. Right, and I said that in the mail you're quoting. > It actually fixes a kernel panic bag when iocb.users count becomes > incorrect. The bag " Kernel BUG at fs/aio.c:509" is there because > aio_run_iocb() have not a chance to differ real EIO and > EIO which is actually means EAGAYN or EIOCBRETRY. Yes, I understand the bug you're trying to fix. You're introducing other bugs with the patch. It will not be merged. > It is interesting that I've not seen any EIOCBQUEUED returned > to aio_run_iocb() during 5 hours aiostress running. What arguments are you running aio-stress with? -EIOCBQUEUED is only used for O_DIRECT, and then only in certain circumstances. - z - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/