| From 06d9c2905f745c8b1920a335cbb366ba6b0fc754 Mon Sep 17 00:00:00 2001 |
| From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> |
| Date: Fri, 29 Aug 2014 18:42:29 -0300 |
| Subject: UBI: block: Add support for the UBI_VOLUME_UPDATED notification |
| |
| From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> |
| |
| commit 06d9c2905f745c8b1920a335cbb366ba6b0fc754 upstream. |
| |
| Static volumes can change its 'used_bytes' when they get updated, |
| and so the block interface must listen to the UBI_VOLUME_UPDATED |
| notification to resize the block device accordingly. |
| |
| Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> |
| Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/mtd/ubi/block.c | 16 ++++++++++++++-- |
| 1 file changed, 14 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/mtd/ubi/block.c |
| +++ b/drivers/mtd/ubi/block.c |
| @@ -523,8 +523,12 @@ static int ubiblock_resize(struct ubi_vo |
| } |
| |
| mutex_lock(&dev->dev_mutex); |
| - set_capacity(dev->gd, disk_capacity); |
| - ubi_msg("%s resized to %lld bytes", dev->gd->disk_name, vi->used_bytes); |
| + |
| + if (get_capacity(dev->gd) != disk_capacity) { |
| + set_capacity(dev->gd, disk_capacity); |
| + ubi_msg("%s resized to %lld bytes", dev->gd->disk_name, |
| + vi->used_bytes); |
| + } |
| mutex_unlock(&dev->dev_mutex); |
| mutex_unlock(&devices_mutex); |
| return 0; |
| @@ -548,6 +552,14 @@ static int ubiblock_notify(struct notifi |
| case UBI_VOLUME_RESIZED: |
| ubiblock_resize(&nt->vi); |
| break; |
| + case UBI_VOLUME_UPDATED: |
| + /* |
| + * If the volume is static, a content update might mean the |
| + * size (i.e. used_bytes) was also changed. |
| + */ |
| + if (nt->vi.vol_type == UBI_STATIC_VOLUME) |
| + ubiblock_resize(&nt->vi); |
| + break; |
| default: |
| break; |
| } |