On 4/22/13 4:31 AM, Anand Jain wrote:
> 
>>       /*
>> -    * If the btrfs-progs is newer and kernel is at
>> -    * generation_v1 then we don't touch v2 items
>> -    * otherwise when kernel is at same or greater
>> -    * version compared with btrfs-progs then update
>> -    * the needed
>> -    */
>> -    old_size = btrfs_item_size_nr(l, slot);
>> -    if (old_size >= sizeof(*item)) {
>> -        btrfs_set_root_generation_v2(item,
>> -            btrfs_root_generation(item));
>> +     * If this is the first time we update the root item which originated
>> +     * from an older kernel, we need to enlarge the item size to make room
>> +     * for the added fields.
>> +     */
>> +    if (old_len < sizeof(*item)) {
> 
>  With this fix. when kernel is using v1 and btrfs-progs is
>  using v2, the disk structure will be changed to v2 after
>  running btrfs check. I would rather take a conservative
>  approach, by maintaining kernel intended version.

If the kernel can do it, it should be safe for userspace to do it
as well.  An old kernel will have a smaller btrfs_root_item size,
and won't even see the new fields when it reads the roots, I think.

And this has the advantage of not further diverging userspace
from kernelspace which, as we've seen, leads to bugs.  :)

Thanks,
-Eric

>  Thanks, Anand

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to