[Ocfs2-devel] ocfs2: add extent block stealing for ocfs2 v1

Tao Ma tao.ma at oracle.com
Tue Dec 15 00:04:53 PST 2009


Hi Tiger,

@@ -731,36 +715,39 @@ int ocfs2_reserve_new_inode(struct ocfs2_super *osb,
 		goto bail;
 	}
 
-	(*ac)->ac_bits_wanted = 1;
-	(*ac)->ac_which = OCFS2_AC_USE_INODE;
-
+	(*ac)->ac_bits_wanted = blocks;
 	(*ac)->ac_group_search = ocfs2_block_group_search;
+	if (type == INODE_ALLOC_SYSTEM_INODE)
+		(*ac)->ac_which = OCFS2_AC_USE_INODE;
+	else if (type == EXTENT_ALLOC_SYSTEM_INODE)
+		(*ac)->ac_which = OCFS2_AC_USE_META;
 
 	/*
 	 * stat(2) can't handle i_ino > 32bits, so we tell the
 	 * lower levels not to allocate us a block group past that
 	 * limit.  The 'inode64' mount option avoids this behavior.
 	 */
-	if (!(osb->s_mount_opt & OCFS2_MOUNT_INODE64))
+	if (type == INODE_ALLOC_SYSTEM_INODE &&
+	    !(osb->s_mount_opt & OCFS2_MOUNT_INODE64))
 		(*ac)->ac_max_block = (u32)~0U;
 
 	/*
-	 * slot is set when we successfully steal inode from other nodes.
-	 * It is reset in 3 places:
+	 * slot is set when we successfully steal inode/extent
+	 * from other nodes. It is reset in 3 places:
 	 * 1. when we flush the truncate log
 	 * 2. when we complete local alloc recovery.
 	 * 3. when we successfully allocate from our own slot.
-	 * After it is set, we will go on stealing inodes until we find the
+	 * After it is set, we will go on stealing resource until we find the
 	 * need to check our slots to see whether there is some space for us.
 	 */
 	if (slot != OCFS2_INVALID_SLOT &&
-	    atomic_read(&osb->s_num_inodes_stolen) < OCFS2_MAX_INODES_TO_STEAL)
-		goto inode_steal;
+	    ocfs2_could_steal_resource(osb, type))
+		goto resource_steal;
 
-	atomic_set(&osb->s_num_inodes_stolen, 0);
+	ATOMIC_ZERO_RESOURCE_NUMBER(type);
 	alloc_group = osb->osb_inode_alloc_group;
here, you use the alloc_group which is only used in inode alloc and reset it
after the reservation succeed. I am afraid extent alloc shouldn't use and
change it?

 	status = ocfs2_reserve_suballoc_bits(osb, *ac,
-					     INODE_ALLOC_SYSTEM_INODE,
+					     type,
 					     osb->slot_num,
 					     &alloc_group,
 					     ALLOC_NEW_GROUP |


    I am also curious about one thing. Have you written the test script 
for it to see whether it works?
You can take ocfs2-tests/programs/inode_stealing/inode_stealing.sh for 
reference.

Regards,
Tao

Jun Yang wrote:
> Hi, Joel,
>
> The attached patch is the first version about extent stealing. Please 
> feel free to correct me about the codes or function name or comments.
>
> thanks,
> tiger
> ------------------------------------------------------------------------
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel




More information about the Ocfs2-devel mailing list