tmp_suning_uos_patched/fs/ocfs2
Tao Ma dfe4d3d6a6 ocfs2: Fix the update of name_offset when removing xattrs
When replacing a xattr's value, in some case we wipe its name/value
first and then re-add it. The wipe is done by
ocfs2_xa_block_wipe_namevalue() when the xattr is in the inode or
block. We currently adjust name_offset for all the entries which have
(offset < name_offset). This does not adjust the entrie we're replacing.
Since we are replacing the entry, we don't adjust the total entry count.
When we calculate a new namevalue location, we trust the entries
now-wrong offset in ocfs2_xa_get_free_start().  The solution is to
also adjust the name_offset for the replaced entry, allowing
ocfs2_xa_get_free_start() to calculate the new namevalue location
correctly.

The following script can trigger a kernel panic easily.

echo 'y'|mkfs.ocfs2 --fs-features=local,xattr -b 4K $DEVICE
mount -t ocfs2 $DEVICE $MNT_DIR
FILE=$MNT_DIR/$RANDOM
for((i=0;i<76;i++))
do
string_76="a$string_76"
done
string_78="aa$string_76"
string_82="aaaa$string_78"

touch $FILE
setfattr -n 'user.test1234567890' -v $string_76 $FILE
setfattr -n 'user.test1234567890' -v $string_78 $FILE
setfattr -n 'user.test1234567890' -v $string_82 $FILE

Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
2010-03-19 14:53:51 -07:00
..
cluster fs/ocfs2/cluster/tcp.c: remove use of NIPQUAD, use %pI4 2010-03-12 15:52:27 -08:00
dlm dlm: allow dlm do recovery during shutdown 2010-02-26 15:41:19 -08:00
dlmfs ocfs2/userdlm: Add tracing in userdlm 2010-02-27 19:57:07 -08:00
acl.c ocfs2: set i_mode on disk during acl operations 2010-03-17 12:28:22 -07:00
acl.h ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00
alloc.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6 2010-03-05 13:20:53 -08:00
alloc.h ocfs2: Find proper end cpos for a leaf refcount block. 2009-12-02 16:14:57 -08:00
aops.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6 2010-03-05 13:20:53 -08:00
aops.h
blockcheck.c tree-wide: fix typos "offest" -> "offset" 2009-12-04 15:39:50 +01:00
blockcheck.h
buffer_head_io.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
buffer_head_io.h
dcache.c
dcache.h
dir.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6 2010-03-05 13:20:53 -08:00
dir.h
dlmglue.c Merge branch 'for-next' into for-linus 2010-03-08 16:55:37 +01:00
dlmglue.h
export.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
export.h
extent_map.c Merge branch 'for-next' into for-linus 2010-03-08 16:55:37 +01:00
extent_map.h
file.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6 2010-03-05 13:20:53 -08:00
file.h
heartbeat.c
heartbeat.h
inode.c dquot: cleanup dquot initialize routine 2010-03-05 00:20:30 +01:00
inode.h
ioctl.c ocfs2: Use compat_ptr in reflink_arguments. 2010-02-02 18:56:37 -08:00
ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
journal.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
journal.h
Kconfig ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00
localalloc.c ocfs2: Always try for maximum bits with new local alloc windows 2010-03-18 13:22:42 -07:00
localalloc.h
locks.c [PATCH] Skip check for mandatory locks when unlocking 2010-03-17 12:07:16 -07:00
locks.h
Makefile ocfs2_dlmfs: Move to its own directory 2010-02-26 15:41:14 -08:00
mmap.c
mmap.h
namei.c dquot: cleanup dquot initialize routine 2010-03-05 00:20:30 +01:00
namei.h
ocfs1_fs_compat.h
ocfs2_fs.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
ocfs2_ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
ocfs2_lockid.h
ocfs2_lockingver.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
ocfs2.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
quota_global.c dquot: cleanup dquot initialize routine 2010-03-05 00:20:30 +01:00
quota_local.c bitops: rename for_each_bit() to for_each_set_bit() 2010-03-06 11:26:23 -08:00
quota.h quota: Move definition of QFMT_OCFS2 to linux/quota.h 2009-12-10 15:02:53 +01:00
refcounttree.c ocfs2: Update i_blocks in reflink operations. 2010-03-17 12:28:00 -07:00
refcounttree.h
resize.c
resize.h
slot_map.c
slot_map.h
stack_o2cb.c ocfs2: Hang the locking proto on the cluster conn and use it in asts. 2010-02-26 15:41:16 -08:00
stack_user.c ocfs2: Remove the ast pointers from ocfs2_stack_plugins 2010-02-26 15:41:16 -08:00
stackglue.c ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
stackglue.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
suballoc.c ocfs2: Change bg_chain check for ocfs2_validate_gd_parent. 2010-03-17 12:07:21 -07:00
suballoc.h ocfs2: add extent block stealing for ocfs2 v5 2010-02-26 15:41:07 -08:00
super.c ocfs2: add extent block stealing for ocfs2 v5 2010-02-26 15:41:07 -08:00
super.h
symlink.c ocfs2: Fix refcnt leak on ocfs2_fast_follow_link() error path 2010-01-11 15:38:50 -08:00
symlink.h
sysfile.c
sysfile.h
uptodate.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
uptodate.h
ver.c
ver.h
xattr.c ocfs2: Fix the update of name_offset when removing xattrs 2010-03-19 14:53:51 -07:00
xattr.h ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00