On 2012-10-23 09:57, Michael Kjörling wrote:
> On 22 Oct 2012 18:18 +0100, from h...@carfax.org.uk (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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to