diff options
| author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2009-03-27 10:21:14 +0100 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-04-04 22:44:22 +0200 | 
| commit | febd7e4174e54579c9aa165c85c519fe5288f9d2 (patch) | |
| tree | 77824e8f6861c68b4151824d2e25cfb1216ee784 /fs/ubifs/super.c | |
| parent | 852dbfdd56f68eb67d138b306a64e4de58dabb91 (diff) | |
| download | olio-uboot-2014.01-febd7e4174e54579c9aa165c85c519fe5288f9d2.tar.xz olio-uboot-2014.01-febd7e4174e54579c9aa165c85c519fe5288f9d2.zip | |
UBIFS: add R/O compatibility
Now UBIFS is supported by u-boot. If we ever decide to change the
media format, then people will have to upgrade their u-boots to
mount new format images. However, very often it is possible to
preserve R/O forward-compatibility, even though the write
forward-compatibility is not preserved.
This patch introduces a new super-block field which stores the
R/O compatibility version.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Acked-by: Adrian Hunter <Adrian.Hunter@nokia.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'fs/ubifs/super.c')
| -rw-r--r-- | fs/ubifs/super.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 95f2a4125..391dea425 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -727,8 +727,9 @@ static int mount_ubifs(struct ubifs_info *c)  	x = (long long)c->log_lebs * c->leb_size + c->max_bud_bytes;  	ubifs_msg("journal size:       %lld bytes (%lld KiB, %lld MiB, %d "  		  "LEBs)", x, x >> 10, x >> 20, c->log_lebs + c->max_bud_cnt); -	ubifs_msg("media format:       %d (latest is %d)", -		  c->fmt_version, UBIFS_FORMAT_VERSION); +	ubifs_msg("media format:       w%d/r%d (latest is w%d/r%d)", +		  c->fmt_version, c->ro_compat_version, +		  UBIFS_FORMAT_VERSION, UBIFS_RO_COMPAT_VERSION);  	ubifs_msg("default compressor: %s", ubifs_compr_name(c->default_compr));  	ubifs_msg("reserved for root:  %llu bytes (%llu KiB)",  		c->report_rp_size, c->report_rp_size >> 10); @@ -967,6 +968,15 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent)  	if (c->max_inode_sz > MAX_LFS_FILESIZE)  		sb->s_maxbytes = c->max_inode_sz = MAX_LFS_FILESIZE; +	if (c->rw_incompat) { +		ubifs_err("the file-system is not R/W-compatible"); +		ubifs_msg("on-flash format version is w%d/r%d, but software " +			  "only supports up to version w%d/r%d", c->fmt_version, +			  c->ro_compat_version, UBIFS_FORMAT_VERSION, +			  UBIFS_RO_COMPAT_VERSION); +		return -EROFS; +	} +  	mutex_lock(&c->umount_mutex);  	err = mount_ubifs(c);  	if (err) { |