From: hujianyang <hujianyang@huawei.com>
To: linux-mtd <linux-mtd@lists.infradead.org>
Cc: Artem Bityutskiy <dedekind1@gmail.com>
Subject: [PATCH 1/7] UBI: Add a new ioctl to support ubidump
Date: Mon, 7 Jul 2014 15:17:47 +0800 [thread overview]
Message-ID: <53BA499B.5090206@huawei.com> (raw)
In-Reply-To: <53BA491E.8060502@huawei.com>
Add a new ioctl to dump EC header and VID header to user space. This
ioctl is called without lock so I think users *should not* run ubidump
when volume is mounted.
Struct ubi_ebdump_req is used to transfer data between user space and
kernel space. Can I find a way to set buffer length from '64' to
UBI_VID_HDR_SIZE and UBI_EC_HDR_SIZE?
Signed-off-by: hujianyang <hujianyang@huawei.com>
---
drivers/mtd/ubi/cdev.c | 50 +++++++++++++++++++++++++++++++++++++++++++++
include/uapi/mtd/ubi-user.h | 15 ++++++++++++++
2 files changed, 65 insertions(+)
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index 7646220..5b94323 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -581,6 +581,56 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd,
break;
}
+ case UBI_IOCEBDUMP:
+ {
+ int pnum;
+ struct ubi_ebdump_req req;
+ struct ubi_ec_hdr *ec_hdr;
+ struct ubi_vid_hdr *vid_hdr;
+
+ err = copy_from_user(&req, argp,
+ sizeof(struct ubi_ebdump_req));
+ if (err) {
+ err = -EFAULT;
+ break;
+ }
+
+ err = ubi_is_mapped(desc, req.lnum);
+ if (err <= 0)
+ break;
+ pnum = vol->eba_tbl[req.lnum];
+ req.pnum = pnum;
+
+ /*
+ * No need to check return value of ubi_io_read(),
+ * we will confirm the date in user space.
+ */
+ ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
+ if (!ec_hdr) {
+ err = -ENOMEM;
+ break;
+ }
+ ubi_io_read_ec_hdr(ubi, pnum, ec_hdr, 0);
+ memcpy(req.ec_hdr, ec_hdr, UBI_EC_HDR_SIZE);
+ kfree(ec_hdr);
+
+ vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
+ if (!vid_hdr) {
+ err = -ENOMEM;
+ break;
+ }
+ ubi_io_read_vid_hdr(ubi, pnum, vid_hdr, 1);
+ memcpy(req.vid_hdr, vid_hdr, UBI_VID_HDR_SIZE);
+ ubi_free_vid_hdr(ubi, vid_hdr);
+
+ err = copy_to_user(argp, &req,
+ sizeof(struct ubi_ebdump_req));
+ if (err)
+ err = -EFAULT;
+
+ break;
+ }
+
default:
err = -ENOTTY;
break;
diff --git a/include/uapi/mtd/ubi-user.h b/include/uapi/mtd/ubi-user.h
index 1927b0d..76ff035 100644
--- a/include/uapi/mtd/ubi-user.h
+++ b/include/uapi/mtd/ubi-user.h
@@ -205,6 +205,8 @@
#define UBI_IOCVOLCRBLK _IOW(UBI_VOL_IOC_MAGIC, 7, struct ubi_blkcreate_req)
/* Remove the R/O block device */
#define UBI_IOCVOLRMBLK _IO(UBI_VOL_IOC_MAGIC, 8)
+/* Dump LEB header */
+#define UBI_IOCEBDUMP _IOW(UBI_VOL_IOC_MAGIC, 9, struct ubi_ebdump_req)
/* Maximum MTD device name length supported by UBI */
#define MAX_UBI_MTD_NAME_LEN 127
@@ -442,4 +444,17 @@ struct ubi_blkcreate_req {
__s8 padding[128];
} __packed;
+/**
+ * struct ubi_ebdump_req - a data structure used in dump eraseblock header.
+ * @lnum: logical eraseblock num to dump
+ * @ec_hdr: ec_hdr to set
+ * @vid_hdr: vid_hdr to set
+ */
+struct ubi_ebdump_req {
+ __s32 lnum;
+ __s32 pnum;
+ char ec_hdr[64];
+ char vid_hdr[64];
+} __packed;
+
#endif /* __UBI_USER_H__ */
--
1.8.1.4
next prev parent reply other threads:[~2014-07-07 7:18 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-07 7:15 [PATCH RFC] ubi-utils: Add a new utility ubidump hujianyang
2014-07-07 7:17 ` hujianyang [this message]
2014-07-16 7:59 ` [PATCH 1/7] UBI: Add a new ioctl to support ubidump Artem Bityutskiy
2014-07-16 8:47 ` hujianyang
2014-07-16 10:30 ` Artem Bityutskiy
2014-07-07 7:19 ` [PATCH 2/7] Add new ioctl in userspace hujianyang
2014-07-07 7:20 ` [PATCH 3/7] Add ubifs-media.h hujianyang
2014-07-07 7:22 ` [PATCH 4/7] Add libubifs.h hujianyang
2014-07-07 7:24 ` [PATCH 5/7] Add libubifs.c hujianyang
2014-07-07 7:26 ` [PATCH 6/7] New utility ubidump hujianyang
2014-07-16 8:05 ` Artem Bityutskiy
2014-07-16 8:53 ` hujianyang
2014-07-16 10:37 ` Artem Bityutskiy
2014-07-16 11:27 ` hujianyang
2014-07-16 11:37 ` Artem Bityutskiy
2014-07-16 11:43 ` Artem Bityutskiy
2014-07-16 11:57 ` hujianyang
2014-07-21 16:20 ` Bill Pringlemeir
2014-07-22 8:15 ` hujianyang
2014-07-22 15:42 ` Bill Pringlemeir
2014-07-29 9:14 ` Artem Bityutskiy
2014-07-29 10:01 ` hujianyang
2014-07-07 7:27 ` [PATCH 7/7] Compile support hujianyang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53BA499B.5090206@huawei.com \
--to=hujianyang@huawei.com \
--cc=dedekind1@gmail.com \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.