From: Ben Myers <bpm@sgi.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 11/12] xfs: rework remote attr CRCs
Date: Mon, 5 Aug 2013 17:25:32 -0500 [thread overview]
Message-ID: <20130805222532.GH3111@sgi.com> (raw)
In-Reply-To: <1370607901-11538-12-git-send-email-david@fromorbit.com>
On Fri, Jun 07, 2013 at 10:25:00PM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> Note: this changes the on-disk remote attribute format. I assert
> that this is OK to do as CRCs are marked experimental and the first
> kernel it is included in has not yet reached release yet. Further,
> the userspace utilities are still evolving and so anyone using this
> stuff right now is a developer or tester using volatile filesystems
> for testing this feature. Hence changing the format right now to
> save longer term pain is the right thing to do.
>
> The fundamental change is to move from a header per extent in the
> attribute to a header per filesytem block in the attribute. This
> means there are more header blocks and the parsing of the attribute
> data is slightly more complex, but it has the advantage that we
> always know the size of the attribute on disk based on the length of
> the data it contains.
>
> This is where the header-per-extent method has problems. We don't
> know the size of the attribute on disk without first knowing how
> many extents are used to hold it. And we can't tell from a
> mapping lookup, either, because remote attributes can be allocated
> contiguously with other attribute blocks and so there is no obvious
> way of determining the actual size of the atribute on disk short of
> walking and mapping buffers.
>
> The problem with this approach is that if we map a buffer
> incorrectly (e.g. we make the last buffer for the attribute data too
> long), we then get buffer cache lookup failure when we map it
> correctly. i.e. we get a size mismatch on lookup. This is not
> necessarily fatal, but it's a cache coherency problem that can lead
> to returning the wrong data to userspace or writing the wrong data
> to disk. And debug kernels will assert fail if this occurs.
>
> I found lots of niggly little problems trying to fix this issue on a
> 4k block size filesystem, finally getting it to pass with lots of
> fixes. The thing is, 1024 byte filesystems still failed, and it was
> getting really complex handling all the corner cases that were
> showing up. And there were clearly more that I hadn't found yet.
>
> It is complex, fragile code, and if we don't fix it now, it will be
> complex, fragile code forever more.
>
> Hence the simple fix is to add a header to each filesystem block.
> This gives us the same relationship between the attribute data
> length and the number of blocks on disk as we have without CRCs -
> it's a linear mapping and doesn't require us to guess anything. It
> is simple to implement, too - the remote block count calculated at
> lookup time can be used by the remote attribute set/get/remove code
> without modification for both CRC and non-CRC filesystems. The world
> becomes sane again.
>
> Because the copy-in and copy-out now need to iterate over each
> filesystem block, I moved them into helper functions so we separate
> the block mapping and buffer manupulations from the attribute data
> and CRC header manipulations. The code becomes much clearer as a
> result, and it is a lot easier to understand and debug. It also
> appears to be much more robust - once it worked on 4k block size
> filesystems, it has worked without failure on 1k block size
> filesystems, too.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
Goes with commit ad1858d77771172e08016890f0eb2faedec3ecee
Reviewed-by: Ben Myers <bpm@sgi.com>
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2013-08-05 22:25 UTC|newest]
Thread overview: 165+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-07 0:25 [PATCH 00/48] xfsprogs: CRC support Dave Chinner
2013-06-07 0:25 ` [PATCH 01/48] mkfs: fix realtime device initialisation Dave Chinner
2013-06-07 0:25 ` [PATCH 02/48] logprint: fix wrapped log dump issue Dave Chinner
2013-07-22 21:44 ` Ben Myers
2013-06-07 0:25 ` [PATCH 03/48] libxfs: add crc format changes to generic btrees Dave Chinner
2013-07-23 18:26 ` Ben Myers
2013-07-25 0:48 ` Dave Chinner
2013-07-25 17:15 ` Ben Myers
2013-07-26 0:39 ` Dave Chinner
2013-07-26 15:22 ` Ben Myers
2013-08-06 15:23 ` [PATCH 03a/48] xfs: don't verify bmbt reads twice Ben Myers
2013-06-07 0:25 ` [PATCH 04/48] xfsprogs: add crc format chagnes to ag headers Dave Chinner
2013-07-23 18:52 ` Ben Myers
2013-08-06 15:42 ` Ben Myers
2013-06-07 0:25 ` [PATCH 05/48] xfsprogs: Support new AGFL format Dave Chinner
2013-07-23 19:10 ` Ben Myers
2013-06-07 0:25 ` [PATCH 06/48] libxfs: change quota buffer formats Dave Chinner
2013-07-23 19:17 ` Ben Myers
2013-06-07 0:25 ` [PATCH 07/48] libxfs: add version 3 inode support Dave Chinner
2013-07-23 22:30 ` Ben Myers
2013-07-25 0:52 ` Dave Chinner
2013-08-06 16:23 ` Ben Myers
2013-06-07 0:25 ` [PATCH 08/48] libxfs: add support for crc headers on remote symlinks Dave Chinner
2013-07-24 20:07 ` Ben Myers
2013-06-07 0:25 ` [PATCH 09/48] xfs: add CRC checks to block format directory blocks Dave Chinner
2013-07-24 20:53 ` Ben Myers
2013-07-25 0:57 ` Dave Chinner
2013-06-07 0:25 ` [PATCH 10/48] xfs: add CRC checking to dir2 free blocks Dave Chinner
2013-07-24 21:29 ` Ben Myers
2013-06-07 0:25 ` [PATCH 11/48] xfs: add CRC checking to dir2 data blocks Dave Chinner
2013-07-24 22:23 ` Ben Myers
2013-06-07 0:25 ` [PATCH 12/48] xfs: add CRC checking to dir2 leaf blocks Dave Chinner
2013-07-24 23:00 ` Ben Myers
2013-07-25 16:33 ` Ben Myers
2013-06-07 0:25 ` [PATCH 13/48] xfs: shortform directory offsets change for dir3 format Dave Chinner
2013-07-25 17:28 ` Ben Myers
2013-06-07 0:25 ` [PATCH 14/48] xfs: add CRCs to dir2/da node blocks Dave Chinner
2013-07-25 18:58 ` Ben Myers
2013-06-07 0:25 ` [PATCH 15/48] xfs: add CRCs to attr leaf blocks Dave Chinner
2013-07-25 19:53 ` Ben Myers
2013-06-07 0:25 ` [PATCH 16/48] xfs: split remote attribute code out Dave Chinner
2013-07-25 20:27 ` Ben Myers
2013-06-07 0:25 ` [PATCH 17/48] xfs: add CRC protection to remote attributes Dave Chinner
2013-07-25 20:34 ` Ben Myers
2013-06-07 0:25 ` [PATCH 18/48] xfs: add buffer types to directory and attribute buffers Dave Chinner
2013-07-25 20:54 ` Ben Myers
2013-06-07 0:25 ` [PATCH 19/48] xfs: buffer type overruns blf_flags field Dave Chinner
2013-07-25 21:08 ` Ben Myers
2013-06-07 0:25 ` [PATCH 20/48] xfs: add CRC checks to the superblock Dave Chinner
2013-07-25 21:48 ` Ben Myers
2013-06-07 0:25 ` [PATCH 21/48] xfs: implement extended feature masks Dave Chinner
2013-07-25 22:08 ` Ben Myers
2013-07-26 0:19 ` Dave Chinner
2013-06-07 0:25 ` [PATCH 22/48] xfsprogs: Add verifiers to libxfs buffer interfaces Dave Chinner
2013-07-26 21:58 ` Ben Myers
2013-07-30 23:59 ` Dave Chinner
2013-06-07 0:25 ` [PATCH 23/48] xfsprogs: introduce CRC support into mkfs.xfs Dave Chinner
2013-07-30 21:08 ` Ben Myers
2013-06-07 0:25 ` [PATCH 24/48] xfsprogs: add crc format support to repair Dave Chinner
2013-08-01 16:21 ` Ben Myers
2013-06-07 0:25 ` [PATCH 25/48] xfs_repair: update for dir/attr crc format changes Dave Chinner
2013-08-01 18:44 ` Ben Myers
2013-06-07 0:25 ` [PATCH 26/48] xfsprogs: disable xfs_check for CRC enabled filesystems Dave Chinner
2013-08-01 19:01 ` Ben Myers
2013-06-07 0:25 ` [PATCH 27/48] xfs_db: disable modification for CRC enabled filessytems Dave Chinner
2013-08-01 19:11 ` Ben Myers
2013-06-07 0:25 ` [PATCH 28/48] libxfs: determine inode size from version number, not struct xfs_dinode Dave Chinner
2013-08-01 21:32 ` Ben Myers
2013-06-07 0:25 ` [PATCH 29/48] xfsdb: support version 5 superblock in versionnum command Dave Chinner
2013-08-01 21:44 ` Ben Myers
2013-06-07 0:25 ` [PATCH 30/48] xfsprogs: add crc format support to db Dave Chinner
2013-08-01 22:42 ` Ben Myers
2013-06-07 0:25 ` [PATCH 31/48] xfs_repair: always use incore header for directory block checks Dave Chinner
2013-08-01 22:46 ` Ben Myers
2013-06-07 0:25 ` [PATCH 32/48] xfs_db: convert directory parsing to use libxfs structure Dave Chinner
2013-08-05 14:52 ` Ben Myers
2013-06-07 0:25 ` [PATCH 33/48] xfs_db: factor some common dir2 field parsing code Dave Chinner
2013-08-05 15:17 ` Ben Myers
2013-06-07 0:25 ` [PATCH 34/48] xfs_db: update field printing for dir crc format changes Dave Chinner
2013-08-05 18:17 ` Ben Myers
2013-06-07 0:25 ` [PATCH 35/48] xfs_repair: convert directory parsing to use libxfs structure Dave Chinner
2013-08-05 18:32 ` Ben Myers
2013-06-07 0:25 ` [PATCH 36/48] xfs_repair: make directory freespace table CRC format aware Dave Chinner
2013-08-05 18:39 ` Ben Myers
2013-06-07 0:26 ` [PATCH 37/48] xfs_db: add CRC information to dquot output Dave Chinner
2013-08-05 18:42 ` Ben Myers
2013-06-07 0:26 ` [PATCH 38/48] xfs_db: add CRC support for attribute fork structures Dave Chinner
2013-08-05 20:02 ` Ben Myers
2013-06-07 0:26 ` [PATCH 39/48] mkfs.xfs: validate options for CRCs up front Dave Chinner
2013-06-20 21:17 ` Geoffrey Wehrman
2013-06-20 23:05 ` Dave Chinner
2013-06-21 13:44 ` Geoffrey Wehrman
2013-08-05 20:33 ` Ben Myers
2013-06-07 0:26 ` [PATCH 40/48] xfsprogs: support CRC enabled filesystem detection Dave Chinner
2013-08-05 20:43 ` Ben Myers
2013-06-07 0:26 ` [PATCH 41/48] xfs_mdrestore: recalculate sb CRC before writing Dave Chinner
2013-08-05 20:48 ` Ben Myers
2013-06-07 0:26 ` [PATCH 42/48] xfs_metadump: requires some object CRC recalculation Dave Chinner
2013-08-05 20:57 ` Ben Myers
2013-06-07 0:26 ` [PATCH 43/48] xfs_repair: drop buffer reference on symlink error Dave Chinner
2013-08-05 21:00 ` Ben Myers
2013-06-07 0:26 ` [PATCH 44/48] xfs_db: add support for CRC format remote symlinks Dave Chinner
2013-08-05 21:11 ` Ben Myers
2013-06-07 0:26 ` [PATCH 45/48] xfs_repair: fix btree block magic number mapping Dave Chinner
2013-08-05 21:16 ` Ben Myers
2013-06-07 0:26 ` [PATCH 46/48] libxfs: fix dir3 freespace block corruption Dave Chinner
2013-08-05 21:22 ` Ben Myers
2013-06-07 0:26 ` [PATCH 47/48] xfs_repair: support CRC enabled remote symlinks Dave Chinner
2013-08-05 21:40 ` Ben Myers
2013-06-07 0:26 ` [PATCH 48/48] xfsprogs: Document XFs specific mount options in xfs(5) Dave Chinner
2013-06-07 1:41 ` Dave Chinner
2013-06-07 6:11 ` [PATCH 00/48] xfsprogs: CRC support Dave Chinner
2013-06-07 21:04 ` Ben Myers
2013-06-10 22:16 ` Chandra Seetharaman
2013-06-10 23:56 ` Dave Chinner
2013-06-11 18:38 ` Ben Myers
2013-06-07 12:24 ` [PATCH 00/12] xfsprogs: add recent kernel CRC fixes Dave Chinner
2013-06-07 12:24 ` [PATCH 01/12] xfs: fix da node magic number mismatches Dave Chinner
2013-08-05 21:43 ` Ben Myers
2013-06-07 12:24 ` [PATCH 02/12] xfs: Remote attr validation fixes and optimisations Dave Chinner
2013-08-05 21:47 ` Ben Myers
2013-06-07 12:24 ` [PATCH 03/12] xfs: xfs_attr_shortform_allfit() does not handle attr3 format Dave Chinner
2013-08-05 21:49 ` Ben Myers
2013-06-07 12:24 ` [PATCH 04/12] xfs: remote attribute lookups require the value length Dave Chinner
2013-08-05 21:52 ` Ben Myers
2013-06-07 12:24 ` [PATCH 05/12] xfs: remote attribute allocation may be contiguous Dave Chinner
2013-08-05 21:54 ` Ben Myers
2013-06-07 12:24 ` [PATCH 06/12] xfs: remote attribute read too short Dave Chinner
2013-08-05 21:57 ` Ben Myers
2013-06-07 12:24 ` [PATCH 07/12] xfs: remote attribute tail zeroing does too much Dave Chinner
2013-08-05 21:59 ` Ben Myers
2013-06-07 12:24 ` [PATCH 08/12] xfs: correctly map remote attr buffers during removal Dave Chinner
2013-08-05 22:07 ` Ben Myers
2013-06-07 12:24 ` [PATCH 09/12] xfs: fully initialise temp leaf in xfs_attr3_leaf_unbalance Dave Chinner
2013-08-05 22:12 ` Ben Myers
2013-06-07 12:24 ` [PATCH 10/12] xfs: fully initialise temp leaf in xfs_attr3_leaf_compact Dave Chinner
2013-08-05 22:16 ` Ben Myers
2013-06-07 12:25 ` [PATCH 11/12] xfs: rework remote attr CRCs Dave Chinner
2013-08-05 22:25 ` Ben Myers [this message]
2013-06-07 12:25 ` [PATCH 12/12] xfs: don't emit v5 superblock warnings on write Dave Chinner
2013-08-05 22:28 ` Ben Myers
2013-08-06 21:41 ` [PATCH 00/48] xfsprogs: CRC support Ben Myers
2013-08-08 21:06 ` [PATCH 0/14] xfsprogs: various issues from review Ben Myers
2013-08-08 21:07 ` [PATCH 1/14] libxfs: don't verify bmbt reads twice Ben Myers
2013-08-08 21:08 ` [PATCH 2/14] xfsprogs: XFS_AGF_NUM_BITS should be 13 Ben Myers
2013-08-08 21:13 ` [PATCH 3/14] xfsprogs: pull in the rest of 93848a999cf Ben Myers
2013-08-11 23:26 ` ***** SUSPECTED SPAM ***** " Dave Chinner
2013-08-08 21:16 ` [PATCH 04/14] xfsprogs: fix gpl headers in xfs_symlink Ben Myers
2013-08-08 21:20 ` [PATCH 5/14] xfsprogs: sync commit f5f3d9b016 completely Ben Myers
2013-08-08 22:05 ` Eric Sandeen
2013-08-11 23:23 ` ***** SUSPECTED SPAM ***** " Dave Chinner
2013-08-08 21:24 ` [PATCH 6/14] xfsprogs: cleanup some whitespace Ben Myers
2013-08-11 23:24 ` ***** SUSPECTED SPAM ***** " Dave Chinner
2013-08-08 21:33 ` [PATCH 7/14] xfsprogs: fix issues with commit 75c8b4343abb Ben Myers
2013-08-11 23:31 ` ***** SUSPECTED SPAM ***** " Dave Chinner
2013-08-08 21:53 ` [PATCH 8/14] xfsprogs: fix issues with e0607266f23 Ben Myers
2013-08-08 22:07 ` Eric Sandeen
2013-08-08 22:14 ` Eric Sandeen
2013-08-08 22:28 ` [v2 PATCH " Ben Myers
2013-08-08 23:26 ` Eric Sandeen
2013-08-08 23:34 ` Eric Sandeen
2013-08-09 14:00 ` Ben Myers
2013-08-08 22:00 ` [PATCH 9] xfsprogs: issues with a24374f41c9 Ben Myers
2013-08-08 22:02 ` [PATCH 0/14] xfsprogs: various issues from review Ben Myers
2013-08-11 23:33 ` ***** SUSPECTED SPAM ***** " Dave Chinner
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=20130805222532.GH3111@sgi.com \
--to=bpm@sgi.com \
--cc=david@fromorbit.com \
--cc=xfs@oss.sgi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox