[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