
Hi Philipp,
On 12/14/2017 05:53 PM, Dr. Philipp Tomsich wrote:
Kever,
On 14 Dec 2017, at 07:39, Kever Yang kever.yang@rock-chips.com wrote:
Do not need to scan disk every time when we get part info by name.
How does this interact with USB devices? I.e.: what happens, when you get the partition-info for a usb drive, then change the attached usb drive (with only a single one attached, but a different one) and do a ‘usb rescan’?
I don't understand your question here, the part driver is using block api, no matter its from usb or emmc, it's the same for part driver. USB msc driver should always call part_init() for a new device.
This patch does not change the functionality of the origin implement, but with a better api, and do not need to scan the disk if the disk already have a known type.
Thanks, - Kever
Regards, Philipp.
Signed-off-by: Kever Yang kever.yang@rock-chips.com
disk/part.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/disk/part.c b/disk/part.c index b007138..96c2858 100644 --- a/disk/part.c +++ b/disk/part.c @@ -638,26 +638,23 @@ cleanup: int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, disk_partition_t *info) {
- struct part_driver *first_drv =
ll_entry_start(struct part_driver, part_driver);
- const int n_drvs = ll_entry_count(struct part_driver, part_driver); struct part_driver *part_drv;
- int ret;
- int i;
- for (part_drv = first_drv; part_drv != first_drv + n_drvs; part_drv++) {
int ret;
int i;
for (i = 1; i < part_drv->max_entries; i++) {
ret = part_drv->get_info(dev_desc, i, info);
if (ret != 0) {
/* no more entries in table */
break;
}
if (strcmp(name, (const char *)info->name) == 0) {
/* matched */
return i;
}
- part_drv = part_driver_lookup_type(dev_desc);
- for (i = 1; i < part_drv->max_entries; i++) {
ret = part_drv->get_info(dev_desc, i, info);
if (ret != 0) {
/* no more entries in table */
break;
}
if (strcmp(name, (const char *)info->name) == 0) {
/* matched */
} }return i;
- return -1;
}
-- 1.9.1