Kernel bump from 4.1.3-rt to 4.1.7-rt.
[kvmfornfv.git] / kernel / drivers / md / persistent-data / dm-space-map-metadata.c
index e8a9042..5309129 100644 (file)
@@ -204,6 +204,27 @@ static void in(struct sm_metadata *smm)
        smm->recursion_count++;
 }
 
+static int apply_bops(struct sm_metadata *smm)
+{
+       int r = 0;
+
+       while (!brb_empty(&smm->uncommitted)) {
+               struct block_op bop;
+
+               r = brb_pop(&smm->uncommitted, &bop);
+               if (r) {
+                       DMERR("bug in bop ring buffer");
+                       break;
+               }
+
+               r = commit_bop(smm, &bop);
+               if (r)
+                       break;
+       }
+
+       return r;
+}
+
 static int out(struct sm_metadata *smm)
 {
        int r = 0;
@@ -216,21 +237,8 @@ static int out(struct sm_metadata *smm)
                return -ENOMEM;
        }
 
-       if (smm->recursion_count == 1) {
-               while (!brb_empty(&smm->uncommitted)) {
-                       struct block_op bop;
-
-                       r = brb_pop(&smm->uncommitted, &bop);
-                       if (r) {
-                               DMERR("bug in bop ring buffer");
-                               break;
-                       }
-
-                       r = commit_bop(smm, &bop);
-                       if (r)
-                               break;
-               }
-       }
+       if (smm->recursion_count == 1)
+               apply_bops(smm);
 
        smm->recursion_count--;
 
@@ -704,6 +712,12 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks)
                }
                old_len = smm->begin;
 
+               r = apply_bops(smm);
+               if (r) {
+                       DMERR("%s: apply_bops failed", __func__);
+                       goto out;
+               }
+
                r = sm_ll_commit(&smm->ll);
                if (r)
                        goto out;
@@ -773,6 +787,12 @@ int dm_sm_metadata_create(struct dm_space_map *sm,
        if (r)
                return r;
 
+       r = apply_bops(smm);
+       if (r) {
+               DMERR("%s: apply_bops failed", __func__);
+               return r;
+       }
+
        return sm_metadata_commit(sm);
 }