[PVFS2-CVS] commit by neill in pvfs2/src/io/trove/trove-handle-mgmt: trove-handle-mgmt.c

CVS commit program cvs at parl.clemson.edu
Tue Feb 3 14:58:47 EST 2004


Update of /projects/cvsroot/pvfs2/src/io/trove/trove-handle-mgmt
In directory acid:/tmp/cvs-serv15130/src/io/trove/trove-handle-mgmt

Modified Files:
	trove-handle-mgmt.c 
Log Message:
- handle allocator cleanups
- make sure allocator doesn't return non-zero handles if no ranges were set
- make trove test force a specific handle allocation


Index: trove-handle-mgmt.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/trove/trove-handle-mgmt/trove-handle-mgmt.c,v
diff -p -u -r1.33 -r1.34
--- trove-handle-mgmt.c	30 Jan 2004 20:12:13 -0000	1.33
+++ trove-handle-mgmt.c	3 Feb 2004 19:58:47 -0000	1.34
@@ -28,6 +28,7 @@ typedef struct
     struct qlist_head hash_link;
 
     TROVE_coll_id coll_id;
+    int have_valid_ranges;
 
     struct handle_ledger *ledger;
 } handle_ledger_t;
@@ -58,7 +59,8 @@ static int trove_check_handle_ranges(TRO
     TROVE_op_id op_id = 0;
     TROVE_ds_state state = 0;
     TROVE_ds_position pos = TROVE_ITERATE_START;
-    static TROVE_handle handles[MAX_NUM_VERIFY_HANDLE_COUNT] = {0};
+    static TROVE_handle handles[MAX_NUM_VERIFY_HANDLE_COUNT] =
+        {TROVE_HANDLE_NULL};
 
     if (extent_list && ledger)
     {
@@ -145,10 +147,12 @@ static int trove_map_handle_ranges( PINT
 
 	    ret = trove_handle_ledger_addextent(ledger, cur_extent);
 	    if (ret != 0)
+            {
 		break;
+            }
 
-	    /* if, for example, you had a 'first' of 5 and a 'last' of 5, the
-	     * difference is 0, but there is one handle */
+	    /* if, for example, you had a 'first' of 5 and a 'last' of
+	     * 5, the difference is 0, but there is one handle */
 	    total_handles += (cur_extent->last - cur_extent->first + 1);
             cur = PINT_llist_next(cur);
         }
@@ -177,6 +181,7 @@ static handle_ledger_t *get_or_add_handl
         if (ledger)
         {
             ledger->coll_id = coll_id;
+            ledger->have_valid_ranges = 0;
             ledger->ledger = trove_handle_ledger_init(coll_id,NULL);
             if (ledger->ledger)
             {
@@ -277,13 +282,23 @@ int trove_set_handle_ranges(TROVE_coll_i
                 assert(ledger->ledger);
 		
 		/* tell trove what are our valid ranges are */
-		ret = trove_map_handle_ranges(extent_list, 
-			ledger->ledger);
-		if (ret != 0) return ret;
+		ret = trove_map_handle_ranges(
+                    extent_list, ledger->ledger);
+		if (ret != 0)
+                {
+                    return ret;
+                }
 
                 ret = trove_check_handle_ranges(
                     coll_id,context_id,extent_list,ledger->ledger);
-		if (ret != 0) return ret;
+		if (ret != 0)
+                {
+                    return ret;
+                }
+                else
+                {
+                    ledger->have_valid_ranges = 1;
+                }
             }
             PINT_release_extent_list(extent_list);
         }
@@ -325,13 +340,13 @@ TROVE_handle trove_handle_alloc(TROVE_co
 {
     handle_ledger_t *ledger = NULL;
     struct qlist_head *hash_link = NULL;
-    TROVE_handle handle = (TROVE_handle)0;
+    TROVE_handle handle = TROVE_HANDLE_NULL;
 
     hash_link = qhash_search(s_fsid_to_ledger_table,&(coll_id));
     if (hash_link)
     {
         ledger = qlist_entry(hash_link, handle_ledger_t, hash_link);
-        if (ledger)
+        if (ledger && (ledger->have_valid_ranges == 1))
         {
             handle = trove_ledger_handle_alloc(ledger->ledger);
         }
@@ -355,26 +370,28 @@ TROVE_handle trove_handle_alloc_from_ran
 {
     handle_ledger_t *ledger = NULL;
     struct qlist_head *hash_link = NULL;
-    TROVE_handle handle = (TROVE_handle)0;
-    int i;
+    TROVE_handle handle = TROVE_HANDLE_NULL;
+    int i = 0;
 
     hash_link = qhash_search(s_fsid_to_ledger_table, &(coll_id));
     if (hash_link)
     {
-	ledger = qlist_entry(hash_link, handle_ledger_t, hash_link);
-	if (ledger)
-	{
-	    for(i=0; i<extent_array->extent_count; i++) {
-		handle = trove_ledger_handle_alloc_from_range(ledger->ledger, 
-		    &(extent_array->extent_array[i]));
-		if (handle != 0) break;
-	    }
-	}
+        ledger = qlist_entry(hash_link, handle_ledger_t, hash_link);
+        if (ledger && (ledger->have_valid_ranges == 1))
+        {
+            for(i = 0; i < extent_array->extent_count; i++)
+            {
+                handle = trove_ledger_handle_alloc_from_range(
+                    ledger->ledger, &(extent_array->extent_array[i]));
+                if (handle != TROVE_HANDLE_NULL)
+                {
+                    break;
+                }
+            }
+        }
     }
     return handle;
 }
-
-    
 
 int trove_handle_set_used(TROVE_coll_id coll_id, TROVE_handle handle)
 {



More information about the PVFS2-CVS mailing list