? pvfs-fix-coalesce-retcode.patch
Index: src/io/trove/trove-dbpf/dbpf-bstream.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-bstream.c,v
retrieving revision 1.76.6.2
diff -a -u -r1.76.6.2 dbpf-bstream.c
--- src/io/trove/trove-dbpf/dbpf-bstream.c	18 Dec 2006 20:48:35 -0000	1.76.6.2
+++ src/io/trove/trove-dbpf/dbpf-bstream.c	10 Mar 2007 01:29:23 -0000
@@ -156,9 +156,10 @@
                      list_proc_state_strings[
                      op_p->u.b_rw_list.list_proc_state]);
 
+	cur_op->state = ret;
         /* this is a macro defined in dbpf-thread.h */
         dbpf_queued_op_complete(
-            cur_op, ret,
+            cur_op,
             ((ret == -TROVE_ECANCEL) ? OP_CANCELED : OP_COMPLETED));
 
         start_delayed_ops_if_any(1);
@@ -408,6 +409,7 @@
                              (int)aiocb_ptr_array[i]->aio_nbytes,
                              aiocb_ptr_array[i]->aio_buf,
                              (int)aiocb_ptr_array[i]->aio_lio_opcode);
+
             }
         }
 
Index: src/io/trove/trove-dbpf/dbpf-dspace.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-dspace.c,v
retrieving revision 1.141.8.2
diff -a -u -r1.141.8.2 dbpf-dspace.c
--- src/io/trove/trove-dbpf/dbpf-dspace.c	13 Jan 2007 03:13:21 -0000	1.141.8.2
+++ src/io/trove/trove-dbpf/dbpf-dspace.c	10 Mar 2007 01:29:23 -0000
@@ -1242,8 +1242,9 @@
             dbpf_queued_op_put_and_dequeue(cur_op);
             assert(cur_op->op.state == OP_DEQUEUED);
 
+	    cur_op->state = 0;
             /* this is a macro defined in dbpf-thread.h */
-            dbpf_queued_op_complete(cur_op, 0, OP_CANCELED);
+            dbpf_queued_op_complete(cur_op, OP_CANCELED);
 
             gossip_debug(
                 GOSSIP_TROVE_DEBUG, "op %p is canceled\n", cur_op);
Index: src/io/trove/trove-dbpf/dbpf-op-queue.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-op-queue.c,v
retrieving revision 1.28.8.1
diff -a -u -r1.28.8.1 dbpf-op-queue.c
--- src/io/trove/trove-dbpf/dbpf-op-queue.c	15 Jan 2007 19:46:18 -0000	1.28.8.1
+++ src/io/trove/trove-dbpf/dbpf-op-queue.c	10 Mar 2007 01:29:23 -0000
@@ -368,10 +368,9 @@
 }
 
 int dbpf_queued_op_complete(dbpf_queued_op_t * qop_p,
-                            TROVE_ds_state ret,
                             enum dbpf_op_state state)
 {
-    DBPF_COMPLETION_START(qop_p, ret, state);
+    DBPF_COMPLETION_START(qop_p, state);
     DBPF_COMPLETION_SIGNAL();
     DBPF_COMPLETION_FINISH(qop_p->op.context_id);
     return 0;
Index: src/io/trove/trove-dbpf/dbpf-op-queue.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-op-queue.h,v
retrieving revision 1.18
diff -a -u -r1.18 dbpf-op-queue.h
--- src/io/trove/trove-dbpf/dbpf-op-queue.h	13 Jul 2006 05:11:41 -0000	1.18
+++ src/io/trove/trove-dbpf/dbpf-op-queue.h	10 Mar 2007 01:29:23 -0000
@@ -84,7 +84,6 @@
     TROVE_op_id *out_op_id_p);
 
 int dbpf_queued_op_complete(dbpf_queued_op_t * op,
-                            TROVE_ds_state ret,
                             enum dbpf_op_state state);
 
 int dbpf_queued_op_sync_coalesce_db_ops(
Index: src/io/trove/trove-dbpf/dbpf-sync.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-sync.c,v
retrieving revision 1.12
diff -a -u -r1.12 dbpf-sync.c
--- src/io/trove/trove-dbpf/dbpf-sync.c	23 Oct 2006 21:28:43 -0000	1.12
+++ src/io/trove/trove-dbpf/dbpf-sync.c	10 Mar 2007 01:29:23 -0000
@@ -107,9 +107,13 @@
     struct dbpf_collection* coll = qop_p->op.coll_p;
     int cid = qop_p->op.context_id;
 
+    /* We want to set the state in all cases
+     */
+    qop_p->state = retcode;
+
     if(!DBPF_OP_DOES_SYNC(qop_p->op.type))
     {
-        dbpf_queued_op_complete(qop_p, retcode, OP_COMPLETED);
+        dbpf_queued_op_complete(qop_p, OP_COMPLETED);
         (*outcount)++;
         return 0;
     }
@@ -129,7 +133,7 @@
                      "[SYNC_COALESCE]: sync not needed, "
                      "moving to completion queue: %llu\n",
                      llu(qop_p->op.handle));
-        dbpf_queued_op_complete(qop_p, retcode, OP_COMPLETED);
+        dbpf_queued_op_complete(qop_p, OP_COMPLETED);
         return 0;
     }
 
@@ -161,7 +165,7 @@
                      "[SYNC_COALESCE]: meta sync disabled, "
                      "moving operation to completion queue\n");
 
-        ret = dbpf_queued_op_complete(qop_p, retcode, OP_COMPLETED);
+        ret = dbpf_queued_op_complete(qop_p, OP_COMPLETED);
 
         /*
          * Sync periodical if count < lw or if lw = 0 and count > hw 
@@ -216,7 +220,7 @@
                      "to completion queue\n",
                      qop_p, llu(qop_p->op.handle));
 
-        DBPF_COMPLETION_START(qop_p, retcode, OP_COMPLETED);
+        DBPF_COMPLETION_START(qop_p, OP_COMPLETED);
         (*outcount)++;
 
 
@@ -233,7 +237,7 @@
                          ready_op, llu(ready_op->op.handle));
 
             dbpf_op_queue_remove(ready_op);
-            DBPF_COMPLETION_ADD(ready_op, 0, OP_COMPLETED);
+            DBPF_COMPLETION_ADD(ready_op, OP_COMPLETED);
             (*outcount)++;
         }
 
Index: src/io/trove/trove-dbpf/dbpf-thread.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-dbpf/dbpf-thread.h,v
retrieving revision 1.10
diff -a -u -r1.10 dbpf-thread.h
--- src/io/trove/trove-dbpf/dbpf-thread.h	20 Sep 2006 04:36:14 -0000	1.10
+++ src/io/trove/trove-dbpf/dbpf-thread.h	10 Mar 2007 01:29:23 -0000
@@ -24,20 +24,18 @@
 
 int dbpf_do_one_work_cycle(int *out_count);
 
-#define DBPF_COMPLETION_START(cur_op, ret_state, end_state)        \
+#define DBPF_COMPLETION_START(cur_op, end_state)                   \
 do {                                                               \
     TROVE_context_id cid = cur_op->op.context_id;                  \
-    cur_op->state = ret_state;                                     \
+    gen_mutex_lock(dbpf_completion_queue_array_mutex[cid]);        \
+    dbpf_op_queue_add(dbpf_completion_queue_array[cid],cur_op);    \
     gen_mutex_lock(&cur_op->mutex);                                \
     cur_op->op.state = end_state;                                  \
     gen_mutex_unlock(&cur_op->mutex);                              \
-    gen_mutex_lock(dbpf_completion_queue_array_mutex[cid]);        \
-    dbpf_op_queue_add(dbpf_completion_queue_array[cid],cur_op);    \
 } while(0)
 
-#define DBPF_COMPLETION_ADD(__add_op, __retstate, __endstate)           \
+#define DBPF_COMPLETION_ADD(__add_op, __endstate)                       \
 do {                                                                    \
-    __add_op->state = __retstate;                                       \
     gen_mutex_lock(&__add_op->mutex);                                   \
     __add_op->op.state = __endstate;                                    \
     gen_mutex_unlock(&__add_op->mutex);                                 \
