Just encountered an interesting issue.

   Rapid summary: when a resize encounters a file with broken
checksums, it stops, and will not (apparently) proceed any further.
Un/remount seems to clear the error condition.

   I've got a filesystem with some (lots of) checksum errors on it.
It lives on a single partition. In trying to move all the data off
this, onto a btrfs raid10 filesystem, I've been moving data, and
shrinking the filesystem. The shrink process has now hit some of those
csum errors:

h...@vlad:~ $ sudo btrfs fi show -h
failed to read /dev/sr0
Label: none  uuid: fad2f415-979d-405e-9aa2-0c1011389273
        Total devices 1 FS bytes used 660.75GiB
        devid    1 size 675.40GiB used 1019.00GiB path /dev/dm-14
[...]

h...@vlad:~ $ sudo strace btrfs fi resize 708209608k /media/vlad/video
[...]
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fcd26974000
write(1, "Resize '/media/vlad/video' of '70"..., 43Resize '/media/vlad/video' 
of '708209608k'
) = 43
ioctl(3, 0x50009403, 0x7fffe9a8d140)    = -1 EIO (Input/output error)
close(3)                                = 0
write(2, "ERROR: unable to resize '/media/v"..., 44ERROR: unable to resize 
'/media/vlad/video'
) = 44
exit_group(30)                          = ?

   In syslog, I get a bunch of csum errors:

Oct 21 19:40:01 vlad kernel: new size for /dev/mapper/media-video is 
725206638592
Oct 21 19:40:03 vlad kernel: btrfs: relocating block group 1090913304576 flags 1
Oct 21 19:40:05 vlad kernel: btrfs_readpage_end_io_hook: 4088 callbacks 
suppressed
Oct 21 19:40:05 vlad kernel: btrfs csum failed ino 257 off 131072 csum 
752820288 private 2880127001
Oct 21 19:40:05 vlad kernel: btrfs csum failed ino 257 off 135168 csum 
2112861244 private 3414608960
[and more]

   This is, I suppose, expected.

   However, it seems to put the filesystem into a state where a resize
cannot be attempted again:

h...@vlad:~ $ sudo strace btrfs fi resize 708209608k /media/vlad/video
[...]
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7f559f8af000
write(1, "Resize '/media/vlad/video' of '70"..., 43Resize '/media/vlad/video' 
of '708209608k'
) = 43
ioctl(3, 0x50009403, 0x7fff8dfda770)    = -1 EINVAL (Invalid argument)
close(3)                                = 0
write(2, "ERROR: unable to resize '/media/v"..., 44ERROR: unable to resize 
'/media/vlad/video'
) = 44
exit_group(30)                          = ?

   Unmounting and remounting it resets the resize state, and I end up
back in the first state again. Is this toggling of state intended?

   I'm on the git unstable kernel. Should I go up to 2.6.36 and try
again? The other thing I can think of to do is to delete some of the
files with bad checksums (I have backups) and see if I can get any
further with the resize.

   Hugo.

-- 
=== Hugo Mills: h...@... carfax.org.uk | darksatanic.net | lug.org.uk ===
  PGP key: 515C238D from wwwkeys.eu.pgp.net or http://www.carfax.org.uk
  --- We teach people management skills by examining characters in ---   
            Shakespeare.  You could look at Claudius's crisis            
                   management techniques, for example.                   

Attachment: signature.asc
Description: Digital signature

Reply via email to