Bug 12793
Summary: | ext4 gives wrong errno with too long extended attribute values | ||
---|---|---|---|
Product: | File System | Reporter: | Petteri Räty (betelgeuse) |
Component: | ext4 | Assignee: | fs_ext4 (fs_ext4) |
Status: | CLOSED OBSOLETE | ||
Severity: | normal | CC: | alan, narendramind, philantrop, tytso |
Priority: | P1 | ||
Hardware: | All | ||
OS: | Linux | ||
Kernel Version: | 2.6.29-rc6 | Subsystem: | |
Regression: | No | Bisected commit-id: |
Description
Petteri Räty
2009-03-01 04:40:58 UTC
The following patch fixes the issue. ====Patch starts iff -uNr linux-2.6.30.3-orig/fs/ext4/xattr.c linux-2.6.30.3-fix/fs/ext4/xattr.c --- linux-2.6.30.3-orig/fs/ext4/xattr.c 2009-07-25 03:17:51.000000000 +0530 +++ linux-2.6.30.3-fix/fs/ext4/xattr.c 2009-08-07 20:27:40.907412651 +0530 @@ -698,7 +698,7 @@ #define header(x) ((struct ext4_xattr_header *)(x)) if (i->value && i->value_len > sb->s_blocksize) - return -ENOSPC; + return -E2BIG; if (s->base) { ce = mb_cache_entry_get(ext4_xattr_cache, bs->bh->b_bdev, bs->bh->b_blocknr); ====Patch ends Ran test_xattr.py on the kernel with above fix, it terminates with OSError 7. I'm not convinced this change to use E2BIG instead of ENOSPC is always the right thing. Consider the wording of E2BIG: "The value of the given attribute is too large, IT EXCEEDS THE MAXIMUM ALLOWABLE SIZE OF AN ATTRIBUTE VALUE". In other words E2BIG implies that a request was made to create an attribute where the size exceeded some static value. So if we pass in a request to create an attribute which is 2MB, E2BIG makes sense. On the other hand, if the EA block is almost full, a request to create an attribute value which is 2 bytes long could result in an error --- and in that case, ENOSPC makes a lot more sense that E2BIG. |