All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Price <anprice@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 3/3] gfs2: Add a crc field to resource group headers
Date: Thu, 7 Dec 2017 12:32:27 +0000	[thread overview]
Message-ID: <1d9b4f6f-e711-d68d-43ce-dca697be8687@redhat.com> (raw)
In-Reply-To: <1f8d58b4-fa9e-ace9-a31b-fcfb066a0cf0@redhat.com>

On 07/12/17 12:02, Steven Whitehouse wrote:
> On 07/12/17 11:52, Andrew Price wrote:
>> Add the rg_crc field to store a crc32 of the gfs2_rgrp structure. This
>> allows us to check resource group headers' integrity and removes the
>> requirement to check them against the rindex entries in fsck. If this
>> field is found to be zero, it should be ignored (or updated with an
>> accurate value).
>>
>> Signed-off-by: Andrew Price <anprice@redhat.com>
>> ---
>> ? fs/gfs2/rgrp.c?????????????????? | 5 +++++
>> ? include/uapi/linux/gfs2_ondisk.h | 3 ++-
>> ? 2 files changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
>> index 9a6fa21a2f5a..80e020fc117f 100644
>> --- a/fs/gfs2/rgrp.c
>> +++ b/fs/gfs2/rgrp.c
>> @@ -34,6 +34,7 @@
>> ? #include "log.h"
>> ? #include "inode.h"
>> ? #include "trace_gfs2.h"
>> +#include "dir.h"
>> ? #define BFITNOENT ((u32)~0)
>> ? #define NO_BLOCK ((u64)~0)
>> @@ -1047,6 +1048,7 @@ static void gfs2_rgrp_out(struct gfs2_rgrpd 
>> *rgd, void *buf)
>> ? {
>> ????? struct gfs2_rgrpd *next = gfs2_rgrpd_get_next(rgd);
>> ????? struct gfs2_rgrp *str = buf;
>> +??? u32 crc;
>> ????? str->rg_flags = cpu_to_be32(rgd->rd_flags & ~GFS2_RDF_MASK);
>> ????? str->rg_free = cpu_to_be32(rgd->rd_free);
>> @@ -1057,6 +1059,9 @@ static void gfs2_rgrp_out(struct gfs2_rgrpd 
>> *rgd, void *buf)
>> ????? str->rg_data0 = cpu_to_be64(rgd->rd_data0);
>> ????? str->rg_data = cpu_to_be64(rgd->rd_data);
>> ????? str->rg_bitbytes = cpu_to_be64(rgd->rd_bitbytes);
>> +??? str->rg_crc = 0;
>> +??? crc = gfs2_disk_hash(buf, sizeof(struct gfs2_rgrp));
>> +??? str->rg_crc = cpu_to_be32(crc);
>> ????? memset(&str->rg_reserved, 0, sizeof(str->rg_reserved));
>> ? }
>> diff --git a/include/uapi/linux/gfs2_ondisk.h 
>> b/include/uapi/linux/gfs2_ondisk.h
>> index 648e0cbca574..09f0920f07e9 100644
>> --- a/include/uapi/linux/gfs2_ondisk.h
>> +++ b/include/uapi/linux/gfs2_ondisk.h
>> @@ -197,8 +197,9 @@ struct gfs2_rgrp {
>> ????? __be64 rg_data0;???? /* First data location */
>> ????? __be32 rg_data;????? /* Number of data blocks in rgrp */
>> ????? __be32 rg_bitbytes;? /* Number of bytes in data bitmaps */
>> +??? __be32 rg_crc;?????? /* crc32 of the structure with this field 0 */
> In this case because rg_crc is followed by another structure element, if 
> that element is 64 bit aligned, then there might be a gap here. Worth 
> checking that the overall structure size has not changed, and might be 
> worth adding an explicit 32 bit pad field to pair up with the crc too, 
> and reducing the reserved field by another 4 bytes.

sizeof(struct gfs2_rgrp) is 128 before and after the change, which I 
would expect as rg_reserved doesn't require 64-bit alignment. I can add 
a padding field as documentation though.

>> -??? __u8 rg_reserved[64]; /* Several fields from gfs1 now reserved */
>> +??? __u8 rg_reserved[60]; /* Several fields from gfs1 now reserved */
>> ? };
>> ? /*
> 
> Otherwise the patches look good, and this should be a major step forward 
> for fsck in due course,

Thanks for the quick review!

Andy



  reply	other threads:[~2017-12-07 12:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-07 11:52 [Cluster-devel] [PATCH 0/3] gfs2: Add new resource group header fields Andrew Price
2017-12-07 11:52 ` [Cluster-devel] [PATCH 1/3] gfs2: Add a next-resource-group pointer to resource groups Andrew Price
2017-12-07 13:14   ` Bob Peterson
2017-12-07 14:00     ` Andrew Price
2017-12-07 11:52 ` [Cluster-devel] [PATCH 2/3] gfs2: Add rindex fields to rgrp headers Andrew Price
2017-12-07 13:18   ` Bob Peterson
2017-12-07 14:03     ` Andrew Price
2017-12-07 11:52 ` [Cluster-devel] [PATCH 3/3] gfs2: Add a crc field to resource group headers Andrew Price
2017-12-07 12:02   ` Steven Whitehouse
2017-12-07 12:32     ` Andrew Price [this message]
2017-12-07 14:26       ` Andrew Price

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1d9b4f6f-e711-d68d-43ce-dca697be8687@redhat.com \
    --to=anprice@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.