cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xattr.c (83616B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * linux/fs/ext4/xattr.c
      4 *
      5 * Copyright (C) 2001-2003 Andreas Gruenbacher, <agruen@suse.de>
      6 *
      7 * Fix by Harrison Xing <harrison@mountainviewdata.com>.
      8 * Ext4 code with a lot of help from Eric Jarman <ejarman@acm.org>.
      9 * Extended attributes for symlinks and special files added per
     10 *  suggestion of Luka Renko <luka.renko@hermes.si>.
     11 * xattr consolidation Copyright (c) 2004 James Morris <jmorris@redhat.com>,
     12 *  Red Hat Inc.
     13 * ea-in-inode support by Alex Tomas <alex@clusterfs.com> aka bzzz
     14 *  and Andreas Gruenbacher <agruen@suse.de>.
     15 */
     16
     17/*
     18 * Extended attributes are stored directly in inodes (on file systems with
     19 * inodes bigger than 128 bytes) and on additional disk blocks. The i_file_acl
     20 * field contains the block number if an inode uses an additional block. All
     21 * attributes must fit in the inode and one additional block. Blocks that
     22 * contain the identical set of attributes may be shared among several inodes.
     23 * Identical blocks are detected by keeping a cache of blocks that have
     24 * recently been accessed.
     25 *
     26 * The attributes in inodes and on blocks have a different header; the entries
     27 * are stored in the same format:
     28 *
     29 *   +------------------+
     30 *   | header           |
     31 *   | entry 1          | |
     32 *   | entry 2          | | growing downwards
     33 *   | entry 3          | v
     34 *   | four null bytes  |
     35 *   | . . .            |
     36 *   | value 1          | ^
     37 *   | value 3          | | growing upwards
     38 *   | value 2          | |
     39 *   +------------------+
     40 *
     41 * The header is followed by multiple entry descriptors. In disk blocks, the
     42 * entry descriptors are kept sorted. In inodes, they are unsorted. The
     43 * attribute values are aligned to the end of the block in no specific order.
     44 *
     45 * Locking strategy
     46 * ----------------
     47 * EXT4_I(inode)->i_file_acl is protected by EXT4_I(inode)->xattr_sem.
     48 * EA blocks are only changed if they are exclusive to an inode, so
     49 * holding xattr_sem also means that nothing but the EA block's reference
     50 * count can change. Multiple writers to the same block are synchronized
     51 * by the buffer lock.
     52 */
     53
     54#include <linux/init.h>
     55#include <linux/fs.h>
     56#include <linux/slab.h>
     57#include <linux/mbcache.h>
     58#include <linux/quotaops.h>
     59#include <linux/iversion.h>
     60#include "ext4_jbd2.h"
     61#include "ext4.h"
     62#include "xattr.h"
     63#include "acl.h"
     64
     65#ifdef EXT4_XATTR_DEBUG
     66# define ea_idebug(inode, fmt, ...)					\
     67	printk(KERN_DEBUG "inode %s:%lu: " fmt "\n",			\
     68	       inode->i_sb->s_id, inode->i_ino, ##__VA_ARGS__)
     69# define ea_bdebug(bh, fmt, ...)					\
     70	printk(KERN_DEBUG "block %pg:%lu: " fmt "\n",			\
     71	       bh->b_bdev, (unsigned long)bh->b_blocknr, ##__VA_ARGS__)
     72#else
     73# define ea_idebug(inode, fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
     74# define ea_bdebug(bh, fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
     75#endif
     76
     77static void ext4_xattr_block_cache_insert(struct mb_cache *,
     78					  struct buffer_head *);
     79static struct buffer_head *
     80ext4_xattr_block_cache_find(struct inode *, struct ext4_xattr_header *,
     81			    struct mb_cache_entry **);
     82static __le32 ext4_xattr_hash_entry(char *name, size_t name_len, __le32 *value,
     83				    size_t value_count);
     84static void ext4_xattr_rehash(struct ext4_xattr_header *);
     85
     86static const struct xattr_handler * const ext4_xattr_handler_map[] = {
     87	[EXT4_XATTR_INDEX_USER]		     = &ext4_xattr_user_handler,
     88#ifdef CONFIG_EXT4_FS_POSIX_ACL
     89	[EXT4_XATTR_INDEX_POSIX_ACL_ACCESS]  = &posix_acl_access_xattr_handler,
     90	[EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT] = &posix_acl_default_xattr_handler,
     91#endif
     92	[EXT4_XATTR_INDEX_TRUSTED]	     = &ext4_xattr_trusted_handler,
     93#ifdef CONFIG_EXT4_FS_SECURITY
     94	[EXT4_XATTR_INDEX_SECURITY]	     = &ext4_xattr_security_handler,
     95#endif
     96	[EXT4_XATTR_INDEX_HURD]		     = &ext4_xattr_hurd_handler,
     97};
     98
     99const struct xattr_handler *ext4_xattr_handlers[] = {
    100	&ext4_xattr_user_handler,
    101	&ext4_xattr_trusted_handler,
    102#ifdef CONFIG_EXT4_FS_POSIX_ACL
    103	&posix_acl_access_xattr_handler,
    104	&posix_acl_default_xattr_handler,
    105#endif
    106#ifdef CONFIG_EXT4_FS_SECURITY
    107	&ext4_xattr_security_handler,
    108#endif
    109	&ext4_xattr_hurd_handler,
    110	NULL
    111};
    112
    113#define EA_BLOCK_CACHE(inode)	(((struct ext4_sb_info *) \
    114				inode->i_sb->s_fs_info)->s_ea_block_cache)
    115
    116#define EA_INODE_CACHE(inode)	(((struct ext4_sb_info *) \
    117				inode->i_sb->s_fs_info)->s_ea_inode_cache)
    118
    119static int
    120ext4_expand_inode_array(struct ext4_xattr_inode_array **ea_inode_array,
    121			struct inode *inode);
    122
    123#ifdef CONFIG_LOCKDEP
    124void ext4_xattr_inode_set_class(struct inode *ea_inode)
    125{
    126	lockdep_set_subclass(&ea_inode->i_rwsem, 1);
    127}
    128#endif
    129
    130static __le32 ext4_xattr_block_csum(struct inode *inode,
    131				    sector_t block_nr,
    132				    struct ext4_xattr_header *hdr)
    133{
    134	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
    135	__u32 csum;
    136	__le64 dsk_block_nr = cpu_to_le64(block_nr);
    137	__u32 dummy_csum = 0;
    138	int offset = offsetof(struct ext4_xattr_header, h_checksum);
    139
    140	csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&dsk_block_nr,
    141			   sizeof(dsk_block_nr));
    142	csum = ext4_chksum(sbi, csum, (__u8 *)hdr, offset);
    143	csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum, sizeof(dummy_csum));
    144	offset += sizeof(dummy_csum);
    145	csum = ext4_chksum(sbi, csum, (__u8 *)hdr + offset,
    146			   EXT4_BLOCK_SIZE(inode->i_sb) - offset);
    147
    148	return cpu_to_le32(csum);
    149}
    150
    151static int ext4_xattr_block_csum_verify(struct inode *inode,
    152					struct buffer_head *bh)
    153{
    154	struct ext4_xattr_header *hdr = BHDR(bh);
    155	int ret = 1;
    156
    157	if (ext4_has_metadata_csum(inode->i_sb)) {
    158		lock_buffer(bh);
    159		ret = (hdr->h_checksum == ext4_xattr_block_csum(inode,
    160							bh->b_blocknr, hdr));
    161		unlock_buffer(bh);
    162	}
    163	return ret;
    164}
    165
    166static void ext4_xattr_block_csum_set(struct inode *inode,
    167				      struct buffer_head *bh)
    168{
    169	if (ext4_has_metadata_csum(inode->i_sb))
    170		BHDR(bh)->h_checksum = ext4_xattr_block_csum(inode,
    171						bh->b_blocknr, BHDR(bh));
    172}
    173
    174static inline const struct xattr_handler *
    175ext4_xattr_handler(int name_index)
    176{
    177	const struct xattr_handler *handler = NULL;
    178
    179	if (name_index > 0 && name_index < ARRAY_SIZE(ext4_xattr_handler_map))
    180		handler = ext4_xattr_handler_map[name_index];
    181	return handler;
    182}
    183
    184static int
    185ext4_xattr_check_entries(struct ext4_xattr_entry *entry, void *end,
    186			 void *value_start)
    187{
    188	struct ext4_xattr_entry *e = entry;
    189
    190	/* Find the end of the names list */
    191	while (!IS_LAST_ENTRY(e)) {
    192		struct ext4_xattr_entry *next = EXT4_XATTR_NEXT(e);
    193		if ((void *)next >= end)
    194			return -EFSCORRUPTED;
    195		if (strnlen(e->e_name, e->e_name_len) != e->e_name_len)
    196			return -EFSCORRUPTED;
    197		e = next;
    198	}
    199
    200	/* Check the values */
    201	while (!IS_LAST_ENTRY(entry)) {
    202		u32 size = le32_to_cpu(entry->e_value_size);
    203
    204		if (size > EXT4_XATTR_SIZE_MAX)
    205			return -EFSCORRUPTED;
    206
    207		if (size != 0 && entry->e_value_inum == 0) {
    208			u16 offs = le16_to_cpu(entry->e_value_offs);
    209			void *value;
    210
    211			/*
    212			 * The value cannot overlap the names, and the value
    213			 * with padding cannot extend beyond 'end'.  Check both
    214			 * the padded and unpadded sizes, since the size may
    215			 * overflow to 0 when adding padding.
    216			 */
    217			if (offs > end - value_start)
    218				return -EFSCORRUPTED;
    219			value = value_start + offs;
    220			if (value < (void *)e + sizeof(u32) ||
    221			    size > end - value ||
    222			    EXT4_XATTR_SIZE(size) > end - value)
    223				return -EFSCORRUPTED;
    224		}
    225		entry = EXT4_XATTR_NEXT(entry);
    226	}
    227
    228	return 0;
    229}
    230
    231static inline int
    232__ext4_xattr_check_block(struct inode *inode, struct buffer_head *bh,
    233			 const char *function, unsigned int line)
    234{
    235	int error = -EFSCORRUPTED;
    236
    237	if (BHDR(bh)->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC) ||
    238	    BHDR(bh)->h_blocks != cpu_to_le32(1))
    239		goto errout;
    240	if (buffer_verified(bh))
    241		return 0;
    242
    243	error = -EFSBADCRC;
    244	if (!ext4_xattr_block_csum_verify(inode, bh))
    245		goto errout;
    246	error = ext4_xattr_check_entries(BFIRST(bh), bh->b_data + bh->b_size,
    247					 bh->b_data);
    248errout:
    249	if (error)
    250		__ext4_error_inode(inode, function, line, 0, -error,
    251				   "corrupted xattr block %llu",
    252				   (unsigned long long) bh->b_blocknr);
    253	else
    254		set_buffer_verified(bh);
    255	return error;
    256}
    257
    258#define ext4_xattr_check_block(inode, bh) \
    259	__ext4_xattr_check_block((inode), (bh),  __func__, __LINE__)
    260
    261
    262static int
    263__xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header,
    264			 void *end, const char *function, unsigned int line)
    265{
    266	int error = -EFSCORRUPTED;
    267
    268	if (end - (void *)header < sizeof(*header) + sizeof(u32) ||
    269	    (header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)))
    270		goto errout;
    271	error = ext4_xattr_check_entries(IFIRST(header), end, IFIRST(header));
    272errout:
    273	if (error)
    274		__ext4_error_inode(inode, function, line, 0, -error,
    275				   "corrupted in-inode xattr");
    276	return error;
    277}
    278
    279#define xattr_check_inode(inode, header, end) \
    280	__xattr_check_inode((inode), (header), (end), __func__, __LINE__)
    281
    282static int
    283xattr_find_entry(struct inode *inode, struct ext4_xattr_entry **pentry,
    284		 void *end, int name_index, const char *name, int sorted)
    285{
    286	struct ext4_xattr_entry *entry, *next;
    287	size_t name_len;
    288	int cmp = 1;
    289
    290	if (name == NULL)
    291		return -EINVAL;
    292	name_len = strlen(name);
    293	for (entry = *pentry; !IS_LAST_ENTRY(entry); entry = next) {
    294		next = EXT4_XATTR_NEXT(entry);
    295		if ((void *) next >= end) {
    296			EXT4_ERROR_INODE(inode, "corrupted xattr entries");
    297			return -EFSCORRUPTED;
    298		}
    299		cmp = name_index - entry->e_name_index;
    300		if (!cmp)
    301			cmp = name_len - entry->e_name_len;
    302		if (!cmp)
    303			cmp = memcmp(name, entry->e_name, name_len);
    304		if (cmp <= 0 && (sorted || cmp == 0))
    305			break;
    306	}
    307	*pentry = entry;
    308	return cmp ? -ENODATA : 0;
    309}
    310
    311static u32
    312ext4_xattr_inode_hash(struct ext4_sb_info *sbi, const void *buffer, size_t size)
    313{
    314	return ext4_chksum(sbi, sbi->s_csum_seed, buffer, size);
    315}
    316
    317static u64 ext4_xattr_inode_get_ref(struct inode *ea_inode)
    318{
    319	return ((u64)ea_inode->i_ctime.tv_sec << 32) |
    320		(u32) inode_peek_iversion_raw(ea_inode);
    321}
    322
    323static void ext4_xattr_inode_set_ref(struct inode *ea_inode, u64 ref_count)
    324{
    325	ea_inode->i_ctime.tv_sec = (u32)(ref_count >> 32);
    326	inode_set_iversion_raw(ea_inode, ref_count & 0xffffffff);
    327}
    328
    329static u32 ext4_xattr_inode_get_hash(struct inode *ea_inode)
    330{
    331	return (u32)ea_inode->i_atime.tv_sec;
    332}
    333
    334static void ext4_xattr_inode_set_hash(struct inode *ea_inode, u32 hash)
    335{
    336	ea_inode->i_atime.tv_sec = hash;
    337}
    338
    339/*
    340 * Read the EA value from an inode.
    341 */
    342static int ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t size)
    343{
    344	int blocksize = 1 << ea_inode->i_blkbits;
    345	int bh_count = (size + blocksize - 1) >> ea_inode->i_blkbits;
    346	int tail_size = (size % blocksize) ?: blocksize;
    347	struct buffer_head *bhs_inline[8];
    348	struct buffer_head **bhs = bhs_inline;
    349	int i, ret;
    350
    351	if (bh_count > ARRAY_SIZE(bhs_inline)) {
    352		bhs = kmalloc_array(bh_count, sizeof(*bhs), GFP_NOFS);
    353		if (!bhs)
    354			return -ENOMEM;
    355	}
    356
    357	ret = ext4_bread_batch(ea_inode, 0 /* block */, bh_count,
    358			       true /* wait */, bhs);
    359	if (ret)
    360		goto free_bhs;
    361
    362	for (i = 0; i < bh_count; i++) {
    363		/* There shouldn't be any holes in ea_inode. */
    364		if (!bhs[i]) {
    365			ret = -EFSCORRUPTED;
    366			goto put_bhs;
    367		}
    368		memcpy((char *)buf + blocksize * i, bhs[i]->b_data,
    369		       i < bh_count - 1 ? blocksize : tail_size);
    370	}
    371	ret = 0;
    372put_bhs:
    373	for (i = 0; i < bh_count; i++)
    374		brelse(bhs[i]);
    375free_bhs:
    376	if (bhs != bhs_inline)
    377		kfree(bhs);
    378	return ret;
    379}
    380
    381#define EXT4_XATTR_INODE_GET_PARENT(inode) ((__u32)(inode)->i_mtime.tv_sec)
    382
    383static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino,
    384				 u32 ea_inode_hash, struct inode **ea_inode)
    385{
    386	struct inode *inode;
    387	int err;
    388
    389	inode = ext4_iget(parent->i_sb, ea_ino, EXT4_IGET_NORMAL);
    390	if (IS_ERR(inode)) {
    391		err = PTR_ERR(inode);
    392		ext4_error(parent->i_sb,
    393			   "error while reading EA inode %lu err=%d", ea_ino,
    394			   err);
    395		return err;
    396	}
    397
    398	if (is_bad_inode(inode)) {
    399		ext4_error(parent->i_sb,
    400			   "error while reading EA inode %lu is_bad_inode",
    401			   ea_ino);
    402		err = -EIO;
    403		goto error;
    404	}
    405
    406	if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) {
    407		ext4_error(parent->i_sb,
    408			   "EA inode %lu does not have EXT4_EA_INODE_FL flag",
    409			    ea_ino);
    410		err = -EINVAL;
    411		goto error;
    412	}
    413
    414	ext4_xattr_inode_set_class(inode);
    415
    416	/*
    417	 * Check whether this is an old Lustre-style xattr inode. Lustre
    418	 * implementation does not have hash validation, rather it has a
    419	 * backpointer from ea_inode to the parent inode.
    420	 */
    421	if (ea_inode_hash != ext4_xattr_inode_get_hash(inode) &&
    422	    EXT4_XATTR_INODE_GET_PARENT(inode) == parent->i_ino &&
    423	    inode->i_generation == parent->i_generation) {
    424		ext4_set_inode_state(inode, EXT4_STATE_LUSTRE_EA_INODE);
    425		ext4_xattr_inode_set_ref(inode, 1);
    426	} else {
    427		inode_lock(inode);
    428		inode->i_flags |= S_NOQUOTA;
    429		inode_unlock(inode);
    430	}
    431
    432	*ea_inode = inode;
    433	return 0;
    434error:
    435	iput(inode);
    436	return err;
    437}
    438
    439static int
    440ext4_xattr_inode_verify_hashes(struct inode *ea_inode,
    441			       struct ext4_xattr_entry *entry, void *buffer,
    442			       size_t size)
    443{
    444	u32 hash;
    445
    446	/* Verify stored hash matches calculated hash. */
    447	hash = ext4_xattr_inode_hash(EXT4_SB(ea_inode->i_sb), buffer, size);
    448	if (hash != ext4_xattr_inode_get_hash(ea_inode))
    449		return -EFSCORRUPTED;
    450
    451	if (entry) {
    452		__le32 e_hash, tmp_data;
    453
    454		/* Verify entry hash. */
    455		tmp_data = cpu_to_le32(hash);
    456		e_hash = ext4_xattr_hash_entry(entry->e_name, entry->e_name_len,
    457					       &tmp_data, 1);
    458		if (e_hash != entry->e_hash)
    459			return -EFSCORRUPTED;
    460	}
    461	return 0;
    462}
    463
    464/*
    465 * Read xattr value from the EA inode.
    466 */
    467static int
    468ext4_xattr_inode_get(struct inode *inode, struct ext4_xattr_entry *entry,
    469		     void *buffer, size_t size)
    470{
    471	struct mb_cache *ea_inode_cache = EA_INODE_CACHE(inode);
    472	struct inode *ea_inode;
    473	int err;
    474
    475	err = ext4_xattr_inode_iget(inode, le32_to_cpu(entry->e_value_inum),
    476				    le32_to_cpu(entry->e_hash), &ea_inode);
    477	if (err) {
    478		ea_inode = NULL;
    479		goto out;
    480	}
    481
    482	if (i_size_read(ea_inode) != size) {
    483		ext4_warning_inode(ea_inode,
    484				   "ea_inode file size=%llu entry size=%zu",
    485				   i_size_read(ea_inode), size);
    486		err = -EFSCORRUPTED;
    487		goto out;
    488	}
    489
    490	err = ext4_xattr_inode_read(ea_inode, buffer, size);
    491	if (err)
    492		goto out;
    493
    494	if (!ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE)) {
    495		err = ext4_xattr_inode_verify_hashes(ea_inode, entry, buffer,
    496						     size);
    497		if (err) {
    498			ext4_warning_inode(ea_inode,
    499					   "EA inode hash validation failed");
    500			goto out;
    501		}
    502
    503		if (ea_inode_cache)
    504			mb_cache_entry_create(ea_inode_cache, GFP_NOFS,
    505					ext4_xattr_inode_get_hash(ea_inode),
    506					ea_inode->i_ino, true /* reusable */);
    507	}
    508out:
    509	iput(ea_inode);
    510	return err;
    511}
    512
    513static int
    514ext4_xattr_block_get(struct inode *inode, int name_index, const char *name,
    515		     void *buffer, size_t buffer_size)
    516{
    517	struct buffer_head *bh = NULL;
    518	struct ext4_xattr_entry *entry;
    519	size_t size;
    520	void *end;
    521	int error;
    522	struct mb_cache *ea_block_cache = EA_BLOCK_CACHE(inode);
    523
    524	ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
    525		  name_index, name, buffer, (long)buffer_size);
    526
    527	if (!EXT4_I(inode)->i_file_acl)
    528		return -ENODATA;
    529	ea_idebug(inode, "reading block %llu",
    530		  (unsigned long long)EXT4_I(inode)->i_file_acl);
    531	bh = ext4_sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
    532	if (IS_ERR(bh))
    533		return PTR_ERR(bh);
    534	ea_bdebug(bh, "b_count=%d, refcount=%d",
    535		atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
    536	error = ext4_xattr_check_block(inode, bh);
    537	if (error)
    538		goto cleanup;
    539	ext4_xattr_block_cache_insert(ea_block_cache, bh);
    540	entry = BFIRST(bh);
    541	end = bh->b_data + bh->b_size;
    542	error = xattr_find_entry(inode, &entry, end, name_index, name, 1);
    543	if (error)
    544		goto cleanup;
    545	size = le32_to_cpu(entry->e_value_size);
    546	error = -ERANGE;
    547	if (unlikely(size > EXT4_XATTR_SIZE_MAX))
    548		goto cleanup;
    549	if (buffer) {
    550		if (size > buffer_size)
    551			goto cleanup;
    552		if (entry->e_value_inum) {
    553			error = ext4_xattr_inode_get(inode, entry, buffer,
    554						     size);
    555			if (error)
    556				goto cleanup;
    557		} else {
    558			u16 offset = le16_to_cpu(entry->e_value_offs);
    559			void *p = bh->b_data + offset;
    560
    561			if (unlikely(p + size > end))
    562				goto cleanup;
    563			memcpy(buffer, p, size);
    564		}
    565	}
    566	error = size;
    567
    568cleanup:
    569	brelse(bh);
    570	return error;
    571}
    572
    573int
    574ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
    575		     void *buffer, size_t buffer_size)
    576{
    577	struct ext4_xattr_ibody_header *header;
    578	struct ext4_xattr_entry *entry;
    579	struct ext4_inode *raw_inode;
    580	struct ext4_iloc iloc;
    581	size_t size;
    582	void *end;
    583	int error;
    584
    585	if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR))
    586		return -ENODATA;
    587	error = ext4_get_inode_loc(inode, &iloc);
    588	if (error)
    589		return error;
    590	raw_inode = ext4_raw_inode(&iloc);
    591	header = IHDR(inode, raw_inode);
    592	end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
    593	error = xattr_check_inode(inode, header, end);
    594	if (error)
    595		goto cleanup;
    596	entry = IFIRST(header);
    597	error = xattr_find_entry(inode, &entry, end, name_index, name, 0);
    598	if (error)
    599		goto cleanup;
    600	size = le32_to_cpu(entry->e_value_size);
    601	error = -ERANGE;
    602	if (unlikely(size > EXT4_XATTR_SIZE_MAX))
    603		goto cleanup;
    604	if (buffer) {
    605		if (size > buffer_size)
    606			goto cleanup;
    607		if (entry->e_value_inum) {
    608			error = ext4_xattr_inode_get(inode, entry, buffer,
    609						     size);
    610			if (error)
    611				goto cleanup;
    612		} else {
    613			u16 offset = le16_to_cpu(entry->e_value_offs);
    614			void *p = (void *)IFIRST(header) + offset;
    615
    616			if (unlikely(p + size > end))
    617				goto cleanup;
    618			memcpy(buffer, p, size);
    619		}
    620	}
    621	error = size;
    622
    623cleanup:
    624	brelse(iloc.bh);
    625	return error;
    626}
    627
    628/*
    629 * ext4_xattr_get()
    630 *
    631 * Copy an extended attribute into the buffer
    632 * provided, or compute the buffer size required.
    633 * Buffer is NULL to compute the size of the buffer required.
    634 *
    635 * Returns a negative error number on failure, or the number of bytes
    636 * used / required on success.
    637 */
    638int
    639ext4_xattr_get(struct inode *inode, int name_index, const char *name,
    640	       void *buffer, size_t buffer_size)
    641{
    642	int error;
    643
    644	if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
    645		return -EIO;
    646
    647	if (strlen(name) > 255)
    648		return -ERANGE;
    649
    650	down_read(&EXT4_I(inode)->xattr_sem);
    651	error = ext4_xattr_ibody_get(inode, name_index, name, buffer,
    652				     buffer_size);
    653	if (error == -ENODATA)
    654		error = ext4_xattr_block_get(inode, name_index, name, buffer,
    655					     buffer_size);
    656	up_read(&EXT4_I(inode)->xattr_sem);
    657	return error;
    658}
    659
    660static int
    661ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
    662			char *buffer, size_t buffer_size)
    663{
    664	size_t rest = buffer_size;
    665
    666	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
    667		const struct xattr_handler *handler =
    668			ext4_xattr_handler(entry->e_name_index);
    669
    670		if (handler && (!handler->list || handler->list(dentry))) {
    671			const char *prefix = handler->prefix ?: handler->name;
    672			size_t prefix_len = strlen(prefix);
    673			size_t size = prefix_len + entry->e_name_len + 1;
    674
    675			if (buffer) {
    676				if (size > rest)
    677					return -ERANGE;
    678				memcpy(buffer, prefix, prefix_len);
    679				buffer += prefix_len;
    680				memcpy(buffer, entry->e_name, entry->e_name_len);
    681				buffer += entry->e_name_len;
    682				*buffer++ = 0;
    683			}
    684			rest -= size;
    685		}
    686	}
    687	return buffer_size - rest;  /* total size */
    688}
    689
    690static int
    691ext4_xattr_block_list(struct dentry *dentry, char *buffer, size_t buffer_size)
    692{
    693	struct inode *inode = d_inode(dentry);
    694	struct buffer_head *bh = NULL;
    695	int error;
    696
    697	ea_idebug(inode, "buffer=%p, buffer_size=%ld",
    698		  buffer, (long)buffer_size);
    699
    700	if (!EXT4_I(inode)->i_file_acl)
    701		return 0;
    702	ea_idebug(inode, "reading block %llu",
    703		  (unsigned long long)EXT4_I(inode)->i_file_acl);
    704	bh = ext4_sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
    705	if (IS_ERR(bh))
    706		return PTR_ERR(bh);
    707	ea_bdebug(bh, "b_count=%d, refcount=%d",
    708		atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
    709	error = ext4_xattr_check_block(inode, bh);
    710	if (error)
    711		goto cleanup;
    712	ext4_xattr_block_cache_insert(EA_BLOCK_CACHE(inode), bh);
    713	error = ext4_xattr_list_entries(dentry, BFIRST(bh), buffer,
    714					buffer_size);
    715cleanup:
    716	brelse(bh);
    717	return error;
    718}
    719
    720static int
    721ext4_xattr_ibody_list(struct dentry *dentry, char *buffer, size_t buffer_size)
    722{
    723	struct inode *inode = d_inode(dentry);
    724	struct ext4_xattr_ibody_header *header;
    725	struct ext4_inode *raw_inode;
    726	struct ext4_iloc iloc;
    727	void *end;
    728	int error;
    729
    730	if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR))
    731		return 0;
    732	error = ext4_get_inode_loc(inode, &iloc);
    733	if (error)
    734		return error;
    735	raw_inode = ext4_raw_inode(&iloc);
    736	header = IHDR(inode, raw_inode);
    737	end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
    738	error = xattr_check_inode(inode, header, end);
    739	if (error)
    740		goto cleanup;
    741	error = ext4_xattr_list_entries(dentry, IFIRST(header),
    742					buffer, buffer_size);
    743
    744cleanup:
    745	brelse(iloc.bh);
    746	return error;
    747}
    748
    749/*
    750 * Inode operation listxattr()
    751 *
    752 * d_inode(dentry)->i_rwsem: don't care
    753 *
    754 * Copy a list of attribute names into the buffer
    755 * provided, or compute the buffer size required.
    756 * Buffer is NULL to compute the size of the buffer required.
    757 *
    758 * Returns a negative error number on failure, or the number of bytes
    759 * used / required on success.
    760 */
    761ssize_t
    762ext4_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
    763{
    764	int ret, ret2;
    765
    766	down_read(&EXT4_I(d_inode(dentry))->xattr_sem);
    767	ret = ret2 = ext4_xattr_ibody_list(dentry, buffer, buffer_size);
    768	if (ret < 0)
    769		goto errout;
    770	if (buffer) {
    771		buffer += ret;
    772		buffer_size -= ret;
    773	}
    774	ret = ext4_xattr_block_list(dentry, buffer, buffer_size);
    775	if (ret < 0)
    776		goto errout;
    777	ret += ret2;
    778errout:
    779	up_read(&EXT4_I(d_inode(dentry))->xattr_sem);
    780	return ret;
    781}
    782
    783/*
    784 * If the EXT4_FEATURE_COMPAT_EXT_ATTR feature of this file system is
    785 * not set, set it.
    786 */
    787static void ext4_xattr_update_super_block(handle_t *handle,
    788					  struct super_block *sb)
    789{
    790	if (ext4_has_feature_xattr(sb))
    791		return;
    792
    793	BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get_write_access");
    794	if (ext4_journal_get_write_access(handle, sb, EXT4_SB(sb)->s_sbh,
    795					  EXT4_JTR_NONE) == 0) {
    796		lock_buffer(EXT4_SB(sb)->s_sbh);
    797		ext4_set_feature_xattr(sb);
    798		ext4_superblock_csum_set(sb);
    799		unlock_buffer(EXT4_SB(sb)->s_sbh);
    800		ext4_handle_dirty_metadata(handle, NULL, EXT4_SB(sb)->s_sbh);
    801	}
    802}
    803
    804int ext4_get_inode_usage(struct inode *inode, qsize_t *usage)
    805{
    806	struct ext4_iloc iloc = { .bh = NULL };
    807	struct buffer_head *bh = NULL;
    808	struct ext4_inode *raw_inode;
    809	struct ext4_xattr_ibody_header *header;
    810	struct ext4_xattr_entry *entry;
    811	qsize_t ea_inode_refs = 0;
    812	void *end;
    813	int ret;
    814
    815	lockdep_assert_held_read(&EXT4_I(inode)->xattr_sem);
    816
    817	if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
    818		ret = ext4_get_inode_loc(inode, &iloc);
    819		if (ret)
    820			goto out;
    821		raw_inode = ext4_raw_inode(&iloc);
    822		header = IHDR(inode, raw_inode);
    823		end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
    824		ret = xattr_check_inode(inode, header, end);
    825		if (ret)
    826			goto out;
    827
    828		for (entry = IFIRST(header); !IS_LAST_ENTRY(entry);
    829		     entry = EXT4_XATTR_NEXT(entry))
    830			if (entry->e_value_inum)
    831				ea_inode_refs++;
    832	}
    833
    834	if (EXT4_I(inode)->i_file_acl) {
    835		bh = ext4_sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
    836		if (IS_ERR(bh)) {
    837			ret = PTR_ERR(bh);
    838			bh = NULL;
    839			goto out;
    840		}
    841
    842		ret = ext4_xattr_check_block(inode, bh);
    843		if (ret)
    844			goto out;
    845
    846		for (entry = BFIRST(bh); !IS_LAST_ENTRY(entry);
    847		     entry = EXT4_XATTR_NEXT(entry))
    848			if (entry->e_value_inum)
    849				ea_inode_refs++;
    850	}
    851	*usage = ea_inode_refs + 1;
    852	ret = 0;
    853out:
    854	brelse(iloc.bh);
    855	brelse(bh);
    856	return ret;
    857}
    858
    859static inline size_t round_up_cluster(struct inode *inode, size_t length)
    860{
    861	struct super_block *sb = inode->i_sb;
    862	size_t cluster_size = 1 << (EXT4_SB(sb)->s_cluster_bits +
    863				    inode->i_blkbits);
    864	size_t mask = ~(cluster_size - 1);
    865
    866	return (length + cluster_size - 1) & mask;
    867}
    868
    869static int ext4_xattr_inode_alloc_quota(struct inode *inode, size_t len)
    870{
    871	int err;
    872
    873	err = dquot_alloc_inode(inode);
    874	if (err)
    875		return err;
    876	err = dquot_alloc_space_nodirty(inode, round_up_cluster(inode, len));
    877	if (err)
    878		dquot_free_inode(inode);
    879	return err;
    880}
    881
    882static void ext4_xattr_inode_free_quota(struct inode *parent,
    883					struct inode *ea_inode,
    884					size_t len)
    885{
    886	if (ea_inode &&
    887	    ext4_test_inode_state(ea_inode, EXT4_STATE_LUSTRE_EA_INODE))
    888		return;
    889	dquot_free_space_nodirty(parent, round_up_cluster(parent, len));
    890	dquot_free_inode(parent);
    891}
    892
    893int __ext4_xattr_set_credits(struct super_block *sb, struct inode *inode,
    894			     struct buffer_head *block_bh, size_t value_len,
    895			     bool is_create)
    896{
    897	int credits;
    898	int blocks;
    899
    900	/*
    901	 * 1) Owner inode update
    902	 * 2) Ref count update on old xattr block
    903	 * 3) new xattr block
    904	 * 4) block bitmap update for new xattr block
    905	 * 5) group descriptor for new xattr block
    906	 * 6) block bitmap update for old xattr block
    907	 * 7) group descriptor for old block
    908	 *
    909	 * 6 & 7 can happen if we have two racing threads T_a and T_b
    910	 * which are each trying to set an xattr on inodes I_a and I_b
    911	 * which were both initially sharing an xattr block.
    912	 */
    913	credits = 7;
    914
    915	/* Quota updates. */
    916	credits += EXT4_MAXQUOTAS_TRANS_BLOCKS(sb);
    917
    918	/*
    919	 * In case of inline data, we may push out the data to a block,
    920	 * so we need to reserve credits for this eventuality
    921	 */
    922	if (inode && ext4_has_inline_data(inode))
    923		credits += ext4_writepage_trans_blocks(inode) + 1;
    924
    925	/* We are done if ea_inode feature is not enabled. */
    926	if (!ext4_has_feature_ea_inode(sb))
    927		return credits;
    928
    929	/* New ea_inode, inode map, block bitmap, group descriptor. */
    930	credits += 4;
    931
    932	/* Data blocks. */
    933	blocks = (value_len + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
    934
    935	/* Indirection block or one level of extent tree. */
    936	blocks += 1;
    937
    938	/* Block bitmap and group descriptor updates for each block. */
    939	credits += blocks * 2;
    940
    941	/* Blocks themselves. */
    942	credits += blocks;
    943
    944	if (!is_create) {
    945		/* Dereference ea_inode holding old xattr value.
    946		 * Old ea_inode, inode map, block bitmap, group descriptor.
    947		 */
    948		credits += 4;
    949
    950		/* Data blocks for old ea_inode. */
    951		blocks = XATTR_SIZE_MAX >> sb->s_blocksize_bits;
    952
    953		/* Indirection block or one level of extent tree for old
    954		 * ea_inode.
    955		 */
    956		blocks += 1;
    957
    958		/* Block bitmap and group descriptor updates for each block. */
    959		credits += blocks * 2;
    960	}
    961
    962	/* We may need to clone the existing xattr block in which case we need
    963	 * to increment ref counts for existing ea_inodes referenced by it.
    964	 */
    965	if (block_bh) {
    966		struct ext4_xattr_entry *entry = BFIRST(block_bh);
    967
    968		for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry))
    969			if (entry->e_value_inum)
    970				/* Ref count update on ea_inode. */
    971				credits += 1;
    972	}
    973	return credits;
    974}
    975
    976static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode,
    977				       int ref_change)
    978{
    979	struct mb_cache *ea_inode_cache = EA_INODE_CACHE(ea_inode);
    980	struct ext4_iloc iloc;
    981	s64 ref_count;
    982	u32 hash;
    983	int ret;
    984
    985	inode_lock(ea_inode);
    986
    987	ret = ext4_reserve_inode_write(handle, ea_inode, &iloc);
    988	if (ret)
    989		goto out;
    990
    991	ref_count = ext4_xattr_inode_get_ref(ea_inode);
    992	ref_count += ref_change;
    993	ext4_xattr_inode_set_ref(ea_inode, ref_count);
    994
    995	if (ref_change > 0) {
    996		WARN_ONCE(ref_count <= 0, "EA inode %lu ref_count=%lld",
    997			  ea_inode->i_ino, ref_count);
    998
    999		if (ref_count == 1) {
   1000			WARN_ONCE(ea_inode->i_nlink, "EA inode %lu i_nlink=%u",
   1001				  ea_inode->i_ino, ea_inode->i_nlink);
   1002
   1003			set_nlink(ea_inode, 1);
   1004			ext4_orphan_del(handle, ea_inode);
   1005
   1006			if (ea_inode_cache) {
   1007				hash = ext4_xattr_inode_get_hash(ea_inode);
   1008				mb_cache_entry_create(ea_inode_cache,
   1009						      GFP_NOFS, hash,
   1010						      ea_inode->i_ino,
   1011						      true /* reusable */);
   1012			}
   1013		}
   1014	} else {
   1015		WARN_ONCE(ref_count < 0, "EA inode %lu ref_count=%lld",
   1016			  ea_inode->i_ino, ref_count);
   1017
   1018		if (ref_count == 0) {
   1019			WARN_ONCE(ea_inode->i_nlink != 1,
   1020				  "EA inode %lu i_nlink=%u",
   1021				  ea_inode->i_ino, ea_inode->i_nlink);
   1022
   1023			clear_nlink(ea_inode);
   1024			ext4_orphan_add(handle, ea_inode);
   1025
   1026			if (ea_inode_cache) {
   1027				hash = ext4_xattr_inode_get_hash(ea_inode);
   1028				mb_cache_entry_delete(ea_inode_cache, hash,
   1029						      ea_inode->i_ino);
   1030			}
   1031		}
   1032	}
   1033
   1034	ret = ext4_mark_iloc_dirty(handle, ea_inode, &iloc);
   1035	if (ret)
   1036		ext4_warning_inode(ea_inode,
   1037				   "ext4_mark_iloc_dirty() failed ret=%d", ret);
   1038out:
   1039	inode_unlock(ea_inode);
   1040	return ret;
   1041}
   1042
   1043static int ext4_xattr_inode_inc_ref(handle_t *handle, struct inode *ea_inode)
   1044{
   1045	return ext4_xattr_inode_update_ref(handle, ea_inode, 1);
   1046}
   1047
   1048static int ext4_xattr_inode_dec_ref(handle_t *handle, struct inode *ea_inode)
   1049{
   1050	return ext4_xattr_inode_update_ref(handle, ea_inode, -1);
   1051}
   1052
   1053static int ext4_xattr_inode_inc_ref_all(handle_t *handle, struct inode *parent,
   1054					struct ext4_xattr_entry *first)
   1055{
   1056	struct inode *ea_inode;
   1057	struct ext4_xattr_entry *entry;
   1058	struct ext4_xattr_entry *failed_entry;
   1059	unsigned int ea_ino;
   1060	int err, saved_err;
   1061
   1062	for (entry = first; !IS_LAST_ENTRY(entry);
   1063	     entry = EXT4_XATTR_NEXT(entry)) {
   1064		if (!entry->e_value_inum)
   1065			continue;
   1066		ea_ino = le32_to_cpu(entry->e_value_inum);
   1067		err = ext4_xattr_inode_iget(parent, ea_ino,
   1068					    le32_to_cpu(entry->e_hash),
   1069					    &ea_inode);
   1070		if (err)
   1071			goto cleanup;
   1072		err = ext4_xattr_inode_inc_ref(handle, ea_inode);
   1073		if (err) {
   1074			ext4_warning_inode(ea_inode, "inc ref error %d", err);
   1075			iput(ea_inode);
   1076			goto cleanup;
   1077		}
   1078		iput(ea_inode);
   1079	}
   1080	return 0;
   1081
   1082cleanup:
   1083	saved_err = err;
   1084	failed_entry = entry;
   1085
   1086	for (entry = first; entry != failed_entry;
   1087	     entry = EXT4_XATTR_NEXT(entry)) {
   1088		if (!entry->e_value_inum)
   1089			continue;
   1090		ea_ino = le32_to_cpu(entry->e_value_inum);
   1091		err = ext4_xattr_inode_iget(parent, ea_ino,
   1092					    le32_to_cpu(entry->e_hash),
   1093					    &ea_inode);
   1094		if (err) {
   1095			ext4_warning(parent->i_sb,
   1096				     "cleanup ea_ino %u iget error %d", ea_ino,
   1097				     err);
   1098			continue;
   1099		}
   1100		err = ext4_xattr_inode_dec_ref(handle, ea_inode);
   1101		if (err)
   1102			ext4_warning_inode(ea_inode, "cleanup dec ref error %d",
   1103					   err);
   1104		iput(ea_inode);
   1105	}
   1106	return saved_err;
   1107}
   1108
   1109static int ext4_xattr_restart_fn(handle_t *handle, struct inode *inode,
   1110			struct buffer_head *bh, bool block_csum, bool dirty)
   1111{
   1112	int error;
   1113
   1114	if (bh && dirty) {
   1115		if (block_csum)
   1116			ext4_xattr_block_csum_set(inode, bh);
   1117		error = ext4_handle_dirty_metadata(handle, NULL, bh);
   1118		if (error) {
   1119			ext4_warning(inode->i_sb, "Handle metadata (error %d)",
   1120				     error);
   1121			return error;
   1122		}
   1123	}
   1124	return 0;
   1125}
   1126
   1127static void
   1128ext4_xattr_inode_dec_ref_all(handle_t *handle, struct inode *parent,
   1129			     struct buffer_head *bh,
   1130			     struct ext4_xattr_entry *first, bool block_csum,
   1131			     struct ext4_xattr_inode_array **ea_inode_array,
   1132			     int extra_credits, bool skip_quota)
   1133{
   1134	struct inode *ea_inode;
   1135	struct ext4_xattr_entry *entry;
   1136	bool dirty = false;
   1137	unsigned int ea_ino;
   1138	int err;
   1139	int credits;
   1140
   1141	/* One credit for dec ref on ea_inode, one for orphan list addition, */
   1142	credits = 2 + extra_credits;
   1143
   1144	for (entry = first; !IS_LAST_ENTRY(entry);
   1145	     entry = EXT4_XATTR_NEXT(entry)) {
   1146		if (!entry->e_value_inum)
   1147			continue;
   1148		ea_ino = le32_to_cpu(entry->e_value_inum);
   1149		err = ext4_xattr_inode_iget(parent, ea_ino,
   1150					    le32_to_cpu(entry->e_hash),
   1151					    &ea_inode);
   1152		if (err)
   1153			continue;
   1154
   1155		err = ext4_expand_inode_array(ea_inode_array, ea_inode);
   1156		if (err) {
   1157			ext4_warning_inode(ea_inode,
   1158					   "Expand inode array err=%d", err);
   1159			iput(ea_inode);
   1160			continue;
   1161		}
   1162
   1163		err = ext4_journal_ensure_credits_fn(handle, credits, credits,
   1164			ext4_free_metadata_revoke_credits(parent->i_sb, 1),
   1165			ext4_xattr_restart_fn(handle, parent, bh, block_csum,
   1166					      dirty));
   1167		if (err < 0) {
   1168			ext4_warning_inode(ea_inode, "Ensure credits err=%d",
   1169					   err);
   1170			continue;
   1171		}
   1172		if (err > 0) {
   1173			err = ext4_journal_get_write_access(handle,
   1174					parent->i_sb, bh, EXT4_JTR_NONE);
   1175			if (err) {
   1176				ext4_warning_inode(ea_inode,
   1177						"Re-get write access err=%d",
   1178						err);
   1179				continue;
   1180			}
   1181		}
   1182
   1183		err = ext4_xattr_inode_dec_ref(handle, ea_inode);
   1184		if (err) {
   1185			ext4_warning_inode(ea_inode, "ea_inode dec ref err=%d",
   1186					   err);
   1187			continue;
   1188		}
   1189
   1190		if (!skip_quota)
   1191			ext4_xattr_inode_free_quota(parent, ea_inode,
   1192					      le32_to_cpu(entry->e_value_size));
   1193
   1194		/*
   1195		 * Forget about ea_inode within the same transaction that
   1196		 * decrements the ref count. This avoids duplicate decrements in
   1197		 * case the rest of the work spills over to subsequent
   1198		 * transactions.
   1199		 */
   1200		entry->e_value_inum = 0;
   1201		entry->e_value_size = 0;
   1202
   1203		dirty = true;
   1204	}
   1205
   1206	if (dirty) {
   1207		/*
   1208		 * Note that we are deliberately skipping csum calculation for
   1209		 * the final update because we do not expect any journal
   1210		 * restarts until xattr block is freed.
   1211		 */
   1212
   1213		err = ext4_handle_dirty_metadata(handle, NULL, bh);
   1214		if (err)
   1215			ext4_warning_inode(parent,
   1216					   "handle dirty metadata err=%d", err);
   1217	}
   1218}
   1219
   1220/*
   1221 * Release the xattr block BH: If the reference count is > 1, decrement it;
   1222 * otherwise free the block.
   1223 */
   1224static void
   1225ext4_xattr_release_block(handle_t *handle, struct inode *inode,
   1226			 struct buffer_head *bh,
   1227			 struct ext4_xattr_inode_array **ea_inode_array,
   1228			 int extra_credits)
   1229{
   1230	struct mb_cache *ea_block_cache = EA_BLOCK_CACHE(inode);
   1231	u32 hash, ref;
   1232	int error = 0;
   1233
   1234	BUFFER_TRACE(bh, "get_write_access");
   1235	error = ext4_journal_get_write_access(handle, inode->i_sb, bh,
   1236					      EXT4_JTR_NONE);
   1237	if (error)
   1238		goto out;
   1239
   1240	lock_buffer(bh);
   1241	hash = le32_to_cpu(BHDR(bh)->h_hash);
   1242	ref = le32_to_cpu(BHDR(bh)->h_refcount);
   1243	if (ref == 1) {
   1244		ea_bdebug(bh, "refcount now=0; freeing");
   1245		/*
   1246		 * This must happen under buffer lock for
   1247		 * ext4_xattr_block_set() to reliably detect freed block
   1248		 */
   1249		if (ea_block_cache)
   1250			mb_cache_entry_delete(ea_block_cache, hash,
   1251					      bh->b_blocknr);
   1252		get_bh(bh);
   1253		unlock_buffer(bh);
   1254
   1255		if (ext4_has_feature_ea_inode(inode->i_sb))
   1256			ext4_xattr_inode_dec_ref_all(handle, inode, bh,
   1257						     BFIRST(bh),
   1258						     true /* block_csum */,
   1259						     ea_inode_array,
   1260						     extra_credits,
   1261						     true /* skip_quota */);
   1262		ext4_free_blocks(handle, inode, bh, 0, 1,
   1263				 EXT4_FREE_BLOCKS_METADATA |
   1264				 EXT4_FREE_BLOCKS_FORGET);
   1265	} else {
   1266		ref--;
   1267		BHDR(bh)->h_refcount = cpu_to_le32(ref);
   1268		if (ref == EXT4_XATTR_REFCOUNT_MAX - 1) {
   1269			struct mb_cache_entry *ce;
   1270
   1271			if (ea_block_cache) {
   1272				ce = mb_cache_entry_get(ea_block_cache, hash,
   1273							bh->b_blocknr);
   1274				if (ce) {
   1275					ce->e_reusable = 1;
   1276					mb_cache_entry_put(ea_block_cache, ce);
   1277				}
   1278			}
   1279		}
   1280
   1281		ext4_xattr_block_csum_set(inode, bh);
   1282		/*
   1283		 * Beware of this ugliness: Releasing of xattr block references
   1284		 * from different inodes can race and so we have to protect
   1285		 * from a race where someone else frees the block (and releases
   1286		 * its journal_head) before we are done dirtying the buffer. In
   1287		 * nojournal mode this race is harmless and we actually cannot
   1288		 * call ext4_handle_dirty_metadata() with locked buffer as
   1289		 * that function can call sync_dirty_buffer() so for that case
   1290		 * we handle the dirtying after unlocking the buffer.
   1291		 */
   1292		if (ext4_handle_valid(handle))
   1293			error = ext4_handle_dirty_metadata(handle, inode, bh);
   1294		unlock_buffer(bh);
   1295		if (!ext4_handle_valid(handle))
   1296			error = ext4_handle_dirty_metadata(handle, inode, bh);
   1297		if (IS_SYNC(inode))
   1298			ext4_handle_sync(handle);
   1299		dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1));
   1300		ea_bdebug(bh, "refcount now=%d; releasing",
   1301			  le32_to_cpu(BHDR(bh)->h_refcount));
   1302	}
   1303out:
   1304	ext4_std_error(inode->i_sb, error);
   1305	return;
   1306}
   1307
   1308/*
   1309 * Find the available free space for EAs. This also returns the total number of
   1310 * bytes used by EA entries.
   1311 */
   1312static size_t ext4_xattr_free_space(struct ext4_xattr_entry *last,
   1313				    size_t *min_offs, void *base, int *total)
   1314{
   1315	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
   1316		if (!last->e_value_inum && last->e_value_size) {
   1317			size_t offs = le16_to_cpu(last->e_value_offs);
   1318			if (offs < *min_offs)
   1319				*min_offs = offs;
   1320		}
   1321		if (total)
   1322			*total += EXT4_XATTR_LEN(last->e_name_len);
   1323	}
   1324	return (*min_offs - ((void *)last - base) - sizeof(__u32));
   1325}
   1326
   1327/*
   1328 * Write the value of the EA in an inode.
   1329 */
   1330static int ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode,
   1331				  const void *buf, int bufsize)
   1332{
   1333	struct buffer_head *bh = NULL;
   1334	unsigned long block = 0;
   1335	int blocksize = ea_inode->i_sb->s_blocksize;
   1336	int max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits;
   1337	int csize, wsize = 0;
   1338	int ret = 0, ret2 = 0;
   1339	int retries = 0;
   1340
   1341retry:
   1342	while (ret >= 0 && ret < max_blocks) {
   1343		struct ext4_map_blocks map;
   1344		map.m_lblk = block += ret;
   1345		map.m_len = max_blocks -= ret;
   1346
   1347		ret = ext4_map_blocks(handle, ea_inode, &map,
   1348				      EXT4_GET_BLOCKS_CREATE);
   1349		if (ret <= 0) {
   1350			ext4_mark_inode_dirty(handle, ea_inode);
   1351			if (ret == -ENOSPC &&
   1352			    ext4_should_retry_alloc(ea_inode->i_sb, &retries)) {
   1353				ret = 0;
   1354				goto retry;
   1355			}
   1356			break;
   1357		}
   1358	}
   1359
   1360	if (ret < 0)
   1361		return ret;
   1362
   1363	block = 0;
   1364	while (wsize < bufsize) {
   1365		brelse(bh);
   1366		csize = (bufsize - wsize) > blocksize ? blocksize :
   1367								bufsize - wsize;
   1368		bh = ext4_getblk(handle, ea_inode, block, 0);
   1369		if (IS_ERR(bh))
   1370			return PTR_ERR(bh);
   1371		if (!bh) {
   1372			WARN_ON_ONCE(1);
   1373			EXT4_ERROR_INODE(ea_inode,
   1374					 "ext4_getblk() return bh = NULL");
   1375			return -EFSCORRUPTED;
   1376		}
   1377		ret = ext4_journal_get_write_access(handle, ea_inode->i_sb, bh,
   1378						   EXT4_JTR_NONE);
   1379		if (ret)
   1380			goto out;
   1381
   1382		memcpy(bh->b_data, buf, csize);
   1383		set_buffer_uptodate(bh);
   1384		ext4_handle_dirty_metadata(handle, ea_inode, bh);
   1385
   1386		buf += csize;
   1387		wsize += csize;
   1388		block += 1;
   1389	}
   1390
   1391	inode_lock(ea_inode);
   1392	i_size_write(ea_inode, wsize);
   1393	ext4_update_i_disksize(ea_inode, wsize);
   1394	inode_unlock(ea_inode);
   1395
   1396	ret2 = ext4_mark_inode_dirty(handle, ea_inode);
   1397	if (unlikely(ret2 && !ret))
   1398		ret = ret2;
   1399
   1400out:
   1401	brelse(bh);
   1402
   1403	return ret;
   1404}
   1405
   1406/*
   1407 * Create an inode to store the value of a large EA.
   1408 */
   1409static struct inode *ext4_xattr_inode_create(handle_t *handle,
   1410					     struct inode *inode, u32 hash)
   1411{
   1412	struct inode *ea_inode = NULL;
   1413	uid_t owner[2] = { i_uid_read(inode), i_gid_read(inode) };
   1414	int err;
   1415
   1416	/*
   1417	 * Let the next inode be the goal, so we try and allocate the EA inode
   1418	 * in the same group, or nearby one.
   1419	 */
   1420	ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode,
   1421				  S_IFREG | 0600, NULL, inode->i_ino + 1, owner,
   1422				  EXT4_EA_INODE_FL);
   1423	if (!IS_ERR(ea_inode)) {
   1424		ea_inode->i_op = &ext4_file_inode_operations;
   1425		ea_inode->i_fop = &ext4_file_operations;
   1426		ext4_set_aops(ea_inode);
   1427		ext4_xattr_inode_set_class(ea_inode);
   1428		unlock_new_inode(ea_inode);
   1429		ext4_xattr_inode_set_ref(ea_inode, 1);
   1430		ext4_xattr_inode_set_hash(ea_inode, hash);
   1431		err = ext4_mark_inode_dirty(handle, ea_inode);
   1432		if (!err)
   1433			err = ext4_inode_attach_jinode(ea_inode);
   1434		if (err) {
   1435			iput(ea_inode);
   1436			return ERR_PTR(err);
   1437		}
   1438
   1439		/*
   1440		 * Xattr inodes are shared therefore quota charging is performed
   1441		 * at a higher level.
   1442		 */
   1443		dquot_free_inode(ea_inode);
   1444		dquot_drop(ea_inode);
   1445		inode_lock(ea_inode);
   1446		ea_inode->i_flags |= S_NOQUOTA;
   1447		inode_unlock(ea_inode);
   1448	}
   1449
   1450	return ea_inode;
   1451}
   1452
   1453static struct inode *
   1454ext4_xattr_inode_cache_find(struct inode *inode, const void *value,
   1455			    size_t value_len, u32 hash)
   1456{
   1457	struct inode *ea_inode;
   1458	struct mb_cache_entry *ce;
   1459	struct mb_cache *ea_inode_cache = EA_INODE_CACHE(inode);
   1460	void *ea_data;
   1461
   1462	if (!ea_inode_cache)
   1463		return NULL;
   1464
   1465	ce = mb_cache_entry_find_first(ea_inode_cache, hash);
   1466	if (!ce)
   1467		return NULL;
   1468
   1469	WARN_ON_ONCE(ext4_handle_valid(journal_current_handle()) &&
   1470		     !(current->flags & PF_MEMALLOC_NOFS));
   1471
   1472	ea_data = kvmalloc(value_len, GFP_KERNEL);
   1473	if (!ea_data) {
   1474		mb_cache_entry_put(ea_inode_cache, ce);
   1475		return NULL;
   1476	}
   1477
   1478	while (ce) {
   1479		ea_inode = ext4_iget(inode->i_sb, ce->e_value,
   1480				     EXT4_IGET_NORMAL);
   1481		if (!IS_ERR(ea_inode) &&
   1482		    !is_bad_inode(ea_inode) &&
   1483		    (EXT4_I(ea_inode)->i_flags & EXT4_EA_INODE_FL) &&
   1484		    i_size_read(ea_inode) == value_len &&
   1485		    !ext4_xattr_inode_read(ea_inode, ea_data, value_len) &&
   1486		    !ext4_xattr_inode_verify_hashes(ea_inode, NULL, ea_data,
   1487						    value_len) &&
   1488		    !memcmp(value, ea_data, value_len)) {
   1489			mb_cache_entry_touch(ea_inode_cache, ce);
   1490			mb_cache_entry_put(ea_inode_cache, ce);
   1491			kvfree(ea_data);
   1492			return ea_inode;
   1493		}
   1494
   1495		if (!IS_ERR(ea_inode))
   1496			iput(ea_inode);
   1497		ce = mb_cache_entry_find_next(ea_inode_cache, ce);
   1498	}
   1499	kvfree(ea_data);
   1500	return NULL;
   1501}
   1502
   1503/*
   1504 * Add value of the EA in an inode.
   1505 */
   1506static int ext4_xattr_inode_lookup_create(handle_t *handle, struct inode *inode,
   1507					  const void *value, size_t value_len,
   1508					  struct inode **ret_inode)
   1509{
   1510	struct inode *ea_inode;
   1511	u32 hash;
   1512	int err;
   1513
   1514	hash = ext4_xattr_inode_hash(EXT4_SB(inode->i_sb), value, value_len);
   1515	ea_inode = ext4_xattr_inode_cache_find(inode, value, value_len, hash);
   1516	if (ea_inode) {
   1517		err = ext4_xattr_inode_inc_ref(handle, ea_inode);
   1518		if (err) {
   1519			iput(ea_inode);
   1520			return err;
   1521		}
   1522
   1523		*ret_inode = ea_inode;
   1524		return 0;
   1525	}
   1526
   1527	/* Create an inode for the EA value */
   1528	ea_inode = ext4_xattr_inode_create(handle, inode, hash);
   1529	if (IS_ERR(ea_inode))
   1530		return PTR_ERR(ea_inode);
   1531
   1532	err = ext4_xattr_inode_write(handle, ea_inode, value, value_len);
   1533	if (err) {
   1534		ext4_xattr_inode_dec_ref(handle, ea_inode);
   1535		iput(ea_inode);
   1536		return err;
   1537	}
   1538
   1539	if (EA_INODE_CACHE(inode))
   1540		mb_cache_entry_create(EA_INODE_CACHE(inode), GFP_NOFS, hash,
   1541				      ea_inode->i_ino, true /* reusable */);
   1542
   1543	*ret_inode = ea_inode;
   1544	return 0;
   1545}
   1546
   1547/*
   1548 * Reserve min(block_size/8, 1024) bytes for xattr entries/names if ea_inode
   1549 * feature is enabled.
   1550 */
   1551#define EXT4_XATTR_BLOCK_RESERVE(inode)	min(i_blocksize(inode)/8, 1024U)
   1552
   1553static int ext4_xattr_set_entry(struct ext4_xattr_info *i,
   1554				struct ext4_xattr_search *s,
   1555				handle_t *handle, struct inode *inode,
   1556				bool is_block)
   1557{
   1558	struct ext4_xattr_entry *last, *next;
   1559	struct ext4_xattr_entry *here = s->here;
   1560	size_t min_offs = s->end - s->base, name_len = strlen(i->name);
   1561	int in_inode = i->in_inode;
   1562	struct inode *old_ea_inode = NULL;
   1563	struct inode *new_ea_inode = NULL;
   1564	size_t old_size, new_size;
   1565	int ret;
   1566
   1567	/* Space used by old and new values. */
   1568	old_size = (!s->not_found && !here->e_value_inum) ?
   1569			EXT4_XATTR_SIZE(le32_to_cpu(here->e_value_size)) : 0;
   1570	new_size = (i->value && !in_inode) ? EXT4_XATTR_SIZE(i->value_len) : 0;
   1571
   1572	/*
   1573	 * Optimization for the simple case when old and new values have the
   1574	 * same padded sizes. Not applicable if external inodes are involved.
   1575	 */
   1576	if (new_size && new_size == old_size) {
   1577		size_t offs = le16_to_cpu(here->e_value_offs);
   1578		void *val = s->base + offs;
   1579
   1580		here->e_value_size = cpu_to_le32(i->value_len);
   1581		if (i->value == EXT4_ZERO_XATTR_VALUE) {
   1582			memset(val, 0, new_size);
   1583		} else {
   1584			memcpy(val, i->value, i->value_len);
   1585			/* Clear padding bytes. */
   1586			memset(val + i->value_len, 0, new_size - i->value_len);
   1587		}
   1588		goto update_hash;
   1589	}
   1590
   1591	/* Compute min_offs and last. */
   1592	last = s->first;
   1593	for (; !IS_LAST_ENTRY(last); last = next) {
   1594		next = EXT4_XATTR_NEXT(last);
   1595		if ((void *)next >= s->end) {
   1596			EXT4_ERROR_INODE(inode, "corrupted xattr entries");
   1597			ret = -EFSCORRUPTED;
   1598			goto out;
   1599		}
   1600		if (!last->e_value_inum && last->e_value_size) {
   1601			size_t offs = le16_to_cpu(last->e_value_offs);
   1602			if (offs < min_offs)
   1603				min_offs = offs;
   1604		}
   1605	}
   1606
   1607	/* Check whether we have enough space. */
   1608	if (i->value) {
   1609		size_t free;
   1610
   1611		free = min_offs - ((void *)last - s->base) - sizeof(__u32);
   1612		if (!s->not_found)
   1613			free += EXT4_XATTR_LEN(name_len) + old_size;
   1614
   1615		if (free < EXT4_XATTR_LEN(name_len) + new_size) {
   1616			ret = -ENOSPC;
   1617			goto out;
   1618		}
   1619
   1620		/*
   1621		 * If storing the value in an external inode is an option,
   1622		 * reserve space for xattr entries/names in the external
   1623		 * attribute block so that a long value does not occupy the
   1624		 * whole space and prevent further entries being added.
   1625		 */
   1626		if (ext4_has_feature_ea_inode(inode->i_sb) &&
   1627		    new_size && is_block &&
   1628		    (min_offs + old_size - new_size) <
   1629					EXT4_XATTR_BLOCK_RESERVE(inode)) {
   1630			ret = -ENOSPC;
   1631			goto out;
   1632		}
   1633	}
   1634
   1635	/*
   1636	 * Getting access to old and new ea inodes is subject to failures.
   1637	 * Finish that work before doing any modifications to the xattr data.
   1638	 */
   1639	if (!s->not_found && here->e_value_inum) {
   1640		ret = ext4_xattr_inode_iget(inode,
   1641					    le32_to_cpu(here->e_value_inum),
   1642					    le32_to_cpu(here->e_hash),
   1643					    &old_ea_inode);
   1644		if (ret) {
   1645			old_ea_inode = NULL;
   1646			goto out;
   1647		}
   1648	}
   1649	if (i->value && in_inode) {
   1650		WARN_ON_ONCE(!i->value_len);
   1651
   1652		ret = ext4_xattr_inode_alloc_quota(inode, i->value_len);
   1653		if (ret)
   1654			goto out;
   1655
   1656		ret = ext4_xattr_inode_lookup_create(handle, inode, i->value,
   1657						     i->value_len,
   1658						     &new_ea_inode);
   1659		if (ret) {
   1660			new_ea_inode = NULL;
   1661			ext4_xattr_inode_free_quota(inode, NULL, i->value_len);
   1662			goto out;
   1663		}
   1664	}
   1665
   1666	if (old_ea_inode) {
   1667		/* We are ready to release ref count on the old_ea_inode. */
   1668		ret = ext4_xattr_inode_dec_ref(handle, old_ea_inode);
   1669		if (ret) {
   1670			/* Release newly required ref count on new_ea_inode. */
   1671			if (new_ea_inode) {
   1672				int err;
   1673
   1674				err = ext4_xattr_inode_dec_ref(handle,
   1675							       new_ea_inode);
   1676				if (err)
   1677					ext4_warning_inode(new_ea_inode,
   1678						  "dec ref new_ea_inode err=%d",
   1679						  err);
   1680				ext4_xattr_inode_free_quota(inode, new_ea_inode,
   1681							    i->value_len);
   1682			}
   1683			goto out;
   1684		}
   1685
   1686		ext4_xattr_inode_free_quota(inode, old_ea_inode,
   1687					    le32_to_cpu(here->e_value_size));
   1688	}
   1689
   1690	/* No failures allowed past this point. */
   1691
   1692	if (!s->not_found && here->e_value_size && !here->e_value_inum) {
   1693		/* Remove the old value. */
   1694		void *first_val = s->base + min_offs;
   1695		size_t offs = le16_to_cpu(here->e_value_offs);
   1696		void *val = s->base + offs;
   1697
   1698		memmove(first_val + old_size, first_val, val - first_val);
   1699		memset(first_val, 0, old_size);
   1700		min_offs += old_size;
   1701
   1702		/* Adjust all value offsets. */
   1703		last = s->first;
   1704		while (!IS_LAST_ENTRY(last)) {
   1705			size_t o = le16_to_cpu(last->e_value_offs);
   1706
   1707			if (!last->e_value_inum &&
   1708			    last->e_value_size && o < offs)
   1709				last->e_value_offs = cpu_to_le16(o + old_size);
   1710			last = EXT4_XATTR_NEXT(last);
   1711		}
   1712	}
   1713
   1714	if (!i->value) {
   1715		/* Remove old name. */
   1716		size_t size = EXT4_XATTR_LEN(name_len);
   1717
   1718		last = ENTRY((void *)last - size);
   1719		memmove(here, (void *)here + size,
   1720			(void *)last - (void *)here + sizeof(__u32));
   1721		memset(last, 0, size);
   1722	} else if (s->not_found) {
   1723		/* Insert new name. */
   1724		size_t size = EXT4_XATTR_LEN(name_len);
   1725		size_t rest = (void *)last - (void *)here + sizeof(__u32);
   1726
   1727		memmove((void *)here + size, here, rest);
   1728		memset(here, 0, size);
   1729		here->e_name_index = i->name_index;
   1730		here->e_name_len = name_len;
   1731		memcpy(here->e_name, i->name, name_len);
   1732	} else {
   1733		/* This is an update, reset value info. */
   1734		here->e_value_inum = 0;
   1735		here->e_value_offs = 0;
   1736		here->e_value_size = 0;
   1737	}
   1738
   1739	if (i->value) {
   1740		/* Insert new value. */
   1741		if (in_inode) {
   1742			here->e_value_inum = cpu_to_le32(new_ea_inode->i_ino);
   1743		} else if (i->value_len) {
   1744			void *val = s->base + min_offs - new_size;
   1745
   1746			here->e_value_offs = cpu_to_le16(min_offs - new_size);
   1747			if (i->value == EXT4_ZERO_XATTR_VALUE) {
   1748				memset(val, 0, new_size);
   1749			} else {
   1750				memcpy(val, i->value, i->value_len);
   1751				/* Clear padding bytes. */
   1752				memset(val + i->value_len, 0,
   1753				       new_size - i->value_len);
   1754			}
   1755		}
   1756		here->e_value_size = cpu_to_le32(i->value_len);
   1757	}
   1758
   1759update_hash:
   1760	if (i->value) {
   1761		__le32 hash = 0;
   1762
   1763		/* Entry hash calculation. */
   1764		if (in_inode) {
   1765			__le32 crc32c_hash;
   1766
   1767			/*
   1768			 * Feed crc32c hash instead of the raw value for entry
   1769			 * hash calculation. This is to avoid walking
   1770			 * potentially long value buffer again.
   1771			 */
   1772			crc32c_hash = cpu_to_le32(
   1773				       ext4_xattr_inode_get_hash(new_ea_inode));
   1774			hash = ext4_xattr_hash_entry(here->e_name,
   1775						     here->e_name_len,
   1776						     &crc32c_hash, 1);
   1777		} else if (is_block) {
   1778			__le32 *value = s->base + le16_to_cpu(
   1779							here->e_value_offs);
   1780
   1781			hash = ext4_xattr_hash_entry(here->e_name,
   1782						     here->e_name_len, value,
   1783						     new_size >> 2);
   1784		}
   1785		here->e_hash = hash;
   1786	}
   1787
   1788	if (is_block)
   1789		ext4_xattr_rehash((struct ext4_xattr_header *)s->base);
   1790
   1791	ret = 0;
   1792out:
   1793	iput(old_ea_inode);
   1794	iput(new_ea_inode);
   1795	return ret;
   1796}
   1797
   1798struct ext4_xattr_block_find {
   1799	struct ext4_xattr_search s;
   1800	struct buffer_head *bh;
   1801};
   1802
   1803static int
   1804ext4_xattr_block_find(struct inode *inode, struct ext4_xattr_info *i,
   1805		      struct ext4_xattr_block_find *bs)
   1806{
   1807	struct super_block *sb = inode->i_sb;
   1808	int error;
   1809
   1810	ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
   1811		  i->name_index, i->name, i->value, (long)i->value_len);
   1812
   1813	if (EXT4_I(inode)->i_file_acl) {
   1814		/* The inode already has an extended attribute block. */
   1815		bs->bh = ext4_sb_bread(sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
   1816		if (IS_ERR(bs->bh)) {
   1817			error = PTR_ERR(bs->bh);
   1818			bs->bh = NULL;
   1819			return error;
   1820		}
   1821		ea_bdebug(bs->bh, "b_count=%d, refcount=%d",
   1822			atomic_read(&(bs->bh->b_count)),
   1823			le32_to_cpu(BHDR(bs->bh)->h_refcount));
   1824		error = ext4_xattr_check_block(inode, bs->bh);
   1825		if (error)
   1826			return error;
   1827		/* Find the named attribute. */
   1828		bs->s.base = BHDR(bs->bh);
   1829		bs->s.first = BFIRST(bs->bh);
   1830		bs->s.end = bs->bh->b_data + bs->bh->b_size;
   1831		bs->s.here = bs->s.first;
   1832		error = xattr_find_entry(inode, &bs->s.here, bs->s.end,
   1833					 i->name_index, i->name, 1);
   1834		if (error && error != -ENODATA)
   1835			return error;
   1836		bs->s.not_found = error;
   1837	}
   1838	return 0;
   1839}
   1840
   1841static int
   1842ext4_xattr_block_set(handle_t *handle, struct inode *inode,
   1843		     struct ext4_xattr_info *i,
   1844		     struct ext4_xattr_block_find *bs)
   1845{
   1846	struct super_block *sb = inode->i_sb;
   1847	struct buffer_head *new_bh = NULL;
   1848	struct ext4_xattr_search s_copy = bs->s;
   1849	struct ext4_xattr_search *s = &s_copy;
   1850	struct mb_cache_entry *ce = NULL;
   1851	int error = 0;
   1852	struct mb_cache *ea_block_cache = EA_BLOCK_CACHE(inode);
   1853	struct inode *ea_inode = NULL, *tmp_inode;
   1854	size_t old_ea_inode_quota = 0;
   1855	unsigned int ea_ino;
   1856
   1857
   1858#define header(x) ((struct ext4_xattr_header *)(x))
   1859
   1860	if (s->base) {
   1861		BUFFER_TRACE(bs->bh, "get_write_access");
   1862		error = ext4_journal_get_write_access(handle, sb, bs->bh,
   1863						      EXT4_JTR_NONE);
   1864		if (error)
   1865			goto cleanup;
   1866		lock_buffer(bs->bh);
   1867
   1868		if (header(s->base)->h_refcount == cpu_to_le32(1)) {
   1869			__u32 hash = le32_to_cpu(BHDR(bs->bh)->h_hash);
   1870
   1871			/*
   1872			 * This must happen under buffer lock for
   1873			 * ext4_xattr_block_set() to reliably detect modified
   1874			 * block
   1875			 */
   1876			if (ea_block_cache)
   1877				mb_cache_entry_delete(ea_block_cache, hash,
   1878						      bs->bh->b_blocknr);
   1879			ea_bdebug(bs->bh, "modifying in-place");
   1880			error = ext4_xattr_set_entry(i, s, handle, inode,
   1881						     true /* is_block */);
   1882			ext4_xattr_block_csum_set(inode, bs->bh);
   1883			unlock_buffer(bs->bh);
   1884			if (error == -EFSCORRUPTED)
   1885				goto bad_block;
   1886			if (!error)
   1887				error = ext4_handle_dirty_metadata(handle,
   1888								   inode,
   1889								   bs->bh);
   1890			if (error)
   1891				goto cleanup;
   1892			goto inserted;
   1893		} else {
   1894			int offset = (char *)s->here - bs->bh->b_data;
   1895
   1896			unlock_buffer(bs->bh);
   1897			ea_bdebug(bs->bh, "cloning");
   1898			s->base = kmemdup(BHDR(bs->bh), bs->bh->b_size, GFP_NOFS);
   1899			error = -ENOMEM;
   1900			if (s->base == NULL)
   1901				goto cleanup;
   1902			s->first = ENTRY(header(s->base)+1);
   1903			header(s->base)->h_refcount = cpu_to_le32(1);
   1904			s->here = ENTRY(s->base + offset);
   1905			s->end = s->base + bs->bh->b_size;
   1906
   1907			/*
   1908			 * If existing entry points to an xattr inode, we need
   1909			 * to prevent ext4_xattr_set_entry() from decrementing
   1910			 * ref count on it because the reference belongs to the
   1911			 * original block. In this case, make the entry look
   1912			 * like it has an empty value.
   1913			 */
   1914			if (!s->not_found && s->here->e_value_inum) {
   1915				ea_ino = le32_to_cpu(s->here->e_value_inum);
   1916				error = ext4_xattr_inode_iget(inode, ea_ino,
   1917					      le32_to_cpu(s->here->e_hash),
   1918					      &tmp_inode);
   1919				if (error)
   1920					goto cleanup;
   1921
   1922				if (!ext4_test_inode_state(tmp_inode,
   1923						EXT4_STATE_LUSTRE_EA_INODE)) {
   1924					/*
   1925					 * Defer quota free call for previous
   1926					 * inode until success is guaranteed.
   1927					 */
   1928					old_ea_inode_quota = le32_to_cpu(
   1929							s->here->e_value_size);
   1930				}
   1931				iput(tmp_inode);
   1932
   1933				s->here->e_value_inum = 0;
   1934				s->here->e_value_size = 0;
   1935			}
   1936		}
   1937	} else {
   1938		/* Allocate a buffer where we construct the new block. */
   1939		s->base = kzalloc(sb->s_blocksize, GFP_NOFS);
   1940		error = -ENOMEM;
   1941		if (s->base == NULL)
   1942			goto cleanup;
   1943		header(s->base)->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
   1944		header(s->base)->h_blocks = cpu_to_le32(1);
   1945		header(s->base)->h_refcount = cpu_to_le32(1);
   1946		s->first = ENTRY(header(s->base)+1);
   1947		s->here = ENTRY(header(s->base)+1);
   1948		s->end = s->base + sb->s_blocksize;
   1949	}
   1950
   1951	error = ext4_xattr_set_entry(i, s, handle, inode, true /* is_block */);
   1952	if (error == -EFSCORRUPTED)
   1953		goto bad_block;
   1954	if (error)
   1955		goto cleanup;
   1956
   1957	if (i->value && s->here->e_value_inum) {
   1958		/*
   1959		 * A ref count on ea_inode has been taken as part of the call to
   1960		 * ext4_xattr_set_entry() above. We would like to drop this
   1961		 * extra ref but we have to wait until the xattr block is
   1962		 * initialized and has its own ref count on the ea_inode.
   1963		 */
   1964		ea_ino = le32_to_cpu(s->here->e_value_inum);
   1965		error = ext4_xattr_inode_iget(inode, ea_ino,
   1966					      le32_to_cpu(s->here->e_hash),
   1967					      &ea_inode);
   1968		if (error) {
   1969			ea_inode = NULL;
   1970			goto cleanup;
   1971		}
   1972	}
   1973
   1974inserted:
   1975	if (!IS_LAST_ENTRY(s->first)) {
   1976		new_bh = ext4_xattr_block_cache_find(inode, header(s->base),
   1977						     &ce);
   1978		if (new_bh) {
   1979			/* We found an identical block in the cache. */
   1980			if (new_bh == bs->bh)
   1981				ea_bdebug(new_bh, "keeping");
   1982			else {
   1983				u32 ref;
   1984
   1985				WARN_ON_ONCE(dquot_initialize_needed(inode));
   1986
   1987				/* The old block is released after updating
   1988				   the inode. */
   1989				error = dquot_alloc_block(inode,
   1990						EXT4_C2B(EXT4_SB(sb), 1));
   1991				if (error)
   1992					goto cleanup;
   1993				BUFFER_TRACE(new_bh, "get_write_access");
   1994				error = ext4_journal_get_write_access(
   1995						handle, sb, new_bh,
   1996						EXT4_JTR_NONE);
   1997				if (error)
   1998					goto cleanup_dquot;
   1999				lock_buffer(new_bh);
   2000				/*
   2001				 * We have to be careful about races with
   2002				 * freeing, rehashing or adding references to
   2003				 * xattr block. Once we hold buffer lock xattr
   2004				 * block's state is stable so we can check
   2005				 * whether the block got freed / rehashed or
   2006				 * not.  Since we unhash mbcache entry under
   2007				 * buffer lock when freeing / rehashing xattr
   2008				 * block, checking whether entry is still
   2009				 * hashed is reliable. Same rules hold for
   2010				 * e_reusable handling.
   2011				 */
   2012				if (hlist_bl_unhashed(&ce->e_hash_list) ||
   2013				    !ce->e_reusable) {
   2014					/*
   2015					 * Undo everything and check mbcache
   2016					 * again.
   2017					 */
   2018					unlock_buffer(new_bh);
   2019					dquot_free_block(inode,
   2020							 EXT4_C2B(EXT4_SB(sb),
   2021								  1));
   2022					brelse(new_bh);
   2023					mb_cache_entry_put(ea_block_cache, ce);
   2024					ce = NULL;
   2025					new_bh = NULL;
   2026					goto inserted;
   2027				}
   2028				ref = le32_to_cpu(BHDR(new_bh)->h_refcount) + 1;
   2029				BHDR(new_bh)->h_refcount = cpu_to_le32(ref);
   2030				if (ref >= EXT4_XATTR_REFCOUNT_MAX)
   2031					ce->e_reusable = 0;
   2032				ea_bdebug(new_bh, "reusing; refcount now=%d",
   2033					  ref);
   2034				ext4_xattr_block_csum_set(inode, new_bh);
   2035				unlock_buffer(new_bh);
   2036				error = ext4_handle_dirty_metadata(handle,
   2037								   inode,
   2038								   new_bh);
   2039				if (error)
   2040					goto cleanup_dquot;
   2041			}
   2042			mb_cache_entry_touch(ea_block_cache, ce);
   2043			mb_cache_entry_put(ea_block_cache, ce);
   2044			ce = NULL;
   2045		} else if (bs->bh && s->base == bs->bh->b_data) {
   2046			/* We were modifying this block in-place. */
   2047			ea_bdebug(bs->bh, "keeping this block");
   2048			ext4_xattr_block_cache_insert(ea_block_cache, bs->bh);
   2049			new_bh = bs->bh;
   2050			get_bh(new_bh);
   2051		} else {
   2052			/* We need to allocate a new block */
   2053			ext4_fsblk_t goal, block;
   2054
   2055			WARN_ON_ONCE(dquot_initialize_needed(inode));
   2056
   2057			goal = ext4_group_first_block_no(sb,
   2058						EXT4_I(inode)->i_block_group);
   2059
   2060			/* non-extent files can't have physical blocks past 2^32 */
   2061			if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
   2062				goal = goal & EXT4_MAX_BLOCK_FILE_PHYS;
   2063
   2064			block = ext4_new_meta_blocks(handle, inode, goal, 0,
   2065						     NULL, &error);
   2066			if (error)
   2067				goto cleanup;
   2068
   2069			if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
   2070				BUG_ON(block > EXT4_MAX_BLOCK_FILE_PHYS);
   2071
   2072			ea_idebug(inode, "creating block %llu",
   2073				  (unsigned long long)block);
   2074
   2075			new_bh = sb_getblk(sb, block);
   2076			if (unlikely(!new_bh)) {
   2077				error = -ENOMEM;
   2078getblk_failed:
   2079				ext4_free_blocks(handle, inode, NULL, block, 1,
   2080						 EXT4_FREE_BLOCKS_METADATA);
   2081				goto cleanup;
   2082			}
   2083			error = ext4_xattr_inode_inc_ref_all(handle, inode,
   2084						      ENTRY(header(s->base)+1));
   2085			if (error)
   2086				goto getblk_failed;
   2087			if (ea_inode) {
   2088				/* Drop the extra ref on ea_inode. */
   2089				error = ext4_xattr_inode_dec_ref(handle,
   2090								 ea_inode);
   2091				if (error)
   2092					ext4_warning_inode(ea_inode,
   2093							   "dec ref error=%d",
   2094							   error);
   2095				iput(ea_inode);
   2096				ea_inode = NULL;
   2097			}
   2098
   2099			lock_buffer(new_bh);
   2100			error = ext4_journal_get_create_access(handle, sb,
   2101							new_bh, EXT4_JTR_NONE);
   2102			if (error) {
   2103				unlock_buffer(new_bh);
   2104				error = -EIO;
   2105				goto getblk_failed;
   2106			}
   2107			memcpy(new_bh->b_data, s->base, new_bh->b_size);
   2108			ext4_xattr_block_csum_set(inode, new_bh);
   2109			set_buffer_uptodate(new_bh);
   2110			unlock_buffer(new_bh);
   2111			ext4_xattr_block_cache_insert(ea_block_cache, new_bh);
   2112			error = ext4_handle_dirty_metadata(handle, inode,
   2113							   new_bh);
   2114			if (error)
   2115				goto cleanup;
   2116		}
   2117	}
   2118
   2119	if (old_ea_inode_quota)
   2120		ext4_xattr_inode_free_quota(inode, NULL, old_ea_inode_quota);
   2121
   2122	/* Update the inode. */
   2123	EXT4_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
   2124
   2125	/* Drop the previous xattr block. */
   2126	if (bs->bh && bs->bh != new_bh) {
   2127		struct ext4_xattr_inode_array *ea_inode_array = NULL;
   2128
   2129		ext4_xattr_release_block(handle, inode, bs->bh,
   2130					 &ea_inode_array,
   2131					 0 /* extra_credits */);
   2132		ext4_xattr_inode_array_free(ea_inode_array);
   2133	}
   2134	error = 0;
   2135
   2136cleanup:
   2137	if (ea_inode) {
   2138		int error2;
   2139
   2140		error2 = ext4_xattr_inode_dec_ref(handle, ea_inode);
   2141		if (error2)
   2142			ext4_warning_inode(ea_inode, "dec ref error=%d",
   2143					   error2);
   2144
   2145		/* If there was an error, revert the quota charge. */
   2146		if (error)
   2147			ext4_xattr_inode_free_quota(inode, ea_inode,
   2148						    i_size_read(ea_inode));
   2149		iput(ea_inode);
   2150	}
   2151	if (ce)
   2152		mb_cache_entry_put(ea_block_cache, ce);
   2153	brelse(new_bh);
   2154	if (!(bs->bh && s->base == bs->bh->b_data))
   2155		kfree(s->base);
   2156
   2157	return error;
   2158
   2159cleanup_dquot:
   2160	dquot_free_block(inode, EXT4_C2B(EXT4_SB(sb), 1));
   2161	goto cleanup;
   2162
   2163bad_block:
   2164	EXT4_ERROR_INODE(inode, "bad block %llu",
   2165			 EXT4_I(inode)->i_file_acl);
   2166	goto cleanup;
   2167
   2168#undef header
   2169}
   2170
   2171int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
   2172			  struct ext4_xattr_ibody_find *is)
   2173{
   2174	struct ext4_xattr_ibody_header *header;
   2175	struct ext4_inode *raw_inode;
   2176	int error;
   2177
   2178	if (EXT4_I(inode)->i_extra_isize == 0)
   2179		return 0;
   2180	raw_inode = ext4_raw_inode(&is->iloc);
   2181	header = IHDR(inode, raw_inode);
   2182	is->s.base = is->s.first = IFIRST(header);
   2183	is->s.here = is->s.first;
   2184	is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
   2185	if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
   2186		error = xattr_check_inode(inode, header, is->s.end);
   2187		if (error)
   2188			return error;
   2189		/* Find the named attribute. */
   2190		error = xattr_find_entry(inode, &is->s.here, is->s.end,
   2191					 i->name_index, i->name, 0);
   2192		if (error && error != -ENODATA)
   2193			return error;
   2194		is->s.not_found = error;
   2195	}
   2196	return 0;
   2197}
   2198
   2199int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
   2200				struct ext4_xattr_info *i,
   2201				struct ext4_xattr_ibody_find *is)
   2202{
   2203	struct ext4_xattr_ibody_header *header;
   2204	struct ext4_xattr_search *s = &is->s;
   2205	int error;
   2206
   2207	if (EXT4_I(inode)->i_extra_isize == 0)
   2208		return -ENOSPC;
   2209	error = ext4_xattr_set_entry(i, s, handle, inode, false /* is_block */);
   2210	if (error)
   2211		return error;
   2212	header = IHDR(inode, ext4_raw_inode(&is->iloc));
   2213	if (!IS_LAST_ENTRY(s->first)) {
   2214		header->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
   2215		ext4_set_inode_state(inode, EXT4_STATE_XATTR);
   2216	} else {
   2217		header->h_magic = cpu_to_le32(0);
   2218		ext4_clear_inode_state(inode, EXT4_STATE_XATTR);
   2219	}
   2220	return 0;
   2221}
   2222
   2223static int ext4_xattr_value_same(struct ext4_xattr_search *s,
   2224				 struct ext4_xattr_info *i)
   2225{
   2226	void *value;
   2227
   2228	/* When e_value_inum is set the value is stored externally. */
   2229	if (s->here->e_value_inum)
   2230		return 0;
   2231	if (le32_to_cpu(s->here->e_value_size) != i->value_len)
   2232		return 0;
   2233	value = ((void *)s->base) + le16_to_cpu(s->here->e_value_offs);
   2234	return !memcmp(value, i->value, i->value_len);
   2235}
   2236
   2237static struct buffer_head *ext4_xattr_get_block(struct inode *inode)
   2238{
   2239	struct buffer_head *bh;
   2240	int error;
   2241
   2242	if (!EXT4_I(inode)->i_file_acl)
   2243		return NULL;
   2244	bh = ext4_sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
   2245	if (IS_ERR(bh))
   2246		return bh;
   2247	error = ext4_xattr_check_block(inode, bh);
   2248	if (error) {
   2249		brelse(bh);
   2250		return ERR_PTR(error);
   2251	}
   2252	return bh;
   2253}
   2254
   2255/*
   2256 * ext4_xattr_set_handle()
   2257 *
   2258 * Create, replace or remove an extended attribute for this inode.  Value
   2259 * is NULL to remove an existing extended attribute, and non-NULL to
   2260 * either replace an existing extended attribute, or create a new extended
   2261 * attribute. The flags XATTR_REPLACE and XATTR_CREATE
   2262 * specify that an extended attribute must exist and must not exist
   2263 * previous to the call, respectively.
   2264 *
   2265 * Returns 0, or a negative error number on failure.
   2266 */
   2267int
   2268ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
   2269		      const char *name, const void *value, size_t value_len,
   2270		      int flags)
   2271{
   2272	struct ext4_xattr_info i = {
   2273		.name_index = name_index,
   2274		.name = name,
   2275		.value = value,
   2276		.value_len = value_len,
   2277		.in_inode = 0,
   2278	};
   2279	struct ext4_xattr_ibody_find is = {
   2280		.s = { .not_found = -ENODATA, },
   2281	};
   2282	struct ext4_xattr_block_find bs = {
   2283		.s = { .not_found = -ENODATA, },
   2284	};
   2285	int no_expand;
   2286	int error;
   2287
   2288	if (!name)
   2289		return -EINVAL;
   2290	if (strlen(name) > 255)
   2291		return -ERANGE;
   2292
   2293	ext4_write_lock_xattr(inode, &no_expand);
   2294
   2295	/* Check journal credits under write lock. */
   2296	if (ext4_handle_valid(handle)) {
   2297		struct buffer_head *bh;
   2298		int credits;
   2299
   2300		bh = ext4_xattr_get_block(inode);
   2301		if (IS_ERR(bh)) {
   2302			error = PTR_ERR(bh);
   2303			goto cleanup;
   2304		}
   2305
   2306		credits = __ext4_xattr_set_credits(inode->i_sb, inode, bh,
   2307						   value_len,
   2308						   flags & XATTR_CREATE);
   2309		brelse(bh);
   2310
   2311		if (jbd2_handle_buffer_credits(handle) < credits) {
   2312			error = -ENOSPC;
   2313			goto cleanup;
   2314		}
   2315		WARN_ON_ONCE(!(current->flags & PF_MEMALLOC_NOFS));
   2316	}
   2317
   2318	error = ext4_reserve_inode_write(handle, inode, &is.iloc);
   2319	if (error)
   2320		goto cleanup;
   2321
   2322	if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) {
   2323		struct ext4_inode *raw_inode = ext4_raw_inode(&is.iloc);
   2324		memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size);
   2325		ext4_clear_inode_state(inode, EXT4_STATE_NEW);
   2326	}
   2327
   2328	error = ext4_xattr_ibody_find(inode, &i, &is);
   2329	if (error)
   2330		goto cleanup;
   2331	if (is.s.not_found)
   2332		error = ext4_xattr_block_find(inode, &i, &bs);
   2333	if (error)
   2334		goto cleanup;
   2335	if (is.s.not_found && bs.s.not_found) {
   2336		error = -ENODATA;
   2337		if (flags & XATTR_REPLACE)
   2338			goto cleanup;
   2339		error = 0;
   2340		if (!value)
   2341			goto cleanup;
   2342	} else {
   2343		error = -EEXIST;
   2344		if (flags & XATTR_CREATE)
   2345			goto cleanup;
   2346	}
   2347
   2348	if (!value) {
   2349		if (!is.s.not_found)
   2350			error = ext4_xattr_ibody_set(handle, inode, &i, &is);
   2351		else if (!bs.s.not_found)
   2352			error = ext4_xattr_block_set(handle, inode, &i, &bs);
   2353	} else {
   2354		error = 0;
   2355		/* Xattr value did not change? Save us some work and bail out */
   2356		if (!is.s.not_found && ext4_xattr_value_same(&is.s, &i))
   2357			goto cleanup;
   2358		if (!bs.s.not_found && ext4_xattr_value_same(&bs.s, &i))
   2359			goto cleanup;
   2360
   2361		if (ext4_has_feature_ea_inode(inode->i_sb) &&
   2362		    (EXT4_XATTR_SIZE(i.value_len) >
   2363			EXT4_XATTR_MIN_LARGE_EA_SIZE(inode->i_sb->s_blocksize)))
   2364			i.in_inode = 1;
   2365retry_inode:
   2366		error = ext4_xattr_ibody_set(handle, inode, &i, &is);
   2367		if (!error && !bs.s.not_found) {
   2368			i.value = NULL;
   2369			error = ext4_xattr_block_set(handle, inode, &i, &bs);
   2370		} else if (error == -ENOSPC) {
   2371			if (EXT4_I(inode)->i_file_acl && !bs.s.base) {
   2372				brelse(bs.bh);
   2373				bs.bh = NULL;
   2374				error = ext4_xattr_block_find(inode, &i, &bs);
   2375				if (error)
   2376					goto cleanup;
   2377			}
   2378			error = ext4_xattr_block_set(handle, inode, &i, &bs);
   2379			if (!error && !is.s.not_found) {
   2380				i.value = NULL;
   2381				error = ext4_xattr_ibody_set(handle, inode, &i,
   2382							     &is);
   2383			} else if (error == -ENOSPC) {
   2384				/*
   2385				 * Xattr does not fit in the block, store at
   2386				 * external inode if possible.
   2387				 */
   2388				if (ext4_has_feature_ea_inode(inode->i_sb) &&
   2389				    i.value_len && !i.in_inode) {
   2390					i.in_inode = 1;
   2391					goto retry_inode;
   2392				}
   2393			}
   2394		}
   2395	}
   2396	if (!error) {
   2397		ext4_xattr_update_super_block(handle, inode->i_sb);
   2398		inode->i_ctime = current_time(inode);
   2399		if (!value)
   2400			no_expand = 0;
   2401		error = ext4_mark_iloc_dirty(handle, inode, &is.iloc);
   2402		/*
   2403		 * The bh is consumed by ext4_mark_iloc_dirty, even with
   2404		 * error != 0.
   2405		 */
   2406		is.iloc.bh = NULL;
   2407		if (IS_SYNC(inode))
   2408			ext4_handle_sync(handle);
   2409	}
   2410	ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, handle);
   2411
   2412cleanup:
   2413	brelse(is.iloc.bh);
   2414	brelse(bs.bh);
   2415	ext4_write_unlock_xattr(inode, &no_expand);
   2416	return error;
   2417}
   2418
   2419int ext4_xattr_set_credits(struct inode *inode, size_t value_len,
   2420			   bool is_create, int *credits)
   2421{
   2422	struct buffer_head *bh;
   2423	int err;
   2424
   2425	*credits = 0;
   2426
   2427	if (!EXT4_SB(inode->i_sb)->s_journal)
   2428		return 0;
   2429
   2430	down_read(&EXT4_I(inode)->xattr_sem);
   2431
   2432	bh = ext4_xattr_get_block(inode);
   2433	if (IS_ERR(bh)) {
   2434		err = PTR_ERR(bh);
   2435	} else {
   2436		*credits = __ext4_xattr_set_credits(inode->i_sb, inode, bh,
   2437						    value_len, is_create);
   2438		brelse(bh);
   2439		err = 0;
   2440	}
   2441
   2442	up_read(&EXT4_I(inode)->xattr_sem);
   2443	return err;
   2444}
   2445
   2446/*
   2447 * ext4_xattr_set()
   2448 *
   2449 * Like ext4_xattr_set_handle, but start from an inode. This extended
   2450 * attribute modification is a filesystem transaction by itself.
   2451 *
   2452 * Returns 0, or a negative error number on failure.
   2453 */
   2454int
   2455ext4_xattr_set(struct inode *inode, int name_index, const char *name,
   2456	       const void *value, size_t value_len, int flags)
   2457{
   2458	handle_t *handle;
   2459	struct super_block *sb = inode->i_sb;
   2460	int error, retries = 0;
   2461	int credits;
   2462
   2463	error = dquot_initialize(inode);
   2464	if (error)
   2465		return error;
   2466
   2467retry:
   2468	error = ext4_xattr_set_credits(inode, value_len, flags & XATTR_CREATE,
   2469				       &credits);
   2470	if (error)
   2471		return error;
   2472
   2473	handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
   2474	if (IS_ERR(handle)) {
   2475		error = PTR_ERR(handle);
   2476	} else {
   2477		int error2;
   2478
   2479		error = ext4_xattr_set_handle(handle, inode, name_index, name,
   2480					      value, value_len, flags);
   2481		error2 = ext4_journal_stop(handle);
   2482		if (error == -ENOSPC &&
   2483		    ext4_should_retry_alloc(sb, &retries))
   2484			goto retry;
   2485		if (error == 0)
   2486			error = error2;
   2487	}
   2488	ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, NULL);
   2489
   2490	return error;
   2491}
   2492
   2493/*
   2494 * Shift the EA entries in the inode to create space for the increased
   2495 * i_extra_isize.
   2496 */
   2497static void ext4_xattr_shift_entries(struct ext4_xattr_entry *entry,
   2498				     int value_offs_shift, void *to,
   2499				     void *from, size_t n)
   2500{
   2501	struct ext4_xattr_entry *last = entry;
   2502	int new_offs;
   2503
   2504	/* We always shift xattr headers further thus offsets get lower */
   2505	BUG_ON(value_offs_shift > 0);
   2506
   2507	/* Adjust the value offsets of the entries */
   2508	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
   2509		if (!last->e_value_inum && last->e_value_size) {
   2510			new_offs = le16_to_cpu(last->e_value_offs) +
   2511							value_offs_shift;
   2512			last->e_value_offs = cpu_to_le16(new_offs);
   2513		}
   2514	}
   2515	/* Shift the entries by n bytes */
   2516	memmove(to, from, n);
   2517}
   2518
   2519/*
   2520 * Move xattr pointed to by 'entry' from inode into external xattr block
   2521 */
   2522static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
   2523				    struct ext4_inode *raw_inode,
   2524				    struct ext4_xattr_entry *entry)
   2525{
   2526	struct ext4_xattr_ibody_find *is = NULL;
   2527	struct ext4_xattr_block_find *bs = NULL;
   2528	char *buffer = NULL, *b_entry_name = NULL;
   2529	size_t value_size = le32_to_cpu(entry->e_value_size);
   2530	struct ext4_xattr_info i = {
   2531		.value = NULL,
   2532		.value_len = 0,
   2533		.name_index = entry->e_name_index,
   2534		.in_inode = !!entry->e_value_inum,
   2535	};
   2536	struct ext4_xattr_ibody_header *header = IHDR(inode, raw_inode);
   2537	int error;
   2538
   2539	is = kzalloc(sizeof(struct ext4_xattr_ibody_find), GFP_NOFS);
   2540	bs = kzalloc(sizeof(struct ext4_xattr_block_find), GFP_NOFS);
   2541	buffer = kmalloc(value_size, GFP_NOFS);
   2542	b_entry_name = kmalloc(entry->e_name_len + 1, GFP_NOFS);
   2543	if (!is || !bs || !buffer || !b_entry_name) {
   2544		error = -ENOMEM;
   2545		goto out;
   2546	}
   2547
   2548	is->s.not_found = -ENODATA;
   2549	bs->s.not_found = -ENODATA;
   2550	is->iloc.bh = NULL;
   2551	bs->bh = NULL;
   2552
   2553	/* Save the entry name and the entry value */
   2554	if (entry->e_value_inum) {
   2555		error = ext4_xattr_inode_get(inode, entry, buffer, value_size);
   2556		if (error)
   2557			goto out;
   2558	} else {
   2559		size_t value_offs = le16_to_cpu(entry->e_value_offs);
   2560		memcpy(buffer, (void *)IFIRST(header) + value_offs, value_size);
   2561	}
   2562
   2563	memcpy(b_entry_name, entry->e_name, entry->e_name_len);
   2564	b_entry_name[entry->e_name_len] = '\0';
   2565	i.name = b_entry_name;
   2566
   2567	error = ext4_get_inode_loc(inode, &is->iloc);
   2568	if (error)
   2569		goto out;
   2570
   2571	error = ext4_xattr_ibody_find(inode, &i, is);
   2572	if (error)
   2573		goto out;
   2574
   2575	/* Remove the chosen entry from the inode */
   2576	error = ext4_xattr_ibody_set(handle, inode, &i, is);
   2577	if (error)
   2578		goto out;
   2579
   2580	i.value = buffer;
   2581	i.value_len = value_size;
   2582	error = ext4_xattr_block_find(inode, &i, bs);
   2583	if (error)
   2584		goto out;
   2585
   2586	/* Add entry which was removed from the inode into the block */
   2587	error = ext4_xattr_block_set(handle, inode, &i, bs);
   2588	if (error)
   2589		goto out;
   2590	error = 0;
   2591out:
   2592	kfree(b_entry_name);
   2593	kfree(buffer);
   2594	if (is)
   2595		brelse(is->iloc.bh);
   2596	if (bs)
   2597		brelse(bs->bh);
   2598	kfree(is);
   2599	kfree(bs);
   2600
   2601	return error;
   2602}
   2603
   2604static int ext4_xattr_make_inode_space(handle_t *handle, struct inode *inode,
   2605				       struct ext4_inode *raw_inode,
   2606				       int isize_diff, size_t ifree,
   2607				       size_t bfree, int *total_ino)
   2608{
   2609	struct ext4_xattr_ibody_header *header = IHDR(inode, raw_inode);
   2610	struct ext4_xattr_entry *small_entry;
   2611	struct ext4_xattr_entry *entry;
   2612	struct ext4_xattr_entry *last;
   2613	unsigned int entry_size;	/* EA entry size */
   2614	unsigned int total_size;	/* EA entry size + value size */
   2615	unsigned int min_total_size;
   2616	int error;
   2617
   2618	while (isize_diff > ifree) {
   2619		entry = NULL;
   2620		small_entry = NULL;
   2621		min_total_size = ~0U;
   2622		last = IFIRST(header);
   2623		/* Find the entry best suited to be pushed into EA block */
   2624		for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
   2625			/* never move system.data out of the inode */
   2626			if ((last->e_name_len == 4) &&
   2627			    (last->e_name_index == EXT4_XATTR_INDEX_SYSTEM) &&
   2628			    !memcmp(last->e_name, "data", 4))
   2629				continue;
   2630			total_size = EXT4_XATTR_LEN(last->e_name_len);
   2631			if (!last->e_value_inum)
   2632				total_size += EXT4_XATTR_SIZE(
   2633					       le32_to_cpu(last->e_value_size));
   2634			if (total_size <= bfree &&
   2635			    total_size < min_total_size) {
   2636				if (total_size + ifree < isize_diff) {
   2637					small_entry = last;
   2638				} else {
   2639					entry = last;
   2640					min_total_size = total_size;
   2641				}
   2642			}
   2643		}
   2644
   2645		if (entry == NULL) {
   2646			if (small_entry == NULL)
   2647				return -ENOSPC;
   2648			entry = small_entry;
   2649		}
   2650
   2651		entry_size = EXT4_XATTR_LEN(entry->e_name_len);
   2652		total_size = entry_size;
   2653		if (!entry->e_value_inum)
   2654			total_size += EXT4_XATTR_SIZE(
   2655					      le32_to_cpu(entry->e_value_size));
   2656		error = ext4_xattr_move_to_block(handle, inode, raw_inode,
   2657						 entry);
   2658		if (error)
   2659			return error;
   2660
   2661		*total_ino -= entry_size;
   2662		ifree += total_size;
   2663		bfree -= total_size;
   2664	}
   2665
   2666	return 0;
   2667}
   2668
   2669/*
   2670 * Expand an inode by new_extra_isize bytes when EAs are present.
   2671 * Returns 0 on success or negative error number on failure.
   2672 */
   2673int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
   2674			       struct ext4_inode *raw_inode, handle_t *handle)
   2675{
   2676	struct ext4_xattr_ibody_header *header;
   2677	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
   2678	static unsigned int mnt_count;
   2679	size_t min_offs;
   2680	size_t ifree, bfree;
   2681	int total_ino;
   2682	void *base, *end;
   2683	int error = 0, tried_min_extra_isize = 0;
   2684	int s_min_extra_isize = le16_to_cpu(sbi->s_es->s_min_extra_isize);
   2685	int isize_diff;	/* How much do we need to grow i_extra_isize */
   2686
   2687retry:
   2688	isize_diff = new_extra_isize - EXT4_I(inode)->i_extra_isize;
   2689	if (EXT4_I(inode)->i_extra_isize >= new_extra_isize)
   2690		return 0;
   2691
   2692	header = IHDR(inode, raw_inode);
   2693
   2694	/*
   2695	 * Check if enough free space is available in the inode to shift the
   2696	 * entries ahead by new_extra_isize.
   2697	 */
   2698
   2699	base = IFIRST(header);
   2700	end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
   2701	min_offs = end - base;
   2702	total_ino = sizeof(struct ext4_xattr_ibody_header) + sizeof(u32);
   2703
   2704	error = xattr_check_inode(inode, header, end);
   2705	if (error)
   2706		goto cleanup;
   2707
   2708	ifree = ext4_xattr_free_space(base, &min_offs, base, &total_ino);
   2709	if (ifree >= isize_diff)
   2710		goto shift;
   2711
   2712	/*
   2713	 * Enough free space isn't available in the inode, check if
   2714	 * EA block can hold new_extra_isize bytes.
   2715	 */
   2716	if (EXT4_I(inode)->i_file_acl) {
   2717		struct buffer_head *bh;
   2718
   2719		bh = ext4_sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
   2720		if (IS_ERR(bh)) {
   2721			error = PTR_ERR(bh);
   2722			goto cleanup;
   2723		}
   2724		error = ext4_xattr_check_block(inode, bh);
   2725		if (error) {
   2726			brelse(bh);
   2727			goto cleanup;
   2728		}
   2729		base = BHDR(bh);
   2730		end = bh->b_data + bh->b_size;
   2731		min_offs = end - base;
   2732		bfree = ext4_xattr_free_space(BFIRST(bh), &min_offs, base,
   2733					      NULL);
   2734		brelse(bh);
   2735		if (bfree + ifree < isize_diff) {
   2736			if (!tried_min_extra_isize && s_min_extra_isize) {
   2737				tried_min_extra_isize++;
   2738				new_extra_isize = s_min_extra_isize;
   2739				goto retry;
   2740			}
   2741			error = -ENOSPC;
   2742			goto cleanup;
   2743		}
   2744	} else {
   2745		bfree = inode->i_sb->s_blocksize;
   2746	}
   2747
   2748	error = ext4_xattr_make_inode_space(handle, inode, raw_inode,
   2749					    isize_diff, ifree, bfree,
   2750					    &total_ino);
   2751	if (error) {
   2752		if (error == -ENOSPC && !tried_min_extra_isize &&
   2753		    s_min_extra_isize) {
   2754			tried_min_extra_isize++;
   2755			new_extra_isize = s_min_extra_isize;
   2756			goto retry;
   2757		}
   2758		goto cleanup;
   2759	}
   2760shift:
   2761	/* Adjust the offsets and shift the remaining entries ahead */
   2762	ext4_xattr_shift_entries(IFIRST(header), EXT4_I(inode)->i_extra_isize
   2763			- new_extra_isize, (void *)raw_inode +
   2764			EXT4_GOOD_OLD_INODE_SIZE + new_extra_isize,
   2765			(void *)header, total_ino);
   2766	EXT4_I(inode)->i_extra_isize = new_extra_isize;
   2767
   2768cleanup:
   2769	if (error && (mnt_count != le16_to_cpu(sbi->s_es->s_mnt_count))) {
   2770		ext4_warning(inode->i_sb, "Unable to expand inode %lu. Delete some EAs or run e2fsck.",
   2771			     inode->i_ino);
   2772		mnt_count = le16_to_cpu(sbi->s_es->s_mnt_count);
   2773	}
   2774	return error;
   2775}
   2776
   2777#define EIA_INCR 16 /* must be 2^n */
   2778#define EIA_MASK (EIA_INCR - 1)
   2779
   2780/* Add the large xattr @inode into @ea_inode_array for deferred iput().
   2781 * If @ea_inode_array is new or full it will be grown and the old
   2782 * contents copied over.
   2783 */
   2784static int
   2785ext4_expand_inode_array(struct ext4_xattr_inode_array **ea_inode_array,
   2786			struct inode *inode)
   2787{
   2788	if (*ea_inode_array == NULL) {
   2789		/*
   2790		 * Start with 15 inodes, so it fits into a power-of-two size.
   2791		 * If *ea_inode_array is NULL, this is essentially offsetof()
   2792		 */
   2793		(*ea_inode_array) =
   2794			kmalloc(offsetof(struct ext4_xattr_inode_array,
   2795					 inodes[EIA_MASK]),
   2796				GFP_NOFS);
   2797		if (*ea_inode_array == NULL)
   2798			return -ENOMEM;
   2799		(*ea_inode_array)->count = 0;
   2800	} else if (((*ea_inode_array)->count & EIA_MASK) == EIA_MASK) {
   2801		/* expand the array once all 15 + n * 16 slots are full */
   2802		struct ext4_xattr_inode_array *new_array = NULL;
   2803		int count = (*ea_inode_array)->count;
   2804
   2805		/* if new_array is NULL, this is essentially offsetof() */
   2806		new_array = kmalloc(
   2807				offsetof(struct ext4_xattr_inode_array,
   2808					 inodes[count + EIA_INCR]),
   2809				GFP_NOFS);
   2810		if (new_array == NULL)
   2811			return -ENOMEM;
   2812		memcpy(new_array, *ea_inode_array,
   2813		       offsetof(struct ext4_xattr_inode_array, inodes[count]));
   2814		kfree(*ea_inode_array);
   2815		*ea_inode_array = new_array;
   2816	}
   2817	(*ea_inode_array)->inodes[(*ea_inode_array)->count++] = inode;
   2818	return 0;
   2819}
   2820
   2821/*
   2822 * ext4_xattr_delete_inode()
   2823 *
   2824 * Free extended attribute resources associated with this inode. Traverse
   2825 * all entries and decrement reference on any xattr inodes associated with this
   2826 * inode. This is called immediately before an inode is freed. We have exclusive
   2827 * access to the inode. If an orphan inode is deleted it will also release its
   2828 * references on xattr block and xattr inodes.
   2829 */
   2830int ext4_xattr_delete_inode(handle_t *handle, struct inode *inode,
   2831			    struct ext4_xattr_inode_array **ea_inode_array,
   2832			    int extra_credits)
   2833{
   2834	struct buffer_head *bh = NULL;
   2835	struct ext4_xattr_ibody_header *header;
   2836	struct ext4_iloc iloc = { .bh = NULL };
   2837	struct ext4_xattr_entry *entry;
   2838	struct inode *ea_inode;
   2839	int error;
   2840
   2841	error = ext4_journal_ensure_credits(handle, extra_credits,
   2842			ext4_free_metadata_revoke_credits(inode->i_sb, 1));
   2843	if (error < 0) {
   2844		EXT4_ERROR_INODE(inode, "ensure credits (error %d)", error);
   2845		goto cleanup;
   2846	}
   2847
   2848	if (ext4_has_feature_ea_inode(inode->i_sb) &&
   2849	    ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
   2850
   2851		error = ext4_get_inode_loc(inode, &iloc);
   2852		if (error) {
   2853			EXT4_ERROR_INODE(inode, "inode loc (error %d)", error);
   2854			goto cleanup;
   2855		}
   2856
   2857		error = ext4_journal_get_write_access(handle, inode->i_sb,
   2858						iloc.bh, EXT4_JTR_NONE);
   2859		if (error) {
   2860			EXT4_ERROR_INODE(inode, "write access (error %d)",
   2861					 error);
   2862			goto cleanup;
   2863		}
   2864
   2865		header = IHDR(inode, ext4_raw_inode(&iloc));
   2866		if (header->h_magic == cpu_to_le32(EXT4_XATTR_MAGIC))
   2867			ext4_xattr_inode_dec_ref_all(handle, inode, iloc.bh,
   2868						     IFIRST(header),
   2869						     false /* block_csum */,
   2870						     ea_inode_array,
   2871						     extra_credits,
   2872						     false /* skip_quota */);
   2873	}
   2874
   2875	if (EXT4_I(inode)->i_file_acl) {
   2876		bh = ext4_sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl, REQ_PRIO);
   2877		if (IS_ERR(bh)) {
   2878			error = PTR_ERR(bh);
   2879			if (error == -EIO) {
   2880				EXT4_ERROR_INODE_ERR(inode, EIO,
   2881						     "block %llu read error",
   2882						     EXT4_I(inode)->i_file_acl);
   2883			}
   2884			bh = NULL;
   2885			goto cleanup;
   2886		}
   2887		error = ext4_xattr_check_block(inode, bh);
   2888		if (error)
   2889			goto cleanup;
   2890
   2891		if (ext4_has_feature_ea_inode(inode->i_sb)) {
   2892			for (entry = BFIRST(bh); !IS_LAST_ENTRY(entry);
   2893			     entry = EXT4_XATTR_NEXT(entry)) {
   2894				if (!entry->e_value_inum)
   2895					continue;
   2896				error = ext4_xattr_inode_iget(inode,
   2897					      le32_to_cpu(entry->e_value_inum),
   2898					      le32_to_cpu(entry->e_hash),
   2899					      &ea_inode);
   2900				if (error)
   2901					continue;
   2902				ext4_xattr_inode_free_quota(inode, ea_inode,
   2903					      le32_to_cpu(entry->e_value_size));
   2904				iput(ea_inode);
   2905			}
   2906
   2907		}
   2908
   2909		ext4_xattr_release_block(handle, inode, bh, ea_inode_array,
   2910					 extra_credits);
   2911		/*
   2912		 * Update i_file_acl value in the same transaction that releases
   2913		 * block.
   2914		 */
   2915		EXT4_I(inode)->i_file_acl = 0;
   2916		error = ext4_mark_inode_dirty(handle, inode);
   2917		if (error) {
   2918			EXT4_ERROR_INODE(inode, "mark inode dirty (error %d)",
   2919					 error);
   2920			goto cleanup;
   2921		}
   2922		ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, handle);
   2923	}
   2924	error = 0;
   2925cleanup:
   2926	brelse(iloc.bh);
   2927	brelse(bh);
   2928	return error;
   2929}
   2930
   2931void ext4_xattr_inode_array_free(struct ext4_xattr_inode_array *ea_inode_array)
   2932{
   2933	int idx;
   2934
   2935	if (ea_inode_array == NULL)
   2936		return;
   2937
   2938	for (idx = 0; idx < ea_inode_array->count; ++idx)
   2939		iput(ea_inode_array->inodes[idx]);
   2940	kfree(ea_inode_array);
   2941}
   2942
   2943/*
   2944 * ext4_xattr_block_cache_insert()
   2945 *
   2946 * Create a new entry in the extended attribute block cache, and insert
   2947 * it unless such an entry is already in the cache.
   2948 *
   2949 * Returns 0, or a negative error number on failure.
   2950 */
   2951static void
   2952ext4_xattr_block_cache_insert(struct mb_cache *ea_block_cache,
   2953			      struct buffer_head *bh)
   2954{
   2955	struct ext4_xattr_header *header = BHDR(bh);
   2956	__u32 hash = le32_to_cpu(header->h_hash);
   2957	int reusable = le32_to_cpu(header->h_refcount) <
   2958		       EXT4_XATTR_REFCOUNT_MAX;
   2959	int error;
   2960
   2961	if (!ea_block_cache)
   2962		return;
   2963	error = mb_cache_entry_create(ea_block_cache, GFP_NOFS, hash,
   2964				      bh->b_blocknr, reusable);
   2965	if (error) {
   2966		if (error == -EBUSY)
   2967			ea_bdebug(bh, "already in cache");
   2968	} else
   2969		ea_bdebug(bh, "inserting [%x]", (int)hash);
   2970}
   2971
   2972/*
   2973 * ext4_xattr_cmp()
   2974 *
   2975 * Compare two extended attribute blocks for equality.
   2976 *
   2977 * Returns 0 if the blocks are equal, 1 if they differ, and
   2978 * a negative error number on errors.
   2979 */
   2980static int
   2981ext4_xattr_cmp(struct ext4_xattr_header *header1,
   2982	       struct ext4_xattr_header *header2)
   2983{
   2984	struct ext4_xattr_entry *entry1, *entry2;
   2985
   2986	entry1 = ENTRY(header1+1);
   2987	entry2 = ENTRY(header2+1);
   2988	while (!IS_LAST_ENTRY(entry1)) {
   2989		if (IS_LAST_ENTRY(entry2))
   2990			return 1;
   2991		if (entry1->e_hash != entry2->e_hash ||
   2992		    entry1->e_name_index != entry2->e_name_index ||
   2993		    entry1->e_name_len != entry2->e_name_len ||
   2994		    entry1->e_value_size != entry2->e_value_size ||
   2995		    entry1->e_value_inum != entry2->e_value_inum ||
   2996		    memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
   2997			return 1;
   2998		if (!entry1->e_value_inum &&
   2999		    memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
   3000			   (char *)header2 + le16_to_cpu(entry2->e_value_offs),
   3001			   le32_to_cpu(entry1->e_value_size)))
   3002			return 1;
   3003
   3004		entry1 = EXT4_XATTR_NEXT(entry1);
   3005		entry2 = EXT4_XATTR_NEXT(entry2);
   3006	}
   3007	if (!IS_LAST_ENTRY(entry2))
   3008		return 1;
   3009	return 0;
   3010}
   3011
   3012/*
   3013 * ext4_xattr_block_cache_find()
   3014 *
   3015 * Find an identical extended attribute block.
   3016 *
   3017 * Returns a pointer to the block found, or NULL if such a block was
   3018 * not found or an error occurred.
   3019 */
   3020static struct buffer_head *
   3021ext4_xattr_block_cache_find(struct inode *inode,
   3022			    struct ext4_xattr_header *header,
   3023			    struct mb_cache_entry **pce)
   3024{
   3025	__u32 hash = le32_to_cpu(header->h_hash);
   3026	struct mb_cache_entry *ce;
   3027	struct mb_cache *ea_block_cache = EA_BLOCK_CACHE(inode);
   3028
   3029	if (!ea_block_cache)
   3030		return NULL;
   3031	if (!header->h_hash)
   3032		return NULL;  /* never share */
   3033	ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
   3034	ce = mb_cache_entry_find_first(ea_block_cache, hash);
   3035	while (ce) {
   3036		struct buffer_head *bh;
   3037
   3038		bh = ext4_sb_bread(inode->i_sb, ce->e_value, REQ_PRIO);
   3039		if (IS_ERR(bh)) {
   3040			if (PTR_ERR(bh) == -ENOMEM)
   3041				return NULL;
   3042			bh = NULL;
   3043			EXT4_ERROR_INODE(inode, "block %lu read error",
   3044					 (unsigned long)ce->e_value);
   3045		} else if (ext4_xattr_cmp(header, BHDR(bh)) == 0) {
   3046			*pce = ce;
   3047			return bh;
   3048		}
   3049		brelse(bh);
   3050		ce = mb_cache_entry_find_next(ea_block_cache, ce);
   3051	}
   3052	return NULL;
   3053}
   3054
   3055#define NAME_HASH_SHIFT 5
   3056#define VALUE_HASH_SHIFT 16
   3057
   3058/*
   3059 * ext4_xattr_hash_entry()
   3060 *
   3061 * Compute the hash of an extended attribute.
   3062 */
   3063static __le32 ext4_xattr_hash_entry(char *name, size_t name_len, __le32 *value,
   3064				    size_t value_count)
   3065{
   3066	__u32 hash = 0;
   3067
   3068	while (name_len--) {
   3069		hash = (hash << NAME_HASH_SHIFT) ^
   3070		       (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
   3071		       *name++;
   3072	}
   3073	while (value_count--) {
   3074		hash = (hash << VALUE_HASH_SHIFT) ^
   3075		       (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
   3076		       le32_to_cpu(*value++);
   3077	}
   3078	return cpu_to_le32(hash);
   3079}
   3080
   3081#undef NAME_HASH_SHIFT
   3082#undef VALUE_HASH_SHIFT
   3083
   3084#define BLOCK_HASH_SHIFT 16
   3085
   3086/*
   3087 * ext4_xattr_rehash()
   3088 *
   3089 * Re-compute the extended attribute hash value after an entry has changed.
   3090 */
   3091static void ext4_xattr_rehash(struct ext4_xattr_header *header)
   3092{
   3093	struct ext4_xattr_entry *here;
   3094	__u32 hash = 0;
   3095
   3096	here = ENTRY(header+1);
   3097	while (!IS_LAST_ENTRY(here)) {
   3098		if (!here->e_hash) {
   3099			/* Block is not shared if an entry's hash value == 0 */
   3100			hash = 0;
   3101			break;
   3102		}
   3103		hash = (hash << BLOCK_HASH_SHIFT) ^
   3104		       (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
   3105		       le32_to_cpu(here->e_hash);
   3106		here = EXT4_XATTR_NEXT(here);
   3107	}
   3108	header->h_hash = cpu_to_le32(hash);
   3109}
   3110
   3111#undef BLOCK_HASH_SHIFT
   3112
   3113#define	HASH_BUCKET_BITS	10
   3114
   3115struct mb_cache *
   3116ext4_xattr_create_cache(void)
   3117{
   3118	return mb_cache_create(HASH_BUCKET_BITS);
   3119}
   3120
   3121void ext4_xattr_destroy_cache(struct mb_cache *cache)
   3122{
   3123	if (cache)
   3124		mb_cache_destroy(cache);
   3125}
   3126