*/
static int ubi_get_compat(const struct ubi_device *ubi, int vol_id)
{
- if (vol_id == UBI_LAYOUT_VOL_ID)
+ if (vol_id == UBI_LAYOUT_VOLUME_ID)
return UBI_LAYOUT_VOLUME_COMPAT;
return 0;
}
{
int err, pnum, vol_id = vol->vol_id;
- ubi_assert(ubi->ref_count > 0);
- ubi_assert(vol->ref_count > 0);
-
if (ubi->ro_mode)
return -EROFS;
struct ubi_vid_hdr *vid_hdr;
uint32_t uninitialized_var(crc);
- ubi_assert(ubi->ref_count > 0);
- ubi_assert(vol->ref_count > 0);
-
err = leb_read_lock(ubi, vol_id, lnum);
if (err)
return err;
int err, pnum, tries = 0, vol_id = vol->vol_id;
struct ubi_vid_hdr *vid_hdr;
- ubi_assert(ubi->ref_count > 0);
- ubi_assert(vol->ref_count > 0);
-
if (ubi->ro_mode)
return -EROFS;
struct ubi_vid_hdr *vid_hdr;
uint32_t crc;
- ubi_assert(ubi->ref_count > 0);
- ubi_assert(vol->ref_count > 0);
-
if (ubi->ro_mode)
return -EROFS;
struct ubi_vid_hdr *vid_hdr;
uint32_t crc;
- ubi_assert(ubi->ref_count > 0);
- ubi_assert(vol->ref_count > 0);
-
if (ubi->ro_mode)
return -EROFS;
+ if (len == 0) {
+ /*
+ * Special case when data length is zero. In this case the LEB
+ * has to be unmapped and mapped somewhere else.
+ */
+ err = ubi_eba_unmap_leb(ubi, vol, lnum);
+ if (err)
+ return err;
+ return ubi_eba_write_leb(ubi, vol, lnum, NULL, 0, 0, dtype);
+ }
+
vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
if (!vid_hdr)
return -ENOMEM;