Skip to contentSkip to conversation

Bigalloc ENOSPC woes

DISCUSSION Eric Sandeen 3 participants 3 messages Jan 30, 2012 – Jan 31, 2012

lore
Share & tools
lore
#0 lore raw

I got nervous when I tried this on an -O bigalloc -C 65536 fs:

# echo foo > blah; du -hc blah; sync; du -hc blah
4.0K blah
4.0K total
64K blah
64K total

Seems that du should never report less than the cluster size, should it?

And that made me wonder about ENOSPC handling - are we tracing delalloc allocations correctly?

Quoted 1 line

From running xfstest 204 on a similarly-created fs, it really seems that we are not.

A manual test of creating 4-byte files until ENOSPC (which was really when I ran out of inodes) and then issuing a sync led to a storm of kernel messages about allocation failures:

[  482.154538] EXT4-fs (sdb6): delayed block allocation failed for inode 1664 at logical offset 0 with max blocks 1 with error -28
[  482.154540] EXT4-fs (sdb6): This should not happen!! Data will be lost

<ad infinitum, or at least 600 or so in my case>

and an end result of a bunch of 4 byte long files with no extents. Almost like files full of NULLs. Careful - that is hard to live down. :)

Ted, are you aware of those issues in bigalloc?

-Eric

#1 lore raw
Quoted 9 lines · Eric Sandeen

I got nervous when I tried this on an -O bigalloc -C 65536 fs:

# echo foo > blah; du -hc blah; sync; du -hc blah
4.0K blah
4.0K total
64K blah
64K total

Seems that du should never report less than the cluster size, should it?

Yes, that seems like a bug.

Quoted 7 lines

And that made me wonder about ENOSPC handling - are we tracing delalloc allocations correctly?

From running xfstest 204 on a similarly-created fs, it really seems that we are not....

Ted, are you aware of those issues in bigalloc?

No, this is news to me. I'll have to take a closer look at this; thanks for bring this up.

- Ted

#2 lore raw
In reply to Eric Sandeen
Quoted 9 lines · Eric Sandeen

I got nervous when I tried this on an -O bigalloc -C 65536 fs:

# echo foo > blah; du -hc blah; sync; du -hc blah
4.0K blah
4.0K total
64K blah
64K total

Seems that du should never report less than the cluster size, should it?

It is a bug and the corresponding fix is sent with the subject "ext4:
let getattr report the right blocks in delalloc+bigalloc."

Quoted 5 lines

And that made me wonder about ENOSPC handling - are we tracing delalloc allocations correctly?

From running xfstest 204 on a similarly-created fs, it really seems that we are not.

Quoted 8 lines

A manual test of creating 4-byte files until ENOSPC (which was really when I ran out of inodes) and then issuing a sync led to a storm of kernel messages about allocation failures:

[  482.154538] EXT4-fs (sdb6): delayed block allocation failed for inode 1664 at logical offset 0 with max blocks 1 with error -28
[  482.154540] EXT4-fs (sdb6): This should not happen!! Data will be lost

<ad infinitum, or at least 600 or so in my case>

and an end result of a bunch of 4 byte long files with no extents. Almost like files full of NULLs. Careful - that is hard to live down. :)

yeah, I can reproduce it easily and more investigation is needed here.

Thanks
Tao

Quoted 8 lines

Ted, are you aware of those issues in bigalloc?

-Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html