From: Loic Dachary <loic@dachary.org>
To: Yehuda Sadeh <yehuda@inktank.com>
Cc: Ceph Development <ceph-devel@vger.kernel.org>,
Samuel Just <sam.just@inktank.com>
Subject: Re: chain_fsetxattr extra chunk removal
Date: Mon, 11 Feb 2013 21:08:20 +0100 [thread overview]
Message-ID: <51194FB4.8010603@dachary.org> (raw)
In-Reply-To: <CAC-hyiFwyJ9mFKvhcOh0dzGMTM4bFXXphn3vzfJRNuZm90HGCA@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2021 bytes --]
On 02/11/2013 06:13 AM, Yehuda Sadeh wrote:
> On Thu, Feb 7, 2013 at 12:59 PM, Loic Dachary <loic@dachary.org> wrote:
>> Hi,
>>
>> While writing unit tests for chain_xattr.cc I tried to understand how to create the conditions to trigger this part of the chain_fsetxattr function:
>>
>> /* if we're exactly at a chunk size, remove the next one (if wasn't removed
>> before) */
>> if (ret >= 0 && chunk_size == CHAIN_XATTR_MAX_BLOCK_LEN) {
>> get_raw_xattr_name(name, i, raw_name, sizeof(raw_name));
>> int r = sys_fremovexattr(fd, raw_name);
>> if (r < 0 && r != -ENODATA)
>> ret = r;
>> }
>>
>> I suspect this cleans up extra empty attributes created as a side effect of a previous version of the function. Or I just don't understand the case it addresses.
>>
>> I'd very much appreciate a hint :-)
>>
>
> Well, the code has changed a bit, but originally when a chain was
> overwritten we didn't bother to remove the xattrs tail. When we read
> the chain we stop either when we got a short xattr, or when the next
> xattr in the chain didn't exist. So when writing an xattr that was
> perfectly aligned with the block len we had to remove the next xattr
> in order make sure that readers will not over-read. I'm not too sure
> whether that still the case, Sam might have a better idea.
> In any case, it might be a good idea to test the case where we have a
> big xattr that spans across multiple blocks (e.g., > 3) and being
> overwritten by a short xattr. Probably also need to test it with
> different combinations of aligned and non-aligned block sizes.
I understand now and I'll modify the pull request https://github.com/ceph/ceph/pull/40 accordingly.
Thanks :-)
>
> Thanks,
> Yehuda
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Loïc Dachary, Artisan Logiciel Libre
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
next prev parent reply other threads:[~2013-02-11 20:08 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 20:59 chain_fsetxattr extra chunk removal Loic Dachary
2013-02-11 5:13 ` Yehuda Sadeh
2013-02-11 20:08 ` Loic Dachary [this message]
2013-02-11 22:12 ` Loic Dachary
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=51194FB4.8010603@dachary.org \
--to=loic@dachary.org \
--cc=ceph-devel@vger.kernel.org \
--cc=sam.just@inktank.com \
--cc=yehuda@inktank.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.