Commit 7e2d0ba7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'ubifs-for-linus-6.11-rc1-take2' of...

Merge tag 'ubifs-for-linus-6.11-rc1-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs

Pull UBI and UBIFS updates from Richard Weinberger:

 - Many fixes for power-cut issues by Zhihao Cheng

 - Another ubiblock error path fix

 - ubiblock section mismatch fix

 - Misc fixes all over the place

* tag 'ubifs-for-linus-6.11-rc1-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs:
  ubi: Fix ubi_init() ubiblock_exit() section mismatch
  ubifs: add check for crypto_shash_tfm_digest
  ubifs: Fix inconsistent inode size when powercut happens during appendant writing
  ubi: block: fix null-pointer-dereference in ubiblock_create()
  ubifs: fix kernel-doc warnings
  ubifs: correct UBIFS_DFS_DIR_LEN macro definition and improve code clarity
  mtd: ubi: Restore missing cleanup on ubi_init() failure path
  ubifs: dbg_orphan_check: Fix missed key type checking
  ubifs: Fix unattached inode when powercut happens in creating
  ubifs: Fix space leak when powercut happens in linking tmpfile
  ubifs: Move ui->data initialization after initializing security
  ubifs: Fix adding orphan entry twice for the same inode
  ubifs: Remove insert_dead_orphan from replaying orphan process
  Revert "ubifs: ubifs_symlink: Fix memleak of inode->i_link in error path"
  ubifs: Don't add xattr inode into orphan area
  ubifs: Fix unattached xattr inode if powercut happens after deleting
  mtd: ubi: avoid expensive do_div() on 32-bit machines
  mtd: ubi: make ubi_class constant
  ubi: eba: properly rollback inside self_check_eba
parents e172f1e9 92a286e9
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -390,7 +390,8 @@ int ubiblock_create(struct ubi_volume_info *vi)

	ret = blk_mq_alloc_tag_set(&dev->tag_set);
	if (ret) {
		dev_err(disk_to_dev(dev->gd), "blk_mq_alloc_tag_set failed");
		pr_err("ubiblock%d_%d: blk_mq_alloc_tag_set failed\n",
			dev->ubi_num, dev->vol_id);
		goto out_free_dev;
	}

@@ -407,8 +408,8 @@ int ubiblock_create(struct ubi_volume_info *vi)
	gd->minors = 1;
	gd->first_minor = idr_alloc(&ubiblock_minor_idr, dev, 0, 0, GFP_KERNEL);
	if (gd->first_minor < 0) {
		dev_err(disk_to_dev(gd),
			"block: dynamic minor allocation failed");
		pr_err("ubiblock%d_%d: block: dynamic minor allocation failed\n",
			dev->ubi_num, dev->vol_id);
		ret = -ENODEV;
		goto out_cleanup_disk;
	}
@@ -669,7 +670,7 @@ int __init ubiblock_init(void)
	return ret;
}

void __exit ubiblock_exit(void)
void ubiblock_exit(void)
{
	ubi_unregister_volume_notifier(&ubiblock_notifier);
	ubiblock_remove_all();
+5 −2
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ static struct attribute *ubi_class_attrs[] = {
ATTRIBUTE_GROUPS(ubi_class);

/* Root UBI "class" object (corresponds to '/<sysfs>/class/ubi/') */
struct class ubi_class = {
const struct class ubi_class = {
	.name		= UBI_NAME_STR,
	.class_groups	= ubi_class_groups,
};
@@ -1372,7 +1372,7 @@ static int __init ubi_init(void)

		/* See comment above re-ubi_is_module(). */
		if (ubi_is_module())
			goto out_slab;
			goto out_debugfs;
	}

	register_mtd_user(&ubi_mtd_notifier);
@@ -1387,6 +1387,9 @@ static int __init ubi_init(void)

out_mtd_notifier:
	unregister_mtd_user(&ubi_mtd_notifier);
	ubiblock_exit();
out_debugfs:
	ubi_debugfs_exit();
out_slab:
	kmem_cache_destroy(ubi_wl_entry_slab);
out_dev_unreg:
+2 −2
Original line number Diff line number Diff line
@@ -598,9 +598,9 @@ int ubi_debugfs_init_dev(struct ubi_device *ubi)
	if (!IS_ENABLED(CONFIG_DEBUG_FS))
		return 0;

	n = snprintf(d->dfs_dir_name, UBI_DFS_DIR_LEN + 1, UBI_DFS_DIR_NAME,
	n = snprintf(d->dfs_dir_name, UBI_DFS_DIR_LEN, UBI_DFS_DIR_NAME,
		     ubi->ubi_num);
	if (n > UBI_DFS_DIR_LEN) {
	if (n >= UBI_DFS_DIR_LEN) {
		/* The array size is too small */
		return -EINVAL;
	}
+2 −1
Original line number Diff line number Diff line
@@ -1564,6 +1564,7 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap,
					  GFP_KERNEL);
		if (!fm_eba[i]) {
			ret = -ENOMEM;
			kfree(scan_eba[i]);
			goto out_free;
		}

@@ -1599,7 +1600,7 @@ int self_check_eba(struct ubi_device *ubi, struct ubi_attach_info *ai_fastmap,
	}

out_free:
	for (i = 0; i < num_volumes; i++) {
	while (--i >= 0) {
		if (!ubi->volumes[i])
			continue;

+3 −3
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@
/* UBI NVMEM provider */
#include "ubi.h"
#include <linux/nvmem-provider.h>
#include <asm/div64.h>

/* List of all NVMEM devices */
static LIST_HEAD(nvmem_devices);
@@ -27,14 +26,15 @@ static int ubi_nvmem_reg_read(void *priv, unsigned int from,
	struct ubi_nvmem *unv = priv;
	struct ubi_volume_desc *desc;
	uint32_t offs;
	uint64_t lnum = from;
	uint32_t lnum;
	int err = 0;

	desc = ubi_open_volume(unv->ubi_num, unv->vol_id, UBI_READONLY);
	if (IS_ERR(desc))
		return PTR_ERR(desc);

	offs = do_div(lnum, unv->usable_leb_size);
	offs = from % unv->usable_leb_size;
	lnum = from / unv->usable_leb_size;
	while (bytes_left) {
		to_read = unv->usable_leb_size - offs;

Loading