@@ -954,8 +954,13 @@ int mmc_switch_part(struct mmc *mmc, unsigned int part_num)
* to return to representing the raw device.
*/
if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
+ struct blk_desc *desc = mmc_get_blk_desc(mmc);
+
ret = mmc_set_capacity(mmc, part_num);
- mmc_get_blk_desc(mmc)->hwpart = part_num;
+ if (desc && desc->hwpart != part_num) {
+ desc->hwpart = part_num;
+ blkcache_invalidate(desc->if_type, desc->devnum);
+ }
}
return ret;
@@ -2673,7 +2678,12 @@ retry:
return err;
/* The internal partition reset to user partition(0) at every CMD0*/
- mmc_get_blk_desc(mmc)->hwpart = 0;
+ struct blk_desc *desc = mmc_get_blk_desc(mmc);
+
+ if (desc && desc->hwpart != 0) {
+ desc->hwpart = 0;
+ blkcache_invalidate(desc->if_type, desc->devnum);
+ }
/* Test for SD version 2 */
err = mmc_send_if_cond(mmc);
Signed-off-by: Jan Šedivý <jans@zhinst.com> --- drivers/mmc/mmc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)