On 2012-10-23 09:57, Michael Kjörling wrote:
> On 22 Oct 2012 18:18 +0100, from hugo@xxxxxxxxxxxxx (Hugo Mills):
>>> [root@f18v ~]# btrfs device delete /dev/sdb /mnt [root@f18v ~]#
>>> btrfs fi show failed to read /dev/sr0 Label: none uuid:
>>> 6e96a96e-3357-4f23-b064-0f0713366d45 Total devices 5 FS bytes
>>> used 7.52GB devid 5 size 12.00GB used 4.17GB path /dev/sdf
>>> devid 4 size 12.00GB used 4.62GB path /dev/sde devid 3
>>> size 3.00GB used 2.68GB path /dev/sdd devid 2 size 3.00GB
>>> used 2.68GB path /dev/sdc *** Some devices missing
>>>
>>> However, I think that last line is a bug. When I
>>>
>>> [root@f18v ~]# btrfs device delete missing /mnt
>>>
>>> I get
>>>
>>> [ 2152.257163] btrfs: no missing devices found to remove
>>>
>>> So they're missing but not missing?
>>
>> If you run sync, or wait for 30 seconds, you'll find that fi
>> show shows the correct information again -- btrfs fi show reads
>> the superblocks directly, and if you run it immediately after the
>> dev del, they've not been flushed back to disk yet.
>
> That sounds like it has the potential to bite a lot of people in
> the rear. Yes, 30 seconds or a sync is trivial, but only if you
> know about it.
IIRC Chris [Mason] told that when a disk is removed, the super-block
(signature) is zeroed and a sync is issued. Looking at the code,
confirm it:
form fs/btrfs/volume.c:
int btrfs_rm_device(struct btrfs_root *root, char *device_path)
{
[...]
/*
* at this point, the device is zero sized. We want to
* remove it from the devices list and zero out the old super
*/
if (clear_super) {
/* make sure this device isn't detected as part of
* the FS anymore
*/
memset(&disk_super->magic, 0, sizeof(disk_super->magic));
set_buffer_dirty(bh);
sync_dirty_buffer(bh);
}
[...]
I think that what Chris [Murphy] was reported is a bug of the btrfs
user space program (which is corrected in the latest git).
Unfortunately we don't know which version Chris is using so we cannot
reach a conclusion (if the bug was corrected, or it is a new bug).
BR
G.Baroncelli
>
> Considering that a device delete is a pretty rare but potentially
> important operation, would it not be better for a sync to be done
> automatically after a "device delete" command? And potentially
> others in a similar vein. With an option --no-sync or similar to
> disable the behavior (in the relatively unlikely situation that
> multiple devices are unavailable and need to be deleted, for
> example).
>
> I can definitely see the described behavior qualifying as a "WTF?"
> moment.
>
--
gpg @keyserver.linux.it: Goffredo Baroncelli (kreijackATinwind.it>
Key fingerprint BBF5 1610 0B64 DAC6 5F7D 17B2 0EDA 9B37 8B82 E0B5
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html