[Ocfs2-commits] zab commits r1722 - trunk/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue Dec 28 13:06:31 CST 2004
Author: zab
Date: 2004-12-28 13:06:29 -0600 (Tue, 28 Dec 2004)
New Revision: 1722
Modified:
trunk/src/24io.c
Log:
o fix potential use-after-free in aio completions with errors
(though my head is big, my brain is small)
Modified: trunk/src/24io.c
===================================================================
--- trunk/src/24io.c 2004-12-28 01:06:33 UTC (rev 1721)
+++ trunk/src/24io.c 2004-12-28 19:06:29 UTC (rev 1722)
@@ -370,20 +370,20 @@
unmap_kvec(vec, rw == READ);
free_kvec(vec);
- if (res <= 0)
- ocfs_aio_complete(iocb, res);
+ if (res > 0)
+ iocb->nr_transferred += res;
- iocb->nr_transferred += res;
-
- if ((res != iocb->this_size) || iocb->ctx->dead ||
- (iocb->nr_transferred == iocb->size)) {
- ocfs_aio_complete(iocb, 0);
+ /* we only issue a continuation if this part suceeded
+ * and there is more remaining */
+ if (!iocb->ctx->dead && res == iocb->this_size &&
+ iocb->nr_transferred < iocb->size) {
+ iocb->this_size = rw;
+ INIT_TQUEUE(&iocb->u.tq, ocfs_aio_issue, iocb);
+ schedule_task(&iocb->u.tq);
return;
}
- iocb->this_size = rw;
- INIT_TQUEUE(&iocb->u.tq, ocfs_aio_issue, iocb);
- schedule_task(&iocb->u.tq);
+ ocfs_aio_complete(iocb, res);
}
static void ocfs_aio_complete_read(void *_iocb, struct kvec *vec, ssize_t res)
More information about the Ocfs2-commits
mailing list