diff --git a/drivers/mtd/ubi/barebox.c b/drivers/mtd/ubi/barebox.c index 329cf45..2ad731a 100644 --- a/drivers/mtd/ubi/barebox.c +++ b/drivers/mtd/ubi/barebox.c @@ -162,6 +162,21 @@ return ofs; } +static int ubi_volume_cdev_truncate(struct cdev *cdev, size_t size) +{ + struct ubi_volume_cdev_priv *priv = cdev->priv; + struct ubi_device *ubi = priv->ubi; + struct ubi_volume *vol = priv->vol; + uint64_t rsvd_bytes; + + rsvd_bytes = (long long)vol->reserved_pebs * + ubi->leb_size - vol->data_pad; + if (size > rsvd_bytes) + return -ENOSPC; + + return 0; +} + static int ubi_volume_cdev_ioctl(struct cdev *cdev, int cmd, void *buf) { struct ubi_volume_cdev_priv *priv = cdev->priv; @@ -210,6 +225,7 @@ .write = ubi_volume_cdev_write, .lseek = ubi_volume_cdev_lseek, .ioctl = ubi_volume_cdev_ioctl, + .truncate = ubi_volume_cdev_truncate, }; int ubi_volume_cdev_add(struct ubi_device *ubi, struct ubi_volume *vol)