Re: chain_fsetxattr extra chunk removal

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Feb 7, 2013 at 12:59 PM, Loic Dachary <loic@xxxxxxxxxxx> 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.

Thanks,
Yehuda
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux