All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anand Jain <Anand.Jain@oracle.com>
To: dsterba@suse.cz, Eric Sandeen <sandeen@redhat.com>,
	linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 3/3] btrfs-progs: use BTRFS_SCAN_BACKUP_SB flag in btrfs_scan_one_device
Date: Thu, 14 Mar 2013 16:51:22 +0800	[thread overview]
Message-ID: <51418F8A.8090503@oracle.com> (raw)
In-Reply-To: <51406728.5030705@oracle.com>




just for the record, this patch also fixes the following 2 issues..

  sdc contains primary-SB of ext4 and backup SB of btrfs

# blkid /dev/sdc
/dev/sdc: UUID="4450e281-db04-4736-a03e-1ce6deda74f3" TYPE="ext4"
#

# btrfs-show-super -i 1 /dev/sdc
superblock: bytenr=67108864, device=/dev/sdc
::

----
# ~/before/btrfs dev scan
Scanning for Btrfs filesystems
ERROR: device scan failed '/dev/sdc' - Invalid argument

# btrfs dev scan
Scanning for Btrfs filesystems
----

-----
# ~/before/btrfs fi show
::

Label: none  uuid: aa8b3f0c-3ade-490a-a35d-dd62dbd9cc07
	Total devices 2 FS bytes used 796.00KB
	devid    2 size 59.99GB used 2.01GB path /dev/sdc
	*** Some devices missing
::
Btrfs v0.20-rc1-235-gdd21bc1
#


# btrfs fi show
Label: none  uuid: 0d690e00-a34f-4c6b-9660-c6b1b6684ecc
	Total devices 1 FS bytes used 28.00KB
	devid    1 size 59.99GB used 2.04GB path /dev/sdb

Label: none  uuid: fa08122d-832f-4f32-87ee-58eb9380d5da
	Total devices 2 FS bytes used 796.00KB
	devid    2 size 48.23GB used 2.01GB path /dev/sde
	devid    1 size 44.99GB used 2.03GB path /dev/sdd

Btrfs v0.20-rc1-238-g5d571b4-dirty
-----

Thanks, Anand


On 03/13/2013 07:46 PM, Anand Jain wrote:
>
>
> Thanks Eric and David.
>
>   I have sent out V3 patch-set which will disable access
>   to backup super-block unless requested by the user.
>
>   here below are some test cases and results before and
>   after this fix.. which finds the patch works awesome.
>
>
> --------
> the original problem which all this started..
>
> mkfs.btrfs /dev/sdb -f && yes| mkfs.ext4 /dev/sdb && mount /dev/sdb /ext4
> ~/before/mkfs.btrfs -f /dev/sdc /dev/sdd (run twice)
> ~/before/mkfs.btrfs -f /dev/sdc /dev/sdd
> ::
> ERROR: unable to scan the device '/dev/sdb' - Device or resource busy
> ERROR: unable to scan the device '/dev/sdb' - Device or resource busy
> adding device /dev/sdd id 2
> fs created label (null) on /dev/sdc
>          nodesize 4096 leafsize 4096 sectorsize 4096 size 3.11GB
>
>
> after the fix.
>
> # mkfs.btrfs -f /dev/sdc /dev/sdd
>
> WARNING! - Btrfs v0.20-rc1-238-g170881a-dirty IS EXPERIMENTAL
> WARNING! - see http://btrfs.wiki.kernel.org before using
>
> adding device /dev/sdd id 2
> fs created label (null) on /dev/sdc
>      nodesize 4096 leafsize 4096 sectorsize 4096 size 104.98GB
> Btrfs v0.20-rc1-238-g170881a-dirty
> -------------
>
> # umount /ext4
>
> # mkfs.btrfs /dev/sdb /dev/sdc -f && wipefs /dev/sdb
>
> There is an existing bug..
>
> # ~/before/btrfs check /dev/sdc --repair
> enabling repair mode
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
> Checking filesystem on /dev/sdc
> UUID: e03c477d-b696-46c1-bf79-43b8b8454f11
> checking extents
> checking fs roots
> checking root refs
> btrfs: extent-tree.c:2553: btrfs_reserve_extent: Assertion `!(ret)' failed.
> Aborted (core dumped)
> #
>
> and its still there even after this patch :-)
>
> # btrfs check /dev/sdc --repair
> enabling repair mode
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
> Checking filesystem on /dev/sdc
> UUID: e03c477d-b696-46c1-bf79-43b8b8454f11
> checking extents
> checking fs roots
> checking root refs
> btrfs: extent-tree.c:2553: btrfs_reserve_extent: Assertion `!(ret)' failed.
> Aborted (core dumped)
>
> -------------------------
>
>
> # mkfs.btrfs /dev/sdb /dev/sdc -f && yes|mkfs.ext4 /dev/sdb
>
> without the fix
> # ~/before/btrfs restore -o /dev/sdb ~/tmp
> ERROR: device scan failed '/dev/sdb' - Invalid argument
> ERROR: device scan failed '/dev/sdb' - Invalid argument
> Root objectid is 5
>
> with the fix
>
> # btrfs restore -o /dev/sdb ~/tmp
> No valid Btrfs found on /dev/sdb
> Could not open root, trying backup super
> Root objectid is 5
>
> now I say to use sb backup 1..
>
> # btrfs restore -u 1 -o /dev/sdb ~/tmp
> Root objectid is 5
> # echo $?
> 0
>
> --------------
>
> # mkfs.btrfs /dev/sdb /dev/sdc -f && yes|mkfs.ext4 /dev/sdb
>
> # ~/before/btrfs check /dev/sdc --repair
> enabling repair mode
> ERROR: device scan failed '/dev/sdb' - Invalid argument
> ERROR: device scan failed '/dev/sdb' - Invalid argument
> Checking filesystem on /dev/sdc
> UUID: 5dc5c663-eeea-4ec2-b8fe-170157f5d68d
> checking extents
> checking fs roots
> checking root refs
> found 28672 bytes used err is 0
> total csum bytes: 0
> total tree bytes: 28672
> total fs tree bytes: 8192
> btree space waste bytes: 22420
> file data blocks allocated: 0
>   referenced 0
> Btrfs v0.20-rc1-235-gdd21bc1
>
> # mkfs.btrfs /dev/sdb /dev/sdc -f && yes|mkfs.ext4 /dev/sdb
>
> since now new code doesn't read backup SB of devid1
> it hits the earlier known bug.
>
> # btrfs check /dev/sdc --repair
> enabling repair mode
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
> Checking filesystem on /dev/sdc
> UUID: daa0dc6d-35b6-43ab-8333-894710a5b917
> checking extents
> checking fs roots
> checking root refs
> btrfs: extent-tree.c:2553: btrfs_reserve_extent: Assertion `!(ret)' failed.
> Aborted (core dumped)
>
> So user would need to fix the devid1 first.
>
> # btrfs check /dev/sdb --repair
> enabling repair mode
> No valid Btrfs found on /dev/sdb
>
> # btrfs check -s 1 /dev/sdb --repair
> using SB copy 1, bytenr 67108864
> enabling repair mode
> Checking filesystem on /dev/sdb
> UUID: daa0dc6d-35b6-43ab-8333-894710a5b917
> checking extents
> checking fs roots
> checking root refs
> found 28672 bytes used err is 0
> total csum bytes: 0
> total tree bytes: 28672
> total fs tree bytes: 8192
> btree space waste bytes: 22420
> file data blocks allocated: 0
>   referenced 0
> Btrfs v0.20-rc1-238-g170881a-dirty
>
> # btrfs check /dev/sdc --repair
> enabling repair mode
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
> Checking filesystem on /dev/sdc
> UUID: daa0dc6d-35b6-43ab-8333-894710a5b917
> checking extents
> checking fs roots
> checking root refs
> btrfs: extent-tree.c:2553: btrfs_reserve_extent: Assertion `!(ret)' failed.
> Aborted (core dumped)
>
> Need to write back the backup SB to primary SB.
> IMO when -s 1 was given it had the chance to fix
> primary.. this can be fixed later.
>
> # ./btrfs-select-super -s 1 /dev/sdb
> using SB copy 1, bytenr 67108864
> ERROR: device scan failed '/dev/sdb' - Invalid argument
>
> # btrfs check /dev/sdc --repair
> enabling repair mode
> Checking filesystem on /dev/sdc
> UUID: daa0dc6d-35b6-43ab-8333-894710a5b917
> checking extents
> checking fs roots
> checking root refs
> found 28672 bytes used err is 0
> total csum bytes: 0
> total tree bytes: 28672
> total fs tree bytes: 8192
> btree space waste bytes: 22420
> file data blocks allocated: 0
>   referenced 0
> Btrfs v0.20-rc1-238-g170881a-dirty
> ---------------------------------------------------------------
>
>
> I am not sure if I have a wipe -a working for btrfs,
> so I would clean using dd.
>
> # dd if=/dev/zero bs=1 count=8 of=/dev/sdb seek=$((64*1024+64))
> 8+0 records in
> 8+0 records out
> 8 bytes (8 B) copied, 0.000324503 s, 24.7 kB/s
>
> # dd if=/dev/zero bs=1 count=8 of=/dev/sdb seek=$((64*1024*1024+64))
> 8+0 records in
> 8+0 records out
> 8 bytes (8 B) copied, 0.000364635 s, 21.9 kB/s
>
> # dd if=/dev/zero bs=1 count=8 of=/dev/sdb seek=$((256*1024*1024*1024+64))
> dd: `/dev/sdb': cannot seek: Invalid argument
> 0+0 records in
> 0+0 records out
> 0 bytes (0 B) copied, 0.000430846 s, 0.0 kB/s
>
> This behavior is same before and after the patch.
>
> # btrfs check /dev/sdb
> No valid Btrfs found on /dev/sdb
> # btrfs check /dev/sdb -s 1
> using SB copy 1, bytenr 67108864
> No valid Btrfs found on /dev/sdb
> # btrfs check /dev/sdb -s 2
> using SB copy 2, bytenr 274877906944
> No valid Btrfs found on /dev/sdb
> #
> ------------------------
>
>   # mkfs.btrfs /dev/sdb /dev/sdc -f && mount /dev/sdc /btrfs
>
>   # dd if=/dev/zero bs=1 count=8 of=/dev/sdb seek=$((64*1024+64))
>   # dd if=/dev/zero bs=1 count=8 of=/dev/sdb seek=$((64*1024*1024+64))
>   # dd if=/dev/zero bs=1 count=8 of=/dev/sdb
> seek=$((256*1024*1024*1024+64))
>
> # mkfs.btrfs /dev/sdb
>
> WARNING! - Btrfs v0.20-rc1-238-g170881a-dirty IS EXPERIMENTAL
> WARNING! - see http://btrfs.wiki.kernel.org before using
>
> /dev/sdb is mounted
>
>
> # umount /btrfs
>
> # mkfs.btrfs /dev/sdb
>
> WARNING! - Btrfs v0.20-rc1-238-g170881a-dirty IS EXPERIMENTAL
> WARNING! - see http://btrfs.wiki.kernel.org before using
>
> /dev/sdb appears to contain an existing filesystem (btrfs).
> Use the -f option to force overwrite.
> #
>
> -------------------------
>
>
> # mkfs.btrfs /dev/sdd /dev/sde -f
>
> WARNING! - Btrfs v0.20-rc1-238-g170881a-dirty IS EXPERIMENTAL
> WARNING! - see http://btrfs.wiki.kernel.org before using
>
> adding device /dev/sde id 2
> fs created label (null) on /dev/sdd
>      nodesize 4096 leafsize 4096 sectorsize 4096 size 93.22GB
> Btrfs v0.20-rc1-238-g170881a-dirty
> # mount /dev/sde /btrfs
> # umount /btrfs
> # dd if=/dev/zero bs=1 count=8 of=/dev/sde seek=$((64*1024+64))
> 8+0 records in
> 8+0 records out
> 8 bytes (8 B) copied, 0.0149415 s, 0.5 kB/s
>
> remove /dev/sdd
>
> # x="0 0 3 0"
> # echo "scsi remove-single-device $x" > /proc/scsi/scsi
> # lsscsi
> [0:0:0:0]    disk    Sun      boot1            V1.0  /dev/sda
> [0:0:2:0]    disk    Sun      boot3            V1.0  /dev/sdc
> [0:0:4:0]    disk    Sun      boot5            V1.0  /dev/sde
> [0:1:0:0]    disk    SEAGATE  ST914602SSUN146G 0603  -
> [0:1:1:0]    disk    SEAGATE  ST914602SSUN146G 0603  -
> [0:3:0:0]    enclosu ADAPTEC  Virtual SGPIO  0 0001  -
>
>
> # btrfs check /dev/sde
> No valid Btrfs found on /dev/sde
>
> # btrfs check /dev/sde -s 1
> using SB copy 1, bytenr 67108864
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
> Checking filesystem on /dev/sde
> UUID: fa08122d-832f-4f32-87ee-58eb9380d5da
> checking extents
> checking fs roots
> checking root refs
> found 815104 bytes used err is 0
> total csum bytes: 0
> total tree bytes: 28672
> total fs tree bytes: 8192
> btree space waste bytes: 21476
> file data blocks allocated: 786432
>   referenced 786432
> Btrfs v0.20-rc1-238-g170881a-dirty
>
> # ./btrfs-select-super -s 1 /dev/sde
> using SB copy 1, bytenr 67108864
> ERROR: device scan failed '/dev/sdc' - Invalid argument
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
>
> # btrfs check /dev/sde
> warning, device 1 is missing
> warning, device 1 is missing
> warning devid 1 not found already
> Checking filesystem on /dev/sde
> UUID: fa08122d-832f-4f32-87ee-58eb9380d5da
> checking extents
> checking fs roots
> checking root refs
> found 815104 bytes used err is 0
> total csum bytes: 0
> total tree bytes: 28672
> total fs tree bytes: 8192
> btree space waste bytes: 21476
> file data blocks allocated: 786432
>   referenced 786432
> Btrfs v0.20-rc1-238-g170881a-dirty
> #
> ---------------
>
>
> Thanks, Anand
>
>
> On 03/12/2013 02:16 AM, David Sterba wrote:
>> On Mon, Mar 11, 2013 at 10:03:46AM -0500, Eric Sandeen wrote:
>>> IMHO, nothing should be checking the backup superblocks unless
>>> explicitly
>>> told to.
>>
>> That's the whole point I believe.
>>
>> update the infrastructure, every SB access looks to the first copy
>> unless told by command line options.
>>
>>
>> david
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2013-03-14  8:51 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-08 15:24 [PATCH 0/3 v2] flags to access backup SB Anand Jain
2013-03-08 15:24 ` [PATCH 1/3] btrfs-progs: Introduce flag BTRFS_SCAN_REGISTER to replace run_ioctl Anand Jain
2013-03-08 15:24 ` [PATCH 2/3] btrfs-progs: Introduce flag BTRFS_SCAN_BACKUP_SB for btrfs_read_dev_super Anand Jain
2013-03-08 15:25 ` [PATCH 3/3] btrfs-progs: use BTRFS_SCAN_BACKUP_SB flag in btrfs_scan_one_device Anand Jain
2013-03-11 15:03   ` Eric Sandeen
2013-03-11 18:16     ` David Sterba
2013-03-13 11:46       ` Anand Jain
2013-03-14  8:51         ` Anand Jain [this message]
2013-03-13 11:44 ` [PATCH 0/3 v3] flags to access backup SB Anand Jain
2013-03-13 11:44   ` [PATCH 1/3 v3] btrfs-progs: Introduce flag BTRFS_SCAN_REGISTER to replace run_ioctl Anand Jain
2013-03-13 11:44   ` [PATCH 2/3 v3] btrfs-progs: Introduce flag BTRFS_SCAN_BACKUP_SB for btrfs_read_dev_super Anand Jain
2013-03-13 11:44   ` [PATCH 3/3 v3] btrfs-progs: disable using backup superblock by default Anand Jain
2013-03-14  3:05 ` [PATCH 0/3 v4] flags to access backup SB Anand Jain
2013-03-14  3:05   ` [PATCH 1/3 v4] btrfs-progs: Introduce flag BTRFS_SCAN_REGISTER to replace run_ioctl Anand Jain
2013-03-14  3:05   ` [PATCH 2/3 v4] btrfs-progs: Introduce flag BTRFS_SCAN_BACKUP_SB for btrfs_read_dev_super Anand Jain
2013-03-14  3:05   ` [PATCH 3/3 v4] btrfs-progs: disable using backup superblock by default Anand Jain
2013-03-14  4:36     ` Eric Sandeen
2013-03-14  8:56       ` Anand Jain
2013-03-14 14:47         ` Eric Sandeen
2013-03-14 14:49           ` Eric Sandeen
2013-03-15 12:03             ` Anand Jain
2013-03-15 16:34               ` Eric Sandeen
2013-03-18  3:39                 ` Anand Jain

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=51418F8A.8090503@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=dsterba@suse.cz \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=sandeen@redhat.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.