]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/mtd/ubi/upd.c
UBI: add sanity check
[linux-2.6-omap-h63xx.git] / drivers / mtd / ubi / upd.c
index 0efc586a83288fd5ccde9bc6b39a5ea432cf8f4c..e32b04d2e0488ab45a65eddc213153031dd4169f 100644 (file)
@@ -67,7 +67,9 @@ static int set_update_marker(struct ubi_device *ubi, int vol_id)
        memcpy(&vtbl_rec, &ubi->vtbl[vol_id], sizeof(struct ubi_vtbl_record));
        vtbl_rec.upd_marker = 1;
 
+       mutex_lock(&ubi->volumes_mutex);
        err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
+       mutex_unlock(&ubi->volumes_mutex);
        vol->upd_marker = 1;
        return err;
 }
@@ -106,7 +108,9 @@ static int clear_update_marker(struct ubi_device *ubi, int vol_id, long long byt
                        vol->last_eb_bytes = vol->usable_leb_size;
        }
 
+       mutex_lock(&ubi->volumes_mutex);
        err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
+       mutex_unlock(&ubi->volumes_mutex);
        vol->upd_marker = 0;
        return err;
 }
@@ -136,7 +140,7 @@ int ubi_start_update(struct ubi_device *ubi, int vol_id, long long bytes)
 
        /* Before updating - wipe out the volume */
        for (i = 0; i < vol->reserved_pebs; i++) {
-               err = ubi_eba_unmap_leb(ubi, vol_id, i);
+               err = ubi_eba_unmap_leb(ubi, vol, i);
                if (err)
                        return err;
        }
@@ -209,8 +213,7 @@ static int write_leb(struct ubi_device *ubi, int vol_id, int lnum, void *buf,
                if (len != l)
                        dbg_msg("skip last %d bytes (0xFF)", len - l);
 
-               err = ubi_eba_write_leb(ubi, vol_id, lnum, buf, 0, l,
-                                       UBI_UNKNOWN);
+               err = ubi_eba_write_leb(ubi, vol, lnum, buf, 0, l, UBI_UNKNOWN);
        } else {
                /*
                 * When writing static volume, and this is the last logical
@@ -222,7 +225,7 @@ static int write_leb(struct ubi_device *ubi, int vol_id, int lnum, void *buf,
                 * contain zeros, not random trash.
                 */
                memset(buf + len, 0, vol->usable_leb_size - len);
-               err = ubi_eba_write_leb_st(ubi, vol_id, lnum, buf, len,
+               err = ubi_eba_write_leb_st(ubi, vol, lnum, buf, len,
                                           UBI_UNKNOWN, used_ebs);
        }