aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2012-09-25ubiformat: fix failure on big partitions (>4Gio)Richard Genoud
The offset (which is 64bits when mtd-utils are not compile with WITHOUT_LARGEFILE) is calculated like that: offset = nb * size; But nb and size are int, so on 32bits platforms, there's a possible overflow. So, it should be replace with: offset = (off_t)nb * size; If WITHOUT_LARGEFILE is defined, there still be an overflow, but it's what we want, right ? Cheney Chen tested an ubiformat on a NAND (5.9 GiB mtd part). Reported-by: Cheney Chen <cheneychencl2012@gmail.com> Tested-by: Cheney Chen <cheneychencl2012@gmail.com> Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-09-03ubirmvol: correct missing space on usageRichard Genoud
Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-23ubiattach: fail if kernel ignores max_beb_per1024Richard Genoud
If the kernel doesn't know the max_beb_per1024 parameter in the attach ioctl, but the call still succeeded ubi_attach and ubi_attach_mtd will return 1 instead of 0. In this case, the ubiattach command will detach the device and fail with an error message. Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-23ubiattach: introduce max_beb_per1024 in UBI_IOCATTRichard Genoud
The ioctl UBI_IOCATT has been extended with max_beb_per1024 parameter. This parameter is used for adjusting the "maximum expected number of bad blocks per 1024 blocks" for each mtd device. The number of physical erase blocks (PEB) that UBI will reserve for bad block handling is now: whole_flash_chipset__PEB_number * max_beb_per1024 / 1024 This means that for a 4096 PEB NAND device with 3 MTD partitions: mtd0: 512 PEB mtd1: 1536 PEB mtd2: 2048 PEB the commands: ubiattach -m 0 -d 0 -b 20 /dev/ubi_ctrl ubiattach -m 1 -d 1 -b 20 /dev/ubi_ctrl ubiattach -m 2 -d 2 -b 20 /dev/ubi_ctrl will attach mtdx to UBIx and reserve: 80 PEB for bad block handling on UBI0 80 PEB for bad block handling on UBI1 80 PEB for bad block handling on UBI2 => for the whole device, 240 PEB will be reserved for bad block handling. This may seems a waste of space, but as far as the bad blocks can appear every where on a flash device, in the worst case scenario they can all appear in one MTD partition. So the maximum number of expected erase blocks given by the NAND manufacturer should be reserve on each MTD partition. Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-23libubi: kill ubi_attach_mtdArtem Bityutskiy
The 'ubi_attach_mtd()' is not used and it is redundant now. 'ubi_attach()' function may be used instead. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-23libubi: factorize ubi_attach and ubi_attach_mtd codeRichard Genoud
The req->mtd_num value is now updated with the MTD device number found by mtd_node_to_num. Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-22ubi-user.h: add max_beb_per1024 parameterRichard Genoud
Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-22UBI: sync ubi-user.h with kernel v3.6-rc1Richard Genoud
Also remove the eraseblock type support, because kernel commit a65a0eb6d198e058687a9214683bd1c418f20d39 set the dtype parameter as obsolete. Also adjust to some renames: * 'UBI_PROP_DIRECT_WRITE' -> 'UBI_VOL_PROP_DIRECT_WRITE' * 'struct ubi_set_prop_req' -> 'struct ubi_set_vol_prop_req'. * 'UBI_IOCSETPROP' -> 'UBI_IOCSETVOLPROP' Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03stress-test.sh: remove a warningArtem Bityutskiy
If /proc/mtd does not exist, we have this warning: grep: /proc/mtd: No such file or directory Get rid of this. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03stress-test.sh: add mtdram testsArtem Bityutskiy
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03stress-test.sh: support testing without sub-pagesArtem Bityutskiy
Run the tests with VID header at the second page as well for better coverage. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03stress-test.sh: develop the test furtherArtem Bityutskiy
Add a lot of test passes on nandsim with different geometry. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03runtests.sh: print more consistent messagesArtem Bityutskiy
On success we print "SUCCESS", lets print "FAILURE" on failure. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim: switch to shArtem Bityutskiy
We do not use bashizms any longer, so we can switch to 'sh'. Also, use strict sh options. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: simplify the codeArtem Bityutskiy
First find out what the kernel module parameters should be, then load it once, instead of doing it in each 'case' section. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: rename variableArtem Bityutskiy
Rename local variables - make them more descriptive and stop using capital letters. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: introduce a separate usage functionArtem Bityutskiy
Just because this is more readable. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: intruduce fatal functionArtem Bityutskiy
And used it, which simplifies the code. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: use dochere for help outputArtem Bityutskiy
Because it is cleaner. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03stress-test.sh: do not use pipe unnecessarilyArtem Bityutskiy
Use 'grep patt file' instead of cat file | grep patt. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: use less bashisms + cleanupsArtem Bityutskiy
Use posix shell constructs in the "if" statements. Additionally, use quotes everywhere for variables. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-03load_nandsim.sh: remove useless functionArtem Bityutskiy
We do not really need a separate complex function to check if nandsim is already loaded or not. Besides, it is safer to check /proc/mtd in case nandsim is compiled-in. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-02tests: ubi: add stress-test.shArtem Bityutskiy
It is not finished yet, but it will run all tests on nandsim and mtdram of different geometry. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-02tests: ubi: clean-up runtests.sh some moreArtem Bityutskiy
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-08-02tests: ubi: clean-up the runtests.sh scriptArtem Bityutskiy
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-06-29mtd-utils: Check mtdoffset is not larger than mtd.size in case of a bad block.Tomer Barletz
mtdoffset is being tested against mtd.size in the outer two loops, but the third nested one does not test against it. In case of a bad block we'll try to access an out of bounds offset in the next MEMGETBADBLOCK ioctl, which will fail with EINVAL. In case mtdoffset is indeed larger than the partition size, we need to bail, since there are not enough "good" blocks to complete the write. Signed-off-by: Tomer Barletz <barletz@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-06-29nandwrite: minor cleanupsArtem Bityutskiy
Remove extra brackets and some style changes to make it more readable for a person who deals mostly with the kernel code. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-05-07Release mtd-utils-1.5.0v1.5.0Artem Bityutskiy
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-05-04mtd-utils: better document --pagesize of mkfs.jffs2Shmulik Ladkani
Add a strict explanation '--pagesize' refers to target system's mm page size. Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-04-02Makefile: fixup previous 'make clean' fixBrian Norris
Apparently, Makefile comments need to be made without indentation. Otherwise, they are printed out as shell commands. This fix prevents seeing this in your shell during 'make clean': $ make clean ... # findutils v4.1.x (RHEL 4) do not have '+' syntax ... Signed-off-by: Brian Norris <computersforpeace@gmail.com> Acked-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-03-12Makefile: fix "make clean" for old GNU findBrian Norris
findutils v4.1.x does not have the `-exec CMD {} +' syntax. We can just as easily use the `-exec CMD {} \;' syntax. However, it will launch a lot more `rm' processes, so we only use it if the first form fails with an error. This isn't a perfect solution (`find -exec +' can fail for other reasons) but it works well enough. This problem manifests itself in RHEL 4, findutils 4.1.20: $ make clean rm -f /XXX/mtd-utils/*.o /XXX/mtd-utils/ftl_format ... find: missing argument to `-exec' make: *** [clean] Error 1 Signed-off-by: Brian Norris <computersforpeace@gmail.com> Acked-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-03-07mkfs.ubifs: do not ignore --max-leb-cnt when formatting an UBI volumeArtem Bityutskiy
When the output file is an UBI volume - mkfs.ubifs just sets --max-leb-cnt to the volume size and ignores the user-supplied --max-leb-cnt value, which is wrong. Let's set it to the volume size only if the user did not supply --max-leb-cnt. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-29libmtd_legacy: don't open device in R/WBrian Norris
On legacy kernels with ROM devices, we can get mtdinfo errors like: libmtd: error!: cannot open "/dev/mtd4" error 13 (Permission denied) mtdinfo: error!: libmtd failed get MTD device 4 information error 13 (Permission denied) We don't need O_RDRW access for informational ioctls(), so make this O_RDONLY. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-29libmtd: perform device checking firstBrian Norris
If we don't check for the MTD before calling `legacy_get_dev_info1', we may get errors like: libmtd: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist libmtd: error!: "/dev/mtd2" is not a character device mtdinfo: error!: libmtd failed get MTD device 2 information error 22 (Invalid argument) So reverse the order of these two checks. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-14libmtd: fix mtd_write() issues for large data-only writesBrian Norris
ioctl(MEMWRITE) is implemented with memdup_user(), and so it allocates kernel memory in contiguous regions. This limits its usefulness for large amounts of data, since contiguous kernel memory can become scarce. I have experienced "out of memory" problems with ubiformat, for instance, which writes in eraseblock-sized regions: ... ubiformat: flashing eraseblock 12 -- 72 % complete ubiformat: page allocation failure. order:8, mode:0xd0 Call Trace: [<8043fa7c>] dump_stack+0x8/0x34 [<8008c940>] __alloc_pages_nodemask+0x408/0x618 [<800bd748>] cache_alloc_refill+0x400/0x730 [<800bdbbc>] __kmalloc+0x144/0x154 [<8009cae4>] memdup_user+0x24/0x94 [<802d04e4>] mtd_ioctl+0xba8/0xbd0 [<802d0544>] mtd_unlocked_ioctl+0x38/0x5c [<800d43c0>] do_vfs_ioctl+0xa4/0x6e4 [<800d4a44>] sys_ioctl+0x44/0xa0 [<8000f95c>] stack_done+0x20/0x40 ... libmtd: error!: MEMWRITE ioctl failed for eraseblock 12 (mtd0) error 12 (Cannot allocate memory) ubiformat: error!: cannot write eraseblock 12 error 12 (Cannot allocate memory) This error can be mitigated for now by only using ioctl(MEMWRITE) when we need to write OOB data, since we can only do this in small transactions anyway. Then, data-only transactions (like those originating from ubiformat) can be carried out with write() calls. This issue can also be solved within the kernel ioctl(), but either way, this patch is still useful, since write() is more straightforward (and efficient?) than ioctl() for data-only writes. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-14mtdinfo: correct grammar on error messageBrian Norris
Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-14libmtd: fix segmentation fault on lib->mtdBrian Norris
Legacy systems do not initialize lib->mtd, so we shouldn't perform strlen(lib->mtd); this produces a segmentation fault. As this code isn't used in the legacy codepath, we can just move it down to an 'else' branch. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-14limbtd: implement mtd_dev_present for old kernelsArtem Bityutskiy
Implement the 'legacy_dev_present()' function which will check whether an MTD device is present by scanning the /proc/mtd file when the MTD subsystem does not support sysfs (the case for pre-2.6.30 kernels). This patch also moves the 'mtd_dev_present()' function to a slightly more logical position. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-02docfsdisk: minor cosmetic cleanupArtem Bityutskiy
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-02mtdinfo: fix `--all' for non-consecutive device numbersBrian Norris
When we have assigned non-consecutive device numbers to our MTD devices, then we run `mtdinfo --all', we get errors once mtdinfo tries to process the devices in the "hole". For instance, suppose that at boot time, we have one MTD (/dev/mtd0) then perform a sequence like the following: # modprobe mtdram # modprobe nandsim # rmmod mtdram Then at this point, we have should have devices 0 and 2 without 1. Then: # mtdinfo --all ... mtdinfo: error!: mtd1 does not correspond to any existing MTD device We add a check to first see if device is present, then continue to the next ID if it doesn't exist. Reported-by: Brian Foster <brian.foster@maxim-ic.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-02-02libmtd: add `mtd_dev_present()' library functionBrian Norris
Will be used for `mtdinfo --all' Artem: add a temporary stub for pre-2.6.30 kernels. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-01-27ubinfo: fix `--all' for non-consecutive device numbersBrian Norris
When we have assigned non-consecutive device numbers to our UBI devices, then we run `ubinfo --all', we get errors once ubinfo tries to process the devices in the "hole". For instance, suppose there are two UBI devices, /dev/ubi0 and /dev/ubi10; then, ubinfo will fail trying to open /dev/ubi1 with: ubinfo: error!: cannot get information about UBI device 1 error 2 (No such file or directory) This patch adds a check to first see if device is present, then continue to the next ID if it doesn't exist. Reported-by: Brian Foster <brian.foster@maxim-ic.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-01-27libubi: make `ubi_dev_present()' a library functionBrian Norris
We will use this function in ubinfo. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2012-01-13libmtd: Variable name same as function name causing compile to fail (Android)Thomas Cannon
When compiling mtd-utils against Android's bionic libc using the supplied cross compiler environment it errors: lib/libmtd.c: In function 'dev_node2num': lib/libmtd.c:444: error: called object 'major' is not a function lib/libmtd.c:445: error: called object 'minor' is not a function lib/libmtd.c: In function 'mtd_probe_node': lib/libmtd.c:1384: error: called object 'major' is not a function lib/libmtd.c:1385: error: called object 'minor' is not a function This patch updates the variable names for "major" and "minor" in two places. It then compiles cleanly. Artem: pick different names, also rename major1/minor1 variables for consistency. Signed-off-by: Thomas Cannon <mail at thomascannon.net> Cc: linux-mtd at lists.infradead.org
2011-12-19make_a_release.sh: remind about pushing the master branchArtem Bityutskiy
When we print about pushing the tag, also print about pushing the master branch - I forgot to do this when releasing 1.4.9. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@linux.intel.com>
2011-12-17Release mtd-utils-1.4.9v1.4.9Artem Bityutskiy
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2011-12-12libmtd: allow write operations when MEMWRITE is not supportedBrian Norris
MEMWRITE is a recently introduced write interface for MTD; however, it is only supported on NAND flash. mtd-utils should fall back to old write methods when either ENOTTY or EOPNOTSUPP are returned. This is a showstopper when, for instance, using ubiformat on NOR, which don't have a mtd->write_oob interface (and thus don't support MEMWRITE): ubiformat: formatting eraseblock 2 -- 1 % complete libmtd: error!: MEMWRITE ioctl failed for eraseblock 2 (mtd3) error 122 (Operation not supported) Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@linux.intel.com>
2011-12-07Add a script to make releasesArtem Bityutskiy
Credits to Mike Frysinger <vapier.adi@gmail.com> for review and comments. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
2011-12-05nandtest: seed random generator with timeBrian Norris
If a seed is not provided via --seed, we use the default rand() values, which produces the same sequence of values every run. Since this is undesirable, we should choose a random seed via the current time(). Note that this patch moves the srand() until after all the initial options processing. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@intel.com>
2011-12-01nandtest: use seed argumentJan Weitzel
if a seed is provided it is actually not used. First call is "seed = rand()" killing the given seed. Signed-off-by: Jan Weitzel <j.weitzel@phytec.de> Tested-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@intel.com>