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