1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (c) International Business Machines Corp., 2006 4 * 5 * Author: Artem Bityutskiy (Битюцкий Артём) 6 */ 7 8 /* 9 * This file contains implementation of volume creation, deletion, updating and 10 * resizing. 11 */ 12 13 #include <linux/err.h> 14 #include <linux/math64.h> 15 #include <linux/slab.h> 16 #include <linux/export.h> 17 #include "ubi.h" 18 19 static int self_check_volumes(struct ubi_device *ubi); 20 21 static ssize_t vol_attribute_show(struct device *dev, 22 struct device_attribute *attr, char *buf); 23 24 /* Device attributes corresponding to files in '/<sysfs>/class/ubi/ubiX_Y' */ 25 static struct device_attribute attr_vol_reserved_ebs = 26 __ATTR(reserved_ebs, S_IRUGO, vol_attribute_show, NULL); 27 static struct device_attribute attr_vol_type = 28 __ATTR(type, S_IRUGO, vol_attribute_show, NULL); 29 static struct device_attribute attr_vol_name = 30 __ATTR(name, S_IRUGO, vol_attribute_show, NULL); 31 static struct device_attribute attr_vol_corrupted = 32 __ATTR(corrupted, S_IRUGO, vol_attribute_show, NULL); 33 static struct device_attribute attr_vol_alignment = 34 __ATTR(alignment, S_IRUGO, vol_attribute_show, NULL); 35 static struct device_attribute attr_vol_usable_eb_size = 36 __ATTR(usable_eb_size, S_IRUGO, vol_attribute_show, NULL); 37 static struct device_attribute attr_vol_data_bytes = 38 __ATTR(data_bytes, S_IRUGO, vol_attribute_show, NULL); 39 static struct device_attribute attr_vol_upd_marker = 40 __ATTR(upd_marker, S_IRUGO, vol_attribute_show, NULL); 41 42 /* 43 * "Show" method for files in '/<sysfs>/class/ubi/ubiX_Y/'. 44 * 45 * Consider a situation: 46 * A. process 1 opens a sysfs file related to volume Y, say 47 * /<sysfs>/class/ubi/ubiX_Y/reserved_ebs; 48 * B. process 2 removes volume Y; 49 * C. process 1 starts reading the /<sysfs>/class/ubi/ubiX_Y/reserved_ebs file; 50 * 51 * In this situation, this function will return %-ENODEV because it will find 52 * out that the volume was removed from the @ubi->volumes array. 53 */ 54 static ssize_t vol_attribute_show(struct device *dev, 55 struct device_attribute *attr, char *buf) 56 { 57 int ret; 58 struct ubi_volume *vol = container_of(dev, struct ubi_volume, dev); 59 struct ubi_device *ubi = vol->ubi; 60 61 spin_lock(&ubi->volumes_lock); 62 if (!ubi->volumes[vol->vol_id] || ubi->volumes[vol->vol_id]->is_dead) { 63 spin_unlock(&ubi->volumes_lock); 64 return -ENODEV; 65 } 66 /* Take a reference to prevent volume removal */ 67 vol->ref_count += 1; 68 spin_unlock(&ubi->volumes_lock); 69 70 if (attr == &attr_vol_reserved_ebs) 71 ret = sprintf(buf, "%d\n", vol->reserved_pebs); 72 else if (attr == &attr_vol_type) { 73 const char *tp; 74 75 if (vol->vol_type == UBI_DYNAMIC_VOLUME) 76 tp = "dynamic"; 77 else 78 tp = "static"; 79 ret = sprintf(buf, "%s\n", tp); 80 } else if (attr == &attr_vol_name) 81 ret = sprintf(buf, "%s\n", vol->name); 82 else if (attr == &attr_vol_corrupted) 83 ret = sprintf(buf, "%d\n", vol->corrupted); 84 else if (attr == &attr_vol_alignment) 85 ret = sprintf(buf, "%d\n", vol->alignment); 86 else if (attr == &attr_vol_usable_eb_size) 87 ret = sprintf(buf, "%d\n", vol->usable_leb_size); 88 else if (attr == &attr_vol_data_bytes) 89 ret = sprintf(buf, "%lld\n", vol->used_bytes); 90 else if (attr == &attr_vol_upd_marker) 91 ret = sprintf(buf, "%d\n", vol->upd_marker); 92 else 93 /* This must be a bug */ 94 ret = -EINVAL; 95 96 /* We've done the operation, drop volume and UBI device references */ 97 spin_lock(&ubi->volumes_lock); 98 vol->ref_count -= 1; 99 ubi_assert(vol->ref_count >= 0); 100 spin_unlock(&ubi->volumes_lock); 101 return ret; 102 } 103 104 static struct attribute *volume_dev_attrs[] = { 105 &attr_vol_reserved_ebs.attr, 106 &attr_vol_type.attr, 107 &attr_vol_name.attr, 108 &attr_vol_corrupted.attr, 109 &attr_vol_alignment.attr, 110 &attr_vol_usable_eb_size.attr, 111 &attr_vol_data_bytes.attr, 112 &attr_vol_upd_marker.attr, 113 NULL 114 }; 115 ATTRIBUTE_GROUPS(volume_dev); 116 117 /* Release method for volume devices */ 118 static void vol_release(struct device *dev) 119 { 120 struct ubi_volume *vol = container_of(dev, struct ubi_volume, dev); 121 122 ubi_eba_replace_table(vol, NULL); 123 ubi_fastmap_destroy_checkmap(vol); 124 kfree(vol); 125 } 126 127 static struct fwnode_handle *find_volume_fwnode(struct ubi_volume *vol) 128 { 129 struct fwnode_handle *fw_vols, *fw_vol; 130 const char *volname; 131 u32 volid; 132 133 fw_vols = device_get_named_child_node(vol->dev.parent->parent, "volumes"); 134 if (!fw_vols) 135 return NULL; 136 137 fwnode_for_each_child_node(fw_vols, fw_vol) { 138 if (!fwnode_property_read_string(fw_vol, "volname", &volname) && 139 strncmp(volname, vol->name, vol->name_len)) 140 continue; 141 142 if (!fwnode_property_read_u32(fw_vol, "volid", &volid) && 143 vol->vol_id != volid) 144 continue; 145 146 fwnode_handle_put(fw_vols); 147 return fw_vol; 148 } 149 fwnode_handle_put(fw_vols); 150 151 return NULL; 152 } 153 154 /** 155 * ubi_create_volume - create volume. 156 * @ubi: UBI device description object 157 * @req: volume creation request 158 * 159 * This function creates volume described by @req. If @req->vol_id id 160 * %UBI_VOL_NUM_AUTO, this function automatically assign ID to the new volume 161 * and saves it in @req->vol_id. Returns zero in case of success and a negative 162 * error code in case of failure. Note, the caller has to have the 163 * @ubi->device_mutex locked. 164 */ 165 int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) 166 { 167 int i, err, vol_id = req->vol_id; 168 struct ubi_volume *vol; 169 struct ubi_vtbl_record vtbl_rec; 170 struct ubi_eba_table *eba_tbl = NULL; 171 172 if (ubi->ro_mode) 173 return -EROFS; 174 175 vol = kzalloc(sizeof(struct ubi_volume), GFP_KERNEL); 176 if (!vol) 177 return -ENOMEM; 178 179 device_initialize(&vol->dev); 180 vol->dev.release = vol_release; 181 vol->dev.parent = &ubi->dev; 182 vol->dev.class = &ubi_class; 183 vol->dev.groups = volume_dev_groups; 184 185 if (req->flags & UBI_VOL_SKIP_CRC_CHECK_FLG) 186 vol->skip_check = 1; 187 188 spin_lock(&ubi->volumes_lock); 189 if (vol_id == UBI_VOL_NUM_AUTO) { 190 /* Find unused volume ID */ 191 dbg_gen("search for vacant volume ID"); 192 for (i = 0; i < ubi->vtbl_slots; i++) 193 if (!ubi->volumes[i]) { 194 vol_id = i; 195 break; 196 } 197 198 if (vol_id == UBI_VOL_NUM_AUTO) { 199 ubi_err(ubi, "out of volume IDs"); 200 err = -ENFILE; 201 goto out_unlock; 202 } 203 req->vol_id = vol_id; 204 } 205 206 dbg_gen("create device %d, volume %d, %llu bytes, type %d, name %s", 207 ubi->ubi_num, vol_id, (unsigned long long)req->bytes, 208 (int)req->vol_type, req->name); 209 210 /* Ensure that this volume does not exist */ 211 err = -EEXIST; 212 if (ubi->volumes[vol_id]) { 213 ubi_err(ubi, "volume %d already exists", vol_id); 214 goto out_unlock; 215 } 216 217 /* Ensure that the name is unique */ 218 for (i = 0; i < ubi->vtbl_slots; i++) 219 if (ubi->volumes[i] && !ubi->volumes[i]->is_dead && 220 ubi->volumes[i]->name_len == req->name_len && 221 !strcmp(ubi->volumes[i]->name, req->name)) { 222 ubi_err(ubi, "volume \"%s\" exists (ID %d)", 223 req->name, i); 224 goto out_unlock; 225 } 226 227 /* Calculate how many eraseblocks are requested */ 228 vol->usable_leb_size = ubi->leb_size - ubi->leb_size % req->alignment; 229 vol->reserved_pebs = div_u64(req->bytes + vol->usable_leb_size - 1, 230 vol->usable_leb_size); 231 232 /* Reserve physical eraseblocks */ 233 if (vol->reserved_pebs > ubi->avail_pebs) { 234 ubi_err(ubi, "not enough PEBs, only %d available", 235 ubi->avail_pebs); 236 if (ubi->corr_peb_count) 237 ubi_err(ubi, "%d PEBs are corrupted and not used", 238 ubi->corr_peb_count); 239 err = -ENOSPC; 240 goto out_unlock; 241 } 242 ubi->avail_pebs -= vol->reserved_pebs; 243 ubi->rsvd_pebs += vol->reserved_pebs; 244 spin_unlock(&ubi->volumes_lock); 245 246 vol->vol_id = vol_id; 247 vol->alignment = req->alignment; 248 vol->data_pad = ubi->leb_size % vol->alignment; 249 vol->vol_type = req->vol_type; 250 vol->name_len = req->name_len; 251 memcpy(vol->name, req->name, vol->name_len); 252 vol->ubi = ubi; 253 device_set_node(&vol->dev, find_volume_fwnode(vol)); 254 255 /* 256 * Finish all pending erases because there may be some LEBs belonging 257 * to the same volume ID. 258 */ 259 err = ubi_wl_flush(ubi, vol_id, UBI_ALL); 260 if (err) 261 goto out_acc; 262 263 eba_tbl = ubi_eba_create_table(vol, vol->reserved_pebs); 264 if (IS_ERR(eba_tbl)) { 265 err = PTR_ERR(eba_tbl); 266 goto out_acc; 267 } 268 269 ubi_eba_replace_table(vol, eba_tbl); 270 271 if (vol->vol_type == UBI_DYNAMIC_VOLUME) { 272 vol->used_ebs = vol->reserved_pebs; 273 vol->last_eb_bytes = vol->usable_leb_size; 274 vol->used_bytes = 275 (long long)vol->used_ebs * vol->usable_leb_size; 276 } else { 277 vol->used_ebs = div_u64_rem(vol->used_bytes, 278 vol->usable_leb_size, 279 &vol->last_eb_bytes); 280 if (vol->last_eb_bytes != 0) 281 vol->used_ebs += 1; 282 else 283 vol->last_eb_bytes = vol->usable_leb_size; 284 } 285 286 /* Make volume "available" before it becomes accessible via sysfs */ 287 spin_lock(&ubi->volumes_lock); 288 ubi->volumes[vol_id] = vol; 289 ubi->vol_count += 1; 290 spin_unlock(&ubi->volumes_lock); 291 292 /* Register character device for the volume */ 293 cdev_init(&vol->cdev, &ubi_vol_cdev_operations); 294 vol->cdev.owner = THIS_MODULE; 295 296 vol->dev.devt = MKDEV(MAJOR(ubi->cdev.dev), vol_id + 1); 297 dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id); 298 err = cdev_device_add(&vol->cdev, &vol->dev); 299 if (err) { 300 ubi_err(ubi, "cannot add device"); 301 goto out_mapping; 302 } 303 304 /* Fill volume table record */ 305 memset(&vtbl_rec, 0, sizeof(struct ubi_vtbl_record)); 306 vtbl_rec.reserved_pebs = cpu_to_be32(vol->reserved_pebs); 307 vtbl_rec.alignment = cpu_to_be32(vol->alignment); 308 vtbl_rec.data_pad = cpu_to_be32(vol->data_pad); 309 vtbl_rec.name_len = cpu_to_be16(vol->name_len); 310 if (vol->vol_type == UBI_DYNAMIC_VOLUME) 311 vtbl_rec.vol_type = UBI_VID_DYNAMIC; 312 else 313 vtbl_rec.vol_type = UBI_VID_STATIC; 314 315 if (vol->skip_check) 316 vtbl_rec.flags |= UBI_VTBL_SKIP_CRC_CHECK_FLG; 317 318 memcpy(vtbl_rec.name, vol->name, vol->name_len); 319 320 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec); 321 if (err) 322 goto out_sysfs; 323 324 ubi_volume_notify(ubi, vol, UBI_VOLUME_ADDED); 325 self_check_volumes(ubi); 326 return err; 327 328 out_sysfs: 329 /* 330 * We have registered our device, we should not free the volume 331 * description object in this function in case of an error - it is 332 * freed by the release function. 333 */ 334 cdev_device_del(&vol->cdev, &vol->dev); 335 out_mapping: 336 spin_lock(&ubi->volumes_lock); 337 ubi->volumes[vol_id] = NULL; 338 ubi->vol_count -= 1; 339 spin_unlock(&ubi->volumes_lock); 340 out_acc: 341 spin_lock(&ubi->volumes_lock); 342 ubi->rsvd_pebs -= vol->reserved_pebs; 343 ubi->avail_pebs += vol->reserved_pebs; 344 out_unlock: 345 spin_unlock(&ubi->volumes_lock); 346 put_device(&vol->dev); 347 ubi_err(ubi, "cannot create volume %d, error %d", vol_id, err); 348 return err; 349 } 350 351 /** 352 * ubi_remove_volume - remove volume. 353 * @desc: volume descriptor 354 * @no_vtbl: do not change volume table if not zero 355 * 356 * This function removes volume described by @desc. The volume has to be opened 357 * in "exclusive" mode. Returns zero in case of success and a negative error 358 * code in case of failure. The caller has to have the @ubi->device_mutex 359 * locked. 360 */ 361 int ubi_remove_volume(struct ubi_volume_desc *desc, int no_vtbl) 362 { 363 struct ubi_volume *vol = desc->vol; 364 struct ubi_device *ubi = vol->ubi; 365 int i, err, vol_id = vol->vol_id, reserved_pebs = vol->reserved_pebs; 366 367 dbg_gen("remove device %d, volume %d", ubi->ubi_num, vol_id); 368 ubi_assert(desc->mode == UBI_EXCLUSIVE); 369 ubi_assert(vol == ubi->volumes[vol_id]); 370 371 if (ubi->ro_mode) 372 return -EROFS; 373 374 spin_lock(&ubi->volumes_lock); 375 if (vol->ref_count > 1) { 376 /* 377 * The volume is busy, probably someone is reading one of its 378 * sysfs files. 379 */ 380 err = -EBUSY; 381 goto out_unlock; 382 } 383 384 /* 385 * Mark volume as dead at this point to prevent that anyone 386 * can take a reference to the volume from now on. 387 * This is necessary as we have to release the spinlock before 388 * calling ubi_volume_notify. 389 */ 390 vol->is_dead = true; 391 spin_unlock(&ubi->volumes_lock); 392 393 ubi_volume_notify(ubi, vol, UBI_VOLUME_SHUTDOWN); 394 395 spin_lock(&ubi->volumes_lock); 396 ubi->volumes[vol_id] = NULL; 397 spin_unlock(&ubi->volumes_lock); 398 399 if (!no_vtbl) { 400 err = ubi_change_vtbl_record(ubi, vol_id, NULL); 401 if (err) 402 goto out_err; 403 } 404 405 for (i = 0; i < vol->reserved_pebs; i++) { 406 err = ubi_eba_unmap_leb(ubi, vol, i); 407 if (err) 408 goto out_err; 409 } 410 411 cdev_device_del(&vol->cdev, &vol->dev); 412 put_device(&vol->dev); 413 414 spin_lock(&ubi->volumes_lock); 415 ubi->rsvd_pebs -= reserved_pebs; 416 ubi->avail_pebs += reserved_pebs; 417 ubi_update_reserved(ubi); 418 ubi->vol_count -= 1; 419 spin_unlock(&ubi->volumes_lock); 420 421 ubi_volume_notify(ubi, vol, UBI_VOLUME_REMOVED); 422 if (!no_vtbl) 423 self_check_volumes(ubi); 424 425 return 0; 426 427 out_err: 428 ubi_err(ubi, "cannot remove volume %d, error %d", vol_id, err); 429 spin_lock(&ubi->volumes_lock); 430 ubi->volumes[vol_id] = vol; 431 out_unlock: 432 spin_unlock(&ubi->volumes_lock); 433 return err; 434 } 435 436 /** 437 * ubi_resize_volume - re-size volume. 438 * @desc: volume descriptor 439 * @reserved_pebs: new size in physical eraseblocks 440 * 441 * This function re-sizes the volume and returns zero in case of success, and a 442 * negative error code in case of failure. The caller has to have the 443 * @ubi->device_mutex locked. 444 */ 445 int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs) 446 { 447 int i, err, pebs; 448 struct ubi_volume *vol = desc->vol; 449 struct ubi_device *ubi = vol->ubi; 450 struct ubi_vtbl_record vtbl_rec; 451 struct ubi_eba_table *new_eba_tbl = NULL; 452 struct ubi_eba_table *old_eba_tbl = NULL; 453 int vol_id = vol->vol_id; 454 455 if (ubi->ro_mode) 456 return -EROFS; 457 458 dbg_gen("re-size device %d, volume %d to from %d to %d PEBs", 459 ubi->ubi_num, vol_id, vol->reserved_pebs, reserved_pebs); 460 461 if (vol->vol_type == UBI_STATIC_VOLUME && 462 reserved_pebs < vol->used_ebs) { 463 ubi_err(ubi, "too small size %d, %d LEBs contain data", 464 reserved_pebs, vol->used_ebs); 465 return -EINVAL; 466 } 467 468 /* If the size is the same, we have nothing to do */ 469 if (reserved_pebs == vol->reserved_pebs) 470 return 0; 471 472 new_eba_tbl = ubi_eba_create_table(vol, reserved_pebs); 473 if (IS_ERR(new_eba_tbl)) 474 return PTR_ERR(new_eba_tbl); 475 476 spin_lock(&ubi->volumes_lock); 477 if (vol->ref_count > 1) { 478 spin_unlock(&ubi->volumes_lock); 479 err = -EBUSY; 480 goto out_free; 481 } 482 spin_unlock(&ubi->volumes_lock); 483 484 /* Reserve physical eraseblocks */ 485 pebs = reserved_pebs - vol->reserved_pebs; 486 if (pebs > 0) { 487 spin_lock(&ubi->volumes_lock); 488 if (pebs > ubi->avail_pebs) { 489 ubi_err(ubi, "not enough PEBs: requested %d, available %d", 490 pebs, ubi->avail_pebs); 491 if (ubi->corr_peb_count) 492 ubi_err(ubi, "%d PEBs are corrupted and not used", 493 ubi->corr_peb_count); 494 spin_unlock(&ubi->volumes_lock); 495 err = -ENOSPC; 496 goto out_free; 497 } 498 499 ubi->avail_pebs -= pebs; 500 ubi->rsvd_pebs += pebs; 501 ubi_eba_copy_table(vol, new_eba_tbl, vol->reserved_pebs); 502 old_eba_tbl = vol->eba_tbl; 503 vol->eba_tbl = new_eba_tbl; 504 vol->reserved_pebs = reserved_pebs; 505 spin_unlock(&ubi->volumes_lock); 506 } 507 508 if (pebs < 0) { 509 for (i = 0; i < -pebs; i++) { 510 err = ubi_eba_unmap_leb(ubi, vol, reserved_pebs + i); 511 if (err) 512 goto out_free; 513 } 514 spin_lock(&ubi->volumes_lock); 515 ubi->rsvd_pebs += pebs; 516 ubi->avail_pebs -= pebs; 517 ubi_update_reserved(ubi); 518 ubi_eba_copy_table(vol, new_eba_tbl, reserved_pebs); 519 old_eba_tbl = vol->eba_tbl; 520 vol->eba_tbl = new_eba_tbl; 521 vol->reserved_pebs = reserved_pebs; 522 spin_unlock(&ubi->volumes_lock); 523 } 524 525 /* 526 * When we shrink a volume we have to flush all pending (erase) work. 527 * Otherwise it can happen that upon next attach UBI finds a LEB with 528 * lnum > highest_lnum and refuses to attach. 529 */ 530 if (pebs < 0) { 531 err = ubi_wl_flush(ubi, vol_id, UBI_ALL); 532 if (err) 533 goto out_acc; 534 } 535 536 /* Change volume table record */ 537 vtbl_rec = ubi->vtbl[vol_id]; 538 vtbl_rec.reserved_pebs = cpu_to_be32(reserved_pebs); 539 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec); 540 if (err) 541 goto out_acc; 542 543 if (vol->vol_type == UBI_DYNAMIC_VOLUME) { 544 vol->used_ebs = reserved_pebs; 545 vol->last_eb_bytes = vol->usable_leb_size; 546 vol->used_bytes = 547 (long long)vol->used_ebs * vol->usable_leb_size; 548 } 549 550 /* destroy old table */ 551 ubi_eba_destroy_table(old_eba_tbl); 552 ubi_volume_notify(ubi, vol, UBI_VOLUME_RESIZED); 553 self_check_volumes(ubi); 554 return err; 555 556 out_acc: 557 spin_lock(&ubi->volumes_lock); 558 vol->reserved_pebs = reserved_pebs - pebs; 559 ubi->rsvd_pebs -= pebs; 560 ubi->avail_pebs += pebs; 561 if (pebs > 0) 562 ubi_eba_copy_table(vol, old_eba_tbl, vol->reserved_pebs); 563 else 564 ubi_eba_copy_table(vol, old_eba_tbl, reserved_pebs); 565 vol->eba_tbl = old_eba_tbl; 566 spin_unlock(&ubi->volumes_lock); 567 out_free: 568 ubi_eba_destroy_table(new_eba_tbl); 569 return err; 570 } 571 572 /** 573 * ubi_rename_volumes - re-name UBI volumes. 574 * @ubi: UBI device description object 575 * @rename_list: list of &struct ubi_rename_entry objects 576 * 577 * This function re-names or removes volumes specified in the re-name list. 578 * Returns zero in case of success and a negative error code in case of 579 * failure. 580 */ 581 int ubi_rename_volumes(struct ubi_device *ubi, struct list_head *rename_list) 582 { 583 int err; 584 struct ubi_rename_entry *re; 585 586 err = ubi_vtbl_rename_volumes(ubi, rename_list); 587 if (err) 588 return err; 589 590 list_for_each_entry(re, rename_list, list) { 591 if (re->remove) { 592 err = ubi_remove_volume(re->desc, 1); 593 if (err) 594 break; 595 } else { 596 struct ubi_volume *vol = re->desc->vol; 597 598 spin_lock(&ubi->volumes_lock); 599 vol->name_len = re->new_name_len; 600 memcpy(vol->name, re->new_name, re->new_name_len + 1); 601 spin_unlock(&ubi->volumes_lock); 602 ubi_volume_notify(ubi, vol, UBI_VOLUME_RENAMED); 603 } 604 } 605 606 if (!err) 607 self_check_volumes(ubi); 608 return err; 609 } 610 611 /** 612 * ubi_add_volume - add volume. 613 * @ubi: UBI device description object 614 * @vol: volume description object 615 * 616 * This function adds an existing volume and initializes all its data 617 * structures. Returns zero in case of success and a negative error code in 618 * case of failure. 619 */ 620 int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) 621 { 622 int err, vol_id = vol->vol_id; 623 dev_t dev; 624 625 dbg_gen("add volume %d", vol_id); 626 627 /* Register character device for the volume */ 628 cdev_init(&vol->cdev, &ubi_vol_cdev_operations); 629 vol->cdev.owner = THIS_MODULE; 630 dev = MKDEV(MAJOR(ubi->cdev.dev), vol->vol_id + 1); 631 err = cdev_add(&vol->cdev, dev, 1); 632 if (err) { 633 ubi_err(ubi, "cannot add character device for volume %d, error %d", 634 vol_id, err); 635 vol_release(&vol->dev); 636 return err; 637 } 638 639 vol->dev.release = vol_release; 640 vol->dev.parent = &ubi->dev; 641 vol->dev.devt = dev; 642 vol->dev.class = &ubi_class; 643 vol->dev.groups = volume_dev_groups; 644 dev_set_name(&vol->dev, "%s_%d", ubi->ubi_name, vol->vol_id); 645 device_set_node(&vol->dev, find_volume_fwnode(vol)); 646 err = device_register(&vol->dev); 647 if (err) { 648 cdev_del(&vol->cdev); 649 put_device(&vol->dev); 650 return err; 651 } 652 653 self_check_volumes(ubi); 654 return err; 655 } 656 657 /** 658 * ubi_free_volume - free volume. 659 * @ubi: UBI device description object 660 * @vol: volume description object 661 * 662 * This function frees all resources for volume @vol but does not remove it. 663 * Used only when the UBI device is detached. 664 */ 665 void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol) 666 { 667 dbg_gen("free volume %d", vol->vol_id); 668 669 ubi->volumes[vol->vol_id] = NULL; 670 cdev_del(&vol->cdev); 671 device_unregister(&vol->dev); 672 } 673 674 /** 675 * self_check_volume - check volume information. 676 * @ubi: UBI device description object 677 * @vol_id: volume ID 678 * 679 * Returns zero if volume is all right and a negative error code if not. 680 */ 681 static int self_check_volume(struct ubi_device *ubi, int vol_id) 682 { 683 int idx = vol_id2idx(ubi, vol_id); 684 int reserved_pebs, alignment, data_pad, vol_type, name_len, upd_marker; 685 const struct ubi_volume *vol; 686 long long n; 687 const char *name; 688 689 spin_lock(&ubi->volumes_lock); 690 reserved_pebs = be32_to_cpu(ubi->vtbl[vol_id].reserved_pebs); 691 vol = ubi->volumes[idx]; 692 693 if (!vol) { 694 if (reserved_pebs) { 695 ubi_err(ubi, "no volume info, but volume exists"); 696 goto fail; 697 } 698 spin_unlock(&ubi->volumes_lock); 699 return 0; 700 } 701 702 if (vol->reserved_pebs < 0 || vol->alignment < 0 || vol->data_pad < 0 || 703 vol->name_len < 0) { 704 ubi_err(ubi, "negative values"); 705 goto fail; 706 } 707 if (vol->alignment > ubi->leb_size || vol->alignment == 0) { 708 ubi_err(ubi, "bad alignment"); 709 goto fail; 710 } 711 712 n = vol->alignment & (ubi->min_io_size - 1); 713 if (vol->alignment != 1 && n) { 714 ubi_err(ubi, "alignment is not multiple of min I/O unit"); 715 goto fail; 716 } 717 718 n = ubi->leb_size % vol->alignment; 719 if (vol->data_pad != n) { 720 ubi_err(ubi, "bad data_pad, has to be %lld", n); 721 goto fail; 722 } 723 724 if (vol->vol_type != UBI_DYNAMIC_VOLUME && 725 vol->vol_type != UBI_STATIC_VOLUME) { 726 ubi_err(ubi, "bad vol_type"); 727 goto fail; 728 } 729 730 if (vol->upd_marker && vol->corrupted) { 731 ubi_err(ubi, "update marker and corrupted simultaneously"); 732 goto fail; 733 } 734 735 if (vol->reserved_pebs > ubi->good_peb_count) { 736 ubi_err(ubi, "too large reserved_pebs"); 737 goto fail; 738 } 739 740 n = ubi->leb_size - vol->data_pad; 741 if (vol->usable_leb_size != ubi->leb_size - vol->data_pad) { 742 ubi_err(ubi, "bad usable_leb_size, has to be %lld", n); 743 goto fail; 744 } 745 746 if (vol->name_len > UBI_VOL_NAME_MAX) { 747 ubi_err(ubi, "too long volume name, max is %d", 748 UBI_VOL_NAME_MAX); 749 goto fail; 750 } 751 752 n = strnlen(vol->name, vol->name_len + 1); 753 if (n != vol->name_len) { 754 ubi_err(ubi, "bad name_len %lld", n); 755 goto fail; 756 } 757 758 n = (long long)vol->used_ebs * vol->usable_leb_size; 759 if (vol->vol_type == UBI_DYNAMIC_VOLUME) { 760 if (vol->corrupted) { 761 ubi_err(ubi, "corrupted dynamic volume"); 762 goto fail; 763 } 764 if (vol->used_ebs != vol->reserved_pebs) { 765 ubi_err(ubi, "bad used_ebs"); 766 goto fail; 767 } 768 if (vol->last_eb_bytes != vol->usable_leb_size) { 769 ubi_err(ubi, "bad last_eb_bytes"); 770 goto fail; 771 } 772 if (vol->used_bytes != n) { 773 ubi_err(ubi, "bad used_bytes"); 774 goto fail; 775 } 776 777 if (vol->skip_check) { 778 ubi_err(ubi, "bad skip_check"); 779 goto fail; 780 } 781 } else { 782 if (vol->used_ebs < 0 || vol->used_ebs > vol->reserved_pebs) { 783 ubi_err(ubi, "bad used_ebs"); 784 goto fail; 785 } 786 if (vol->last_eb_bytes < 0 || 787 vol->last_eb_bytes > vol->usable_leb_size) { 788 ubi_err(ubi, "bad last_eb_bytes"); 789 goto fail; 790 } 791 if (vol->used_bytes < 0 || vol->used_bytes > n || 792 vol->used_bytes < n - vol->usable_leb_size) { 793 ubi_err(ubi, "bad used_bytes"); 794 goto fail; 795 } 796 } 797 798 alignment = be32_to_cpu(ubi->vtbl[vol_id].alignment); 799 data_pad = be32_to_cpu(ubi->vtbl[vol_id].data_pad); 800 name_len = be16_to_cpu(ubi->vtbl[vol_id].name_len); 801 upd_marker = ubi->vtbl[vol_id].upd_marker; 802 name = &ubi->vtbl[vol_id].name[0]; 803 if (ubi->vtbl[vol_id].vol_type == UBI_VID_DYNAMIC) 804 vol_type = UBI_DYNAMIC_VOLUME; 805 else 806 vol_type = UBI_STATIC_VOLUME; 807 808 if (alignment != vol->alignment || data_pad != vol->data_pad || 809 upd_marker != vol->upd_marker || vol_type != vol->vol_type || 810 name_len != vol->name_len || strncmp(name, vol->name, name_len)) { 811 ubi_err(ubi, "volume info is different"); 812 goto fail; 813 } 814 815 spin_unlock(&ubi->volumes_lock); 816 return 0; 817 818 fail: 819 ubi_err(ubi, "self-check failed for volume %d", vol_id); 820 if (vol) 821 ubi_dump_vol_info(vol); 822 ubi_dump_vtbl_record(&ubi->vtbl[vol_id], vol_id); 823 dump_stack(); 824 spin_unlock(&ubi->volumes_lock); 825 return -EINVAL; 826 } 827 828 /** 829 * self_check_volumes - check information about all volumes. 830 * @ubi: UBI device description object 831 * 832 * Returns zero if volumes are all right and a negative error code if not. 833 */ 834 static int self_check_volumes(struct ubi_device *ubi) 835 { 836 int i, err = 0; 837 838 if (!ubi_dbg_chk_gen(ubi)) 839 return 0; 840 841 for (i = 0; i < ubi->vtbl_slots; i++) { 842 err = self_check_volume(ubi, i); 843 if (err) 844 break; 845 } 846 847 return err; 848 } 849