* [PATCH v2 1/2] staging: erofs: add requirements field in superblock
@ 2019-06-11 2:42 Gao Xiang
2019-06-11 3:01 ` Chao Yu
2019-06-13 8:35 ` [PATCH v3 " Gao Xiang
0 siblings, 2 replies; 7+ messages in thread
From: Gao Xiang @ 2019-06-11 2:42 UTC (permalink / raw)
To: Chao Yu, Greg Kroah-Hartman, devel
Cc: LKML, linux-erofs, Chao Yu, Miao Xie, weidu.du, Fang Wei,
Gao Xiang, stable
There are some backward incompatible features pending
for months, mainly due to on-disk format expensions.
However, we should ensure that it cannot be mounted with
old kernels. Otherwise, it will causes unexpected behaviors.
Fixes: ba2b77a82022 ("staging: erofs: add super block operations")
Cc: <stable@vger.kernel.org> # 4.19+
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---
change log v2:
- update printed message
drivers/staging/erofs/erofs_fs.h | 13 ++++++++++---
drivers/staging/erofs/super.c | 17 +++++++++++++++++
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/erofs/erofs_fs.h b/drivers/staging/erofs/erofs_fs.h
index fa52898df006..8ddb2b3e7d39 100644
--- a/drivers/staging/erofs/erofs_fs.h
+++ b/drivers/staging/erofs/erofs_fs.h
@@ -17,10 +17,16 @@
#define EROFS_SUPER_MAGIC_V1 0xE0F5E1E2
#define EROFS_SUPER_OFFSET 1024
+/*
+ * Any bits that aren't in EROFS_ALL_REQUIREMENTS should be
+ * incompatible with this kernel version.
+ */
+#define EROFS_ALL_REQUIREMENTS 0
+
struct erofs_super_block {
/* 0 */__le32 magic; /* in the little endian */
/* 4 */__le32 checksum; /* crc32c(super_block) */
-/* 8 */__le32 features;
+/* 8 */__le32 features; /* (aka. feature_compat) */
/* 12 */__u8 blkszbits; /* support block_size == PAGE_SIZE only */
/* 13 */__u8 reserved;
@@ -34,9 +40,10 @@ struct erofs_super_block {
/* 44 */__le32 xattr_blkaddr;
/* 48 */__u8 uuid[16]; /* 128-bit uuid for volume */
/* 64 */__u8 volume_name[16]; /* volume name */
+/* 80 */__le32 requirements; /* (aka. feature_incompat) */
-/* 80 */__u8 reserved2[48]; /* 128 bytes */
-} __packed;
+/* 84 */__u8 reserved2[44];
+} __packed; /* 128 bytes */
/*
* erofs inode data mapping:
diff --git a/drivers/staging/erofs/super.c b/drivers/staging/erofs/super.c
index f580d4ef77a1..fdcf65b3e52d 100644
--- a/drivers/staging/erofs/super.c
+++ b/drivers/staging/erofs/super.c
@@ -71,6 +71,20 @@ static void free_inode(struct inode *inode)
kmem_cache_free(erofs_inode_cachep, vi);
}
+static bool check_layout_compatibility(struct super_block *sb,
+ struct erofs_super_block *layout)
+{
+ const unsigned int requirements = le32_to_cpu(layout->requirements);
+
+ /* check if current kernel meets all mandatory requirements */
+ if (requirements & (~EROFS_ALL_REQUIREMENTS)) {
+ errln("unidentified requirements %x, please upgrade kernel version",
+ requirements & ~EROFS_ALL_REQUIREMENTS);
+ return false;
+ }
+ return true;
+}
+
static int superblock_read(struct super_block *sb)
{
struct erofs_sb_info *sbi;
@@ -104,6 +118,9 @@ static int superblock_read(struct super_block *sb)
goto out;
}
+ if (!check_layout_compatibility(sb, layout))
+ goto out;
+
sbi->blocks = le32_to_cpu(layout->blocks);
sbi->meta_blkaddr = le32_to_cpu(layout->meta_blkaddr);
#ifdef CONFIG_EROFS_FS_XATTR
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] staging: erofs: add requirements field in superblock
2019-06-11 2:42 [PATCH v2 1/2] staging: erofs: add requirements field in superblock Gao Xiang
@ 2019-06-11 3:01 ` Chao Yu
2019-06-13 8:35 ` [PATCH v3 " Gao Xiang
1 sibling, 0 replies; 7+ messages in thread
From: Chao Yu @ 2019-06-11 3:01 UTC (permalink / raw)
To: Gao Xiang, Greg Kroah-Hartman, devel
Cc: LKML, linux-erofs, Chao Yu, Miao Xie, weidu.du, Fang Wei, stable
On 2019/6/11 10:42, Gao Xiang wrote:
> There are some backward incompatible features pending
> for months, mainly due to on-disk format expensions.
>
> However, we should ensure that it cannot be mounted with
> old kernels. Otherwise, it will causes unexpected behaviors.
>
> Fixes: ba2b77a82022 ("staging: erofs: add super block operations")
> Cc: <stable@vger.kernel.org> # 4.19+
> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Thanks,
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/2] staging: erofs: add requirements field in superblock
2019-06-11 2:42 [PATCH v2 1/2] staging: erofs: add requirements field in superblock Gao Xiang
2019-06-11 3:01 ` Chao Yu
@ 2019-06-13 8:35 ` Gao Xiang
[not found] ` <20190615221606.1C12F2183F@mail.kernel.org>
2019-06-16 7:00 ` Gao Xiang
1 sibling, 2 replies; 7+ messages in thread
From: Gao Xiang @ 2019-06-13 8:35 UTC (permalink / raw)
To: Greg Kroah-Hartman, Chao Yu, devel
Cc: LKML, linux-erofs, Chao Yu, Miao Xie, weidu.du, Fang Wei,
Gao Xiang, stable
There are some backward incompatible features pending
for months, mainly due to on-disk format expensions.
However, we should ensure that it cannot be mounted with
old kernels. Otherwise, it will causes unexpected behaviors.
Fixes: ba2b77a82022 ("staging: erofs: add super block operations")
Cc: <stable@vger.kernel.org> # 4.19+
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---
change log v3:
- record requirements in erofs_sb_info for runtime use as well;
change log v2:
- update printed message
drivers/staging/erofs/erofs_fs.h | 13 ++++++++++---
drivers/staging/erofs/internal.h | 2 ++
drivers/staging/erofs/super.c | 19 +++++++++++++++++++
3 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/erofs/erofs_fs.h b/drivers/staging/erofs/erofs_fs.h
index fa52898df006..8ddb2b3e7d39 100644
--- a/drivers/staging/erofs/erofs_fs.h
+++ b/drivers/staging/erofs/erofs_fs.h
@@ -17,10 +17,16 @@
#define EROFS_SUPER_MAGIC_V1 0xE0F5E1E2
#define EROFS_SUPER_OFFSET 1024
+/*
+ * Any bits that aren't in EROFS_ALL_REQUIREMENTS should be
+ * incompatible with this kernel version.
+ */
+#define EROFS_ALL_REQUIREMENTS 0
+
struct erofs_super_block {
/* 0 */__le32 magic; /* in the little endian */
/* 4 */__le32 checksum; /* crc32c(super_block) */
-/* 8 */__le32 features;
+/* 8 */__le32 features; /* (aka. feature_compat) */
/* 12 */__u8 blkszbits; /* support block_size == PAGE_SIZE only */
/* 13 */__u8 reserved;
@@ -34,9 +40,10 @@ struct erofs_super_block {
/* 44 */__le32 xattr_blkaddr;
/* 48 */__u8 uuid[16]; /* 128-bit uuid for volume */
/* 64 */__u8 volume_name[16]; /* volume name */
+/* 80 */__le32 requirements; /* (aka. feature_incompat) */
-/* 80 */__u8 reserved2[48]; /* 128 bytes */
-} __packed;
+/* 84 */__u8 reserved2[44];
+} __packed; /* 128 bytes */
/*
* erofs inode data mapping:
diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
index 911333cdeef4..fc732c86ecd8 100644
--- a/drivers/staging/erofs/internal.h
+++ b/drivers/staging/erofs/internal.h
@@ -115,6 +115,8 @@ struct erofs_sb_info {
u8 uuid[16]; /* 128-bit uuid for volume */
u8 volume_name[16]; /* volume name */
+ u32 requirements;
+
char *dev_name;
unsigned int mount_opt;
diff --git a/drivers/staging/erofs/super.c b/drivers/staging/erofs/super.c
index f580d4ef77a1..cadbcc11702a 100644
--- a/drivers/staging/erofs/super.c
+++ b/drivers/staging/erofs/super.c
@@ -71,6 +71,22 @@ static void free_inode(struct inode *inode)
kmem_cache_free(erofs_inode_cachep, vi);
}
+static bool check_layout_compatibility(struct super_block *sb,
+ struct erofs_super_block *layout)
+{
+ const unsigned int requirements = le32_to_cpu(layout->requirements);
+
+ EROFS_SB(sb)->requirements = requirements;
+
+ /* check if current kernel meets all mandatory requirements */
+ if (requirements & (~EROFS_ALL_REQUIREMENTS)) {
+ errln("unidentified requirements %x, please upgrade kernel version",
+ requirements & ~EROFS_ALL_REQUIREMENTS);
+ return false;
+ }
+ return true;
+}
+
static int superblock_read(struct super_block *sb)
{
struct erofs_sb_info *sbi;
@@ -104,6 +120,9 @@ static int superblock_read(struct super_block *sb)
goto out;
}
+ if (!check_layout_compatibility(sb, layout))
+ goto out;
+
sbi->blocks = le32_to_cpu(layout->blocks);
sbi->meta_blkaddr = le32_to_cpu(layout->meta_blkaddr);
#ifdef CONFIG_EROFS_FS_XATTR
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] staging: erofs: add requirements field in superblock
[not found] ` <20190615221606.1C12F2183F@mail.kernel.org>
@ 2019-06-16 6:47 ` Gao Xiang
0 siblings, 0 replies; 7+ messages in thread
From: Gao Xiang @ 2019-06-16 6:47 UTC (permalink / raw)
To: Sasha Levin; +Cc: Greg Kroah-Hartman, LKML, stable
Hi Sasha,
On 2019/6/16 6:16, Sasha Levin wrote:
> Hi,
>
> [This is an automated email]
>
> This commit has been processed because it contains a "Fixes:" tag,
> fixing commit: ba2b77a82022 staging: erofs: add super block operations.
>
> The bot has tested the following trees: v5.1.9, v4.19.50.
>
> v5.1.9: Failed to apply! Possible dependencies:
> Unable to calculate
>
> v4.19.50: Failed to apply! Possible dependencies:
> Unable to calculate
>
>
> How should we proceed with this patch?
I will manually make patches for v5.1.9 and v4.19.50
after it gets merged.
Thanks,
Gao Xiang
>
> --
> Thanks,
> Sasha
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] staging: erofs: add requirements field in superblock
2019-06-13 8:35 ` [PATCH v3 " Gao Xiang
[not found] ` <20190615221606.1C12F2183F@mail.kernel.org>
@ 2019-06-16 7:00 ` Gao Xiang
2019-06-16 7:14 ` Greg Kroah-Hartman
1 sibling, 1 reply; 7+ messages in thread
From: Gao Xiang @ 2019-06-16 7:00 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Chao Yu, devel, LKML, linux-erofs, Chao Yu, Miao Xie, weidu.du,
Fang Wei, stable
Hi Greg,
Sorry for annoying... Could you help merge these two fixes? Thanks in advance...
decompression inplace optimization needs these two patches and I will integrate
erofs decompression inplace optimization later for linux-next 5.3, and try to start
making effort on moving to fs/ directory on kernel 5.4...
Thanks,
Gao Xiang
On 2019/6/13 16:35, Gao Xiang wrote:
> There are some backward incompatible features pending
> for months, mainly due to on-disk format expensions.
>
> However, we should ensure that it cannot be mounted with
> old kernels. Otherwise, it will causes unexpected behaviors.
>
> Fixes: ba2b77a82022 ("staging: erofs: add super block operations")
> Cc: <stable@vger.kernel.org> # 4.19+
> Reviewed-by: Chao Yu <yuchao0@huawei.com>
> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
> ---
> change log v3:
> - record requirements in erofs_sb_info for runtime use as well;
>
> change log v2:
> - update printed message
>
> drivers/staging/erofs/erofs_fs.h | 13 ++++++++++---
> drivers/staging/erofs/internal.h | 2 ++
> drivers/staging/erofs/super.c | 19 +++++++++++++++++++
> 3 files changed, 31 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/staging/erofs/erofs_fs.h b/drivers/staging/erofs/erofs_fs.h
> index fa52898df006..8ddb2b3e7d39 100644
> --- a/drivers/staging/erofs/erofs_fs.h
> +++ b/drivers/staging/erofs/erofs_fs.h
> @@ -17,10 +17,16 @@
> #define EROFS_SUPER_MAGIC_V1 0xE0F5E1E2
> #define EROFS_SUPER_OFFSET 1024
>
> +/*
> + * Any bits that aren't in EROFS_ALL_REQUIREMENTS should be
> + * incompatible with this kernel version.
> + */
> +#define EROFS_ALL_REQUIREMENTS 0
> +
> struct erofs_super_block {
> /* 0 */__le32 magic; /* in the little endian */
> /* 4 */__le32 checksum; /* crc32c(super_block) */
> -/* 8 */__le32 features;
> +/* 8 */__le32 features; /* (aka. feature_compat) */
> /* 12 */__u8 blkszbits; /* support block_size == PAGE_SIZE only */
> /* 13 */__u8 reserved;
>
> @@ -34,9 +40,10 @@ struct erofs_super_block {
> /* 44 */__le32 xattr_blkaddr;
> /* 48 */__u8 uuid[16]; /* 128-bit uuid for volume */
> /* 64 */__u8 volume_name[16]; /* volume name */
> +/* 80 */__le32 requirements; /* (aka. feature_incompat) */
>
> -/* 80 */__u8 reserved2[48]; /* 128 bytes */
> -} __packed;
> +/* 84 */__u8 reserved2[44];
> +} __packed; /* 128 bytes */
>
> /*
> * erofs inode data mapping:
> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
> index 911333cdeef4..fc732c86ecd8 100644
> --- a/drivers/staging/erofs/internal.h
> +++ b/drivers/staging/erofs/internal.h
> @@ -115,6 +115,8 @@ struct erofs_sb_info {
>
> u8 uuid[16]; /* 128-bit uuid for volume */
> u8 volume_name[16]; /* volume name */
> + u32 requirements;
> +
> char *dev_name;
>
> unsigned int mount_opt;
> diff --git a/drivers/staging/erofs/super.c b/drivers/staging/erofs/super.c
> index f580d4ef77a1..cadbcc11702a 100644
> --- a/drivers/staging/erofs/super.c
> +++ b/drivers/staging/erofs/super.c
> @@ -71,6 +71,22 @@ static void free_inode(struct inode *inode)
> kmem_cache_free(erofs_inode_cachep, vi);
> }
>
> +static bool check_layout_compatibility(struct super_block *sb,
> + struct erofs_super_block *layout)
> +{
> + const unsigned int requirements = le32_to_cpu(layout->requirements);
> +
> + EROFS_SB(sb)->requirements = requirements;
> +
> + /* check if current kernel meets all mandatory requirements */
> + if (requirements & (~EROFS_ALL_REQUIREMENTS)) {
> + errln("unidentified requirements %x, please upgrade kernel version",
> + requirements & ~EROFS_ALL_REQUIREMENTS);
> + return false;
> + }
> + return true;
> +}
> +
> static int superblock_read(struct super_block *sb)
> {
> struct erofs_sb_info *sbi;
> @@ -104,6 +120,9 @@ static int superblock_read(struct super_block *sb)
> goto out;
> }
>
> + if (!check_layout_compatibility(sb, layout))
> + goto out;
> +
> sbi->blocks = le32_to_cpu(layout->blocks);
> sbi->meta_blkaddr = le32_to_cpu(layout->meta_blkaddr);
> #ifdef CONFIG_EROFS_FS_XATTR
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] staging: erofs: add requirements field in superblock
2019-06-16 7:00 ` Gao Xiang
@ 2019-06-16 7:14 ` Greg Kroah-Hartman
2019-06-16 7:21 ` Gao Xiang
0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2019-06-16 7:14 UTC (permalink / raw)
To: Gao Xiang
Cc: devel, Chao Yu, linux-erofs, Chao Yu, LKML, stable, weidu.du,
Fang Wei, Miao Xie
On Sun, Jun 16, 2019 at 03:00:38PM +0800, Gao Xiang wrote:
> Hi Greg,
>
> Sorry for annoying... Could you help merge these two fixes? Thanks in advance...
It was only 3 days, please give me at the very least, a week or so for
staging patches.
> decompression inplace optimization needs these two patches and I will integrate
> erofs decompression inplace optimization later for linux-next 5.3, and try to start
> making effort on moving to fs/ directory on kernel 5.4...
You can always send follow-on patches, I apply them in the correct
order. I will get to these next week, thanks.
greg k-h
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] staging: erofs: add requirements field in superblock
2019-06-16 7:14 ` Greg Kroah-Hartman
@ 2019-06-16 7:21 ` Gao Xiang
0 siblings, 0 replies; 7+ messages in thread
From: Gao Xiang @ 2019-06-16 7:21 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: devel, Chao Yu, linux-erofs, Chao Yu, LKML, stable, weidu.du,
Fang Wei, Miao Xie
On 2019/6/16 15:14, Greg Kroah-Hartman wrote:
> On Sun, Jun 16, 2019 at 03:00:38PM +0800, Gao Xiang wrote:
>> Hi Greg,
>>
>> Sorry for annoying... Could you help merge these two fixes? Thanks in advance...
>
> It was only 3 days, please give me at the very least, a week or so for
> staging patches.
>
>> decompression inplace optimization needs these two patches and I will integrate
>> erofs decompression inplace optimization later for linux-next 5.3, and try to start
>> making effort on moving to fs/ directory on kernel 5.4...
>
> You can always send follow-on patches, I apply them in the correct
> order. I will get to these next week, thanks.
OK, I was actually just afraid of the appling order. I was thinking of merging
these two patches in advance since the new series has the dependency on these patches.
Thanks,
Gao Xiang
>
> greg k-h
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-06-16 7:21 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-11 2:42 [PATCH v2 1/2] staging: erofs: add requirements field in superblock Gao Xiang
2019-06-11 3:01 ` Chao Yu
2019-06-13 8:35 ` [PATCH v3 " Gao Xiang
[not found] ` <20190615221606.1C12F2183F@mail.kernel.org>
2019-06-16 6:47 ` Gao Xiang
2019-06-16 7:00 ` Gao Xiang
2019-06-16 7:14 ` Greg Kroah-Hartman
2019-06-16 7:21 ` Gao Xiang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox