Merge gregkh@master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
[pandora-kernel.git] / fs / ocfs2 / localalloc.c
index 149b351..1f17a4d 100644 (file)
@@ -143,8 +143,8 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb)
 
        if (!(le32_to_cpu(alloc->i_flags) &
            (OCFS2_LOCAL_ALLOC_FL|OCFS2_BITMAP_FL))) {
-               mlog(ML_ERROR, "Invalid local alloc inode, %"MLFu64"\n",
-                    OCFS2_I(inode)->ip_blkno);
+               mlog(ML_ERROR, "Invalid local alloc inode, %llu\n",
+                    (unsigned long long)OCFS2_I(inode)->ip_blkno);
                status = -EINVAL;
                goto bail;
        }
@@ -493,9 +493,9 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
 
        if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
            ocfs2_local_alloc_count_bits(alloc)) {
-               ocfs2_error(osb->sb, "local alloc inode %"MLFu64" says it has "
+               ocfs2_error(osb->sb, "local alloc inode %llu says it has "
                            "%u free bits, but a count shows %u",
-                           le64_to_cpu(alloc->i_blkno),
+                           (unsigned long long)le64_to_cpu(alloc->i_blkno),
                            le32_to_cpu(alloc->id1.bitmap1.i_used),
                            ocfs2_local_alloc_count_bits(alloc));
                status = -EIO;
@@ -753,10 +753,11 @@ static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
                                ocfs2_clusters_to_blocks(osb->sb,
                                                         start - count);
 
-                       mlog(0, "freeing %u bits starting at local "
-                            "alloc bit %u (la_start_blk = %"MLFu64", "
-                            "blkno = %"MLFu64")\n", count, start - count,
-                            la_start_blk, blkno);
+                       mlog(0, "freeing %u bits starting at local alloc bit "
+                            "%u (la_start_blk = %llu, blkno = %llu)\n",
+                            count, start - count,
+                            (unsigned long long)la_start_blk,
+                            (unsigned long long)blkno);
 
                        status = ocfs2_free_clusters(handle, main_bm_inode,
                                                     main_bm_bh, blkno, count);
@@ -839,6 +840,12 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
 
        mlog(0, "Allocating %u clusters for a new window.\n",
             ocfs2_local_alloc_window_bits(osb));
+
+       /* Instruct the allocation code to try the most recently used
+        * cluster group. We'll re-record the group used this pass
+        * below. */
+       ac->ac_last_group = osb->la_last_gd;
+
        /* we used the generic suballoc reserve function, but we set
         * everything up nicely, so there's no reason why we can't use
         * the more specific cluster api to claim bits. */
@@ -851,6 +858,8 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
                goto bail;
        }
 
+       osb->la_last_gd = ac->ac_last_group;
+
        la->la_bm_off = cpu_to_le32(cluster_off);
        alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count);
        /* just in case... In the future when we find space ourselves,