27a0b4a901f597d6b835051c29ca8632f4a7cf98
[platform/adaptation/renesas_rcar/renesas_kernel.git] / fs / gfs2 / xattr.c
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9
10 #include <linux/slab.h>
11 #include <linux/spinlock.h>
12 #include <linux/completion.h>
13 #include <linux/buffer_head.h>
14 #include <linux/xattr.h>
15 #include <linux/gfs2_ondisk.h>
16 #include <asm/uaccess.h>
17
18 #include "gfs2.h"
19 #include "incore.h"
20 #include "acl.h"
21 #include "xattr.h"
22 #include "glock.h"
23 #include "inode.h"
24 #include "meta_io.h"
25 #include "quota.h"
26 #include "rgrp.h"
27 #include "trans.h"
28 #include "util.h"
29
30 /**
31  * ea_calc_size - returns the acutal number of bytes the request will take up
32  *                (not counting any unstuffed data blocks)
33  * @sdp:
34  * @er:
35  * @size:
36  *
37  * Returns: 1 if the EA should be stuffed
38  */
39
40 static int ea_calc_size(struct gfs2_sbd *sdp, unsigned int nsize, size_t dsize,
41                         unsigned int *size)
42 {
43         unsigned int jbsize = sdp->sd_jbsize;
44
45         /* Stuffed */
46         *size = ALIGN(sizeof(struct gfs2_ea_header) + nsize + dsize, 8);
47
48         if (*size <= jbsize)
49                 return 1;
50
51         /* Unstuffed */
52         *size = ALIGN(sizeof(struct gfs2_ea_header) + nsize +
53                       (sizeof(__be64) * DIV_ROUND_UP(dsize, jbsize)), 8);
54
55         return 0;
56 }
57
58 static int ea_check_size(struct gfs2_sbd *sdp, unsigned int nsize, size_t dsize)
59 {
60         unsigned int size;
61
62         if (dsize > GFS2_EA_MAX_DATA_LEN)
63                 return -ERANGE;
64
65         ea_calc_size(sdp, nsize, dsize, &size);
66
67         /* This can only happen with 512 byte blocks */
68         if (size > sdp->sd_jbsize)
69                 return -ERANGE;
70
71         return 0;
72 }
73
74 typedef int (*ea_call_t) (struct gfs2_inode *ip, struct buffer_head *bh,
75                           struct gfs2_ea_header *ea,
76                           struct gfs2_ea_header *prev, void *private);
77
78 static int ea_foreach_i(struct gfs2_inode *ip, struct buffer_head *bh,
79                         ea_call_t ea_call, void *data)
80 {
81         struct gfs2_ea_header *ea, *prev = NULL;
82         int error = 0;
83
84         if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), bh, GFS2_METATYPE_EA))
85                 return -EIO;
86
87         for (ea = GFS2_EA_BH2FIRST(bh);; prev = ea, ea = GFS2_EA2NEXT(ea)) {
88                 if (!GFS2_EA_REC_LEN(ea))
89                         goto fail;
90                 if (!(bh->b_data <= (char *)ea && (char *)GFS2_EA2NEXT(ea) <=
91                                                   bh->b_data + bh->b_size))
92                         goto fail;
93                 if (!GFS2_EATYPE_VALID(ea->ea_type))
94                         goto fail;
95
96                 error = ea_call(ip, bh, ea, prev, data);
97                 if (error)
98                         return error;
99
100                 if (GFS2_EA_IS_LAST(ea)) {
101                         if ((char *)GFS2_EA2NEXT(ea) !=
102                             bh->b_data + bh->b_size)
103                                 goto fail;
104                         break;
105                 }
106         }
107
108         return error;
109
110 fail:
111         gfs2_consist_inode(ip);
112         return -EIO;
113 }
114
115 static int ea_foreach(struct gfs2_inode *ip, ea_call_t ea_call, void *data)
116 {
117         struct buffer_head *bh, *eabh;
118         __be64 *eablk, *end;
119         int error;
120
121         error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT, &bh);
122         if (error)
123                 return error;
124
125         if (!(ip->i_diskflags & GFS2_DIF_EA_INDIRECT)) {
126                 error = ea_foreach_i(ip, bh, ea_call, data);
127                 goto out;
128         }
129
130         if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), bh, GFS2_METATYPE_IN)) {
131                 error = -EIO;
132                 goto out;
133         }
134
135         eablk = (__be64 *)(bh->b_data + sizeof(struct gfs2_meta_header));
136         end = eablk + GFS2_SB(&ip->i_inode)->sd_inptrs;
137
138         for (; eablk < end; eablk++) {
139                 u64 bn;
140
141                 if (!*eablk)
142                         break;
143                 bn = be64_to_cpu(*eablk);
144
145                 error = gfs2_meta_read(ip->i_gl, bn, DIO_WAIT, &eabh);
146                 if (error)
147                         break;
148                 error = ea_foreach_i(ip, eabh, ea_call, data);
149                 brelse(eabh);
150                 if (error)
151                         break;
152         }
153 out:
154         brelse(bh);
155         return error;
156 }
157
158 struct ea_find {
159         int type;
160         const char *name;
161         size_t namel;
162         struct gfs2_ea_location *ef_el;
163 };
164
165 static int ea_find_i(struct gfs2_inode *ip, struct buffer_head *bh,
166                      struct gfs2_ea_header *ea, struct gfs2_ea_header *prev,
167                      void *private)
168 {
169         struct ea_find *ef = private;
170
171         if (ea->ea_type == GFS2_EATYPE_UNUSED)
172                 return 0;
173
174         if (ea->ea_type == ef->type) {
175                 if (ea->ea_name_len == ef->namel &&
176                     !memcmp(GFS2_EA2NAME(ea), ef->name, ea->ea_name_len)) {
177                         struct gfs2_ea_location *el = ef->ef_el;
178                         get_bh(bh);
179                         el->el_bh = bh;
180                         el->el_ea = ea;
181                         el->el_prev = prev;
182                         return 1;
183                 }
184         }
185
186         return 0;
187 }
188
189 static int gfs2_ea_find(struct gfs2_inode *ip, int type, const char *name,
190                         struct gfs2_ea_location *el)
191 {
192         struct ea_find ef;
193         int error;
194
195         ef.type = type;
196         ef.name = name;
197         ef.namel = strlen(name);
198         ef.ef_el = el;
199
200         memset(el, 0, sizeof(struct gfs2_ea_location));
201
202         error = ea_foreach(ip, ea_find_i, &ef);
203         if (error > 0)
204                 return 0;
205
206         return error;
207 }
208
209 /**
210  * ea_dealloc_unstuffed -
211  * @ip:
212  * @bh:
213  * @ea:
214  * @prev:
215  * @private:
216  *
217  * Take advantage of the fact that all unstuffed blocks are
218  * allocated from the same RG.  But watch, this may not always
219  * be true.
220  *
221  * Returns: errno
222  */
223
224 static int ea_dealloc_unstuffed(struct gfs2_inode *ip, struct buffer_head *bh,
225                                 struct gfs2_ea_header *ea,
226                                 struct gfs2_ea_header *prev, void *private)
227 {
228         int *leave = private;
229         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
230         struct gfs2_rgrpd *rgd;
231         struct gfs2_holder rg_gh;
232         struct buffer_head *dibh;
233         __be64 *dataptrs;
234         u64 bn = 0;
235         u64 bstart = 0;
236         unsigned int blen = 0;
237         unsigned int blks = 0;
238         unsigned int x;
239         int error;
240
241         error = gfs2_rindex_update(sdp);
242         if (error)
243                 return error;
244
245         if (GFS2_EA_IS_STUFFED(ea))
246                 return 0;
247
248         dataptrs = GFS2_EA2DATAPTRS(ea);
249         for (x = 0; x < ea->ea_num_ptrs; x++, dataptrs++) {
250                 if (*dataptrs) {
251                         blks++;
252                         bn = be64_to_cpu(*dataptrs);
253                 }
254         }
255         if (!blks)
256                 return 0;
257
258         rgd = gfs2_blk2rgrpd(sdp, bn, 1);
259         if (!rgd) {
260                 gfs2_consist_inode(ip);
261                 return -EIO;
262         }
263
264         error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &rg_gh);
265         if (error)
266                 return error;
267
268         error = gfs2_trans_begin(sdp, rgd->rd_length + RES_DINODE +
269                                  RES_EATTR + RES_STATFS + RES_QUOTA, blks);
270         if (error)
271                 goto out_gunlock;
272
273         gfs2_trans_add_bh(ip->i_gl, bh, 1);
274
275         dataptrs = GFS2_EA2DATAPTRS(ea);
276         for (x = 0; x < ea->ea_num_ptrs; x++, dataptrs++) {
277                 if (!*dataptrs)
278                         break;
279                 bn = be64_to_cpu(*dataptrs);
280
281                 if (bstart + blen == bn)
282                         blen++;
283                 else {
284                         if (bstart)
285                                 gfs2_free_meta(ip, bstart, blen);
286                         bstart = bn;
287                         blen = 1;
288                 }
289
290                 *dataptrs = 0;
291                 gfs2_add_inode_blocks(&ip->i_inode, -1);
292         }
293         if (bstart)
294                 gfs2_free_meta(ip, bstart, blen);
295
296         if (prev && !leave) {
297                 u32 len;
298
299                 len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea);
300                 prev->ea_rec_len = cpu_to_be32(len);
301
302                 if (GFS2_EA_IS_LAST(ea))
303                         prev->ea_flags |= GFS2_EAFLAG_LAST;
304         } else {
305                 ea->ea_type = GFS2_EATYPE_UNUSED;
306                 ea->ea_num_ptrs = 0;
307         }
308
309         error = gfs2_meta_inode_buffer(ip, &dibh);
310         if (!error) {
311                 ip->i_inode.i_ctime = CURRENT_TIME;
312                 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
313                 gfs2_dinode_out(ip, dibh->b_data);
314                 brelse(dibh);
315         }
316
317         gfs2_trans_end(sdp);
318
319 out_gunlock:
320         gfs2_glock_dq_uninit(&rg_gh);
321         return error;
322 }
323
324 static int ea_remove_unstuffed(struct gfs2_inode *ip, struct buffer_head *bh,
325                                struct gfs2_ea_header *ea,
326                                struct gfs2_ea_header *prev, int leave)
327 {
328         int error;
329
330         error = gfs2_rindex_update(GFS2_SB(&ip->i_inode));
331         if (error)
332                 return error;
333
334         error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
335         if (error)
336                 goto out_alloc;
337
338         error = ea_dealloc_unstuffed(ip, bh, ea, prev, (leave) ? &error : NULL);
339
340         gfs2_quota_unhold(ip);
341 out_alloc:
342         return error;
343 }
344
345 struct ea_list {
346         struct gfs2_ea_request *ei_er;
347         unsigned int ei_size;
348 };
349
350 static inline unsigned int gfs2_ea_strlen(struct gfs2_ea_header *ea)
351 {
352         switch (ea->ea_type) {
353         case GFS2_EATYPE_USR:
354                 return 5 + ea->ea_name_len + 1;
355         case GFS2_EATYPE_SYS:
356                 return 7 + ea->ea_name_len + 1;
357         case GFS2_EATYPE_SECURITY:
358                 return 9 + ea->ea_name_len + 1;
359         default:
360                 return 0;
361         }
362 }
363
364 static int ea_list_i(struct gfs2_inode *ip, struct buffer_head *bh,
365                      struct gfs2_ea_header *ea, struct gfs2_ea_header *prev,
366                      void *private)
367 {
368         struct ea_list *ei = private;
369         struct gfs2_ea_request *er = ei->ei_er;
370         unsigned int ea_size = gfs2_ea_strlen(ea);
371
372         if (ea->ea_type == GFS2_EATYPE_UNUSED)
373                 return 0;
374
375         if (er->er_data_len) {
376                 char *prefix = NULL;
377                 unsigned int l = 0;
378                 char c = 0;
379
380                 if (ei->ei_size + ea_size > er->er_data_len)
381                         return -ERANGE;
382
383                 switch (ea->ea_type) {
384                 case GFS2_EATYPE_USR:
385                         prefix = "user.";
386                         l = 5;
387                         break;
388                 case GFS2_EATYPE_SYS:
389                         prefix = "system.";
390                         l = 7;
391                         break;
392                 case GFS2_EATYPE_SECURITY:
393                         prefix = "security.";
394                         l = 9;
395                         break;
396                 }
397
398                 BUG_ON(l == 0);
399
400                 memcpy(er->er_data + ei->ei_size, prefix, l);
401                 memcpy(er->er_data + ei->ei_size + l, GFS2_EA2NAME(ea),
402                        ea->ea_name_len);
403                 memcpy(er->er_data + ei->ei_size + ea_size - 1, &c, 1);
404         }
405
406         ei->ei_size += ea_size;
407
408         return 0;
409 }
410
411 /**
412  * gfs2_listxattr - List gfs2 extended attributes
413  * @dentry: The dentry whose inode we are interested in
414  * @buffer: The buffer to write the results
415  * @size: The size of the buffer
416  *
417  * Returns: actual size of data on success, -errno on error
418  */
419
420 ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size)
421 {
422         struct gfs2_inode *ip = GFS2_I(dentry->d_inode);
423         struct gfs2_ea_request er;
424         struct gfs2_holder i_gh;
425         int error;
426
427         memset(&er, 0, sizeof(struct gfs2_ea_request));
428         if (size) {
429                 er.er_data = buffer;
430                 er.er_data_len = size;
431         }
432
433         error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
434         if (error)
435                 return error;
436
437         if (ip->i_eattr) {
438                 struct ea_list ei = { .ei_er = &er, .ei_size = 0 };
439
440                 error = ea_foreach(ip, ea_list_i, &ei);
441                 if (!error)
442                         error = ei.ei_size;
443         }
444
445         gfs2_glock_dq_uninit(&i_gh);
446
447         return error;
448 }
449
450 /**
451  * ea_get_unstuffed - actually copies the unstuffed data into the
452  *                    request buffer
453  * @ip: The GFS2 inode
454  * @ea: The extended attribute header structure
455  * @data: The data to be copied
456  *
457  * Returns: errno
458  */
459
460 static int ea_get_unstuffed(struct gfs2_inode *ip, struct gfs2_ea_header *ea,
461                             char *data)
462 {
463         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
464         struct buffer_head **bh;
465         unsigned int amount = GFS2_EA_DATA_LEN(ea);
466         unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
467         __be64 *dataptrs = GFS2_EA2DATAPTRS(ea);
468         unsigned int x;
469         int error = 0;
470
471         bh = kcalloc(nptrs, sizeof(struct buffer_head *), GFP_NOFS);
472         if (!bh)
473                 return -ENOMEM;
474
475         for (x = 0; x < nptrs; x++) {
476                 error = gfs2_meta_read(ip->i_gl, be64_to_cpu(*dataptrs), 0,
477                                        bh + x);
478                 if (error) {
479                         while (x--)
480                                 brelse(bh[x]);
481                         goto out;
482                 }
483                 dataptrs++;
484         }
485
486         for (x = 0; x < nptrs; x++) {
487                 error = gfs2_meta_wait(sdp, bh[x]);
488                 if (error) {
489                         for (; x < nptrs; x++)
490                                 brelse(bh[x]);
491                         goto out;
492                 }
493                 if (gfs2_metatype_check(sdp, bh[x], GFS2_METATYPE_ED)) {
494                         for (; x < nptrs; x++)
495                                 brelse(bh[x]);
496                         error = -EIO;
497                         goto out;
498                 }
499
500                 memcpy(data, bh[x]->b_data + sizeof(struct gfs2_meta_header),
501                        (sdp->sd_jbsize > amount) ? amount : sdp->sd_jbsize);
502
503                 amount -= sdp->sd_jbsize;
504                 data += sdp->sd_jbsize;
505
506                 brelse(bh[x]);
507         }
508
509 out:
510         kfree(bh);
511         return error;
512 }
513
514 static int gfs2_ea_get_copy(struct gfs2_inode *ip, struct gfs2_ea_location *el,
515                             char *data, size_t size)
516 {
517         int ret;
518         size_t len = GFS2_EA_DATA_LEN(el->el_ea);
519         if (len > size)
520                 return -ERANGE;
521
522         if (GFS2_EA_IS_STUFFED(el->el_ea)) {
523                 memcpy(data, GFS2_EA2DATA(el->el_ea), len);
524                 return len;
525         }
526         ret = ea_get_unstuffed(ip, el->el_ea, data);
527         if (ret < 0)
528                 return ret;
529         return len;
530 }
531
532 int gfs2_xattr_acl_get(struct gfs2_inode *ip, const char *name, char **ppdata)
533 {
534         struct gfs2_ea_location el;
535         int error;
536         int len;
537         char *data;
538
539         error = gfs2_ea_find(ip, GFS2_EATYPE_SYS, name, &el);
540         if (error)
541                 return error;
542         if (!el.el_ea)
543                 goto out;
544         if (!GFS2_EA_DATA_LEN(el.el_ea))
545                 goto out;
546
547         len = GFS2_EA_DATA_LEN(el.el_ea);
548         data = kmalloc(len, GFP_NOFS);
549         error = -ENOMEM;
550         if (data == NULL)
551                 goto out;
552
553         error = gfs2_ea_get_copy(ip, &el, data, len);
554         if (error < 0)
555                 kfree(data);
556         else
557                 *ppdata = data;
558 out:
559         brelse(el.el_bh);
560         return error;
561 }
562
563 /**
564  * gfs2_xattr_get - Get a GFS2 extended attribute
565  * @inode: The inode
566  * @name: The name of the extended attribute
567  * @buffer: The buffer to write the result into
568  * @size: The size of the buffer
569  * @type: The type of extended attribute
570  *
571  * Returns: actual size of data on success, -errno on error
572  */
573 static int gfs2_xattr_get(struct dentry *dentry, const char *name,
574                 void *buffer, size_t size, int type)
575 {
576         struct gfs2_inode *ip = GFS2_I(dentry->d_inode);
577         struct gfs2_ea_location el;
578         int error;
579
580         if (!ip->i_eattr)
581                 return -ENODATA;
582         if (strlen(name) > GFS2_EA_MAX_NAME_LEN)
583                 return -EINVAL;
584
585         error = gfs2_ea_find(ip, type, name, &el);
586         if (error)
587                 return error;
588         if (!el.el_ea)
589                 return -ENODATA;
590         if (size)
591                 error = gfs2_ea_get_copy(ip, &el, buffer, size);
592         else
593                 error = GFS2_EA_DATA_LEN(el.el_ea);
594         brelse(el.el_bh);
595
596         return error;
597 }
598
599 /**
600  * ea_alloc_blk - allocates a new block for extended attributes.
601  * @ip: A pointer to the inode that's getting extended attributes
602  * @bhp: Pointer to pointer to a struct buffer_head
603  *
604  * Returns: errno
605  */
606
607 static int ea_alloc_blk(struct gfs2_inode *ip, struct buffer_head **bhp)
608 {
609         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
610         struct gfs2_ea_header *ea;
611         unsigned int n = 1;
612         u64 block;
613         int error;
614
615         error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
616         if (error)
617                 return error;
618         gfs2_trans_add_unrevoke(sdp, block, 1);
619         *bhp = gfs2_meta_new(ip->i_gl, block);
620         gfs2_trans_add_bh(ip->i_gl, *bhp, 1);
621         gfs2_metatype_set(*bhp, GFS2_METATYPE_EA, GFS2_FORMAT_EA);
622         gfs2_buffer_clear_tail(*bhp, sizeof(struct gfs2_meta_header));
623
624         ea = GFS2_EA_BH2FIRST(*bhp);
625         ea->ea_rec_len = cpu_to_be32(sdp->sd_jbsize);
626         ea->ea_type = GFS2_EATYPE_UNUSED;
627         ea->ea_flags = GFS2_EAFLAG_LAST;
628         ea->ea_num_ptrs = 0;
629
630         gfs2_add_inode_blocks(&ip->i_inode, 1);
631
632         return 0;
633 }
634
635 /**
636  * ea_write - writes the request info to an ea, creating new blocks if
637  *            necessary
638  * @ip: inode that is being modified
639  * @ea: the location of the new ea in a block
640  * @er: the write request
641  *
642  * Note: does not update ea_rec_len or the GFS2_EAFLAG_LAST bin of ea_flags
643  *
644  * returns : errno
645  */
646
647 static int ea_write(struct gfs2_inode *ip, struct gfs2_ea_header *ea,
648                     struct gfs2_ea_request *er)
649 {
650         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
651         int error;
652
653         ea->ea_data_len = cpu_to_be32(er->er_data_len);
654         ea->ea_name_len = er->er_name_len;
655         ea->ea_type = er->er_type;
656         ea->__pad = 0;
657
658         memcpy(GFS2_EA2NAME(ea), er->er_name, er->er_name_len);
659
660         if (GFS2_EAREQ_SIZE_STUFFED(er) <= sdp->sd_jbsize) {
661                 ea->ea_num_ptrs = 0;
662                 memcpy(GFS2_EA2DATA(ea), er->er_data, er->er_data_len);
663         } else {
664                 __be64 *dataptr = GFS2_EA2DATAPTRS(ea);
665                 const char *data = er->er_data;
666                 unsigned int data_len = er->er_data_len;
667                 unsigned int copy;
668                 unsigned int x;
669
670                 ea->ea_num_ptrs = DIV_ROUND_UP(er->er_data_len, sdp->sd_jbsize);
671                 for (x = 0; x < ea->ea_num_ptrs; x++) {
672                         struct buffer_head *bh;
673                         u64 block;
674                         int mh_size = sizeof(struct gfs2_meta_header);
675                         unsigned int n = 1;
676
677                         error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
678                         if (error)
679                                 return error;
680                         gfs2_trans_add_unrevoke(sdp, block, 1);
681                         bh = gfs2_meta_new(ip->i_gl, block);
682                         gfs2_trans_add_bh(ip->i_gl, bh, 1);
683                         gfs2_metatype_set(bh, GFS2_METATYPE_ED, GFS2_FORMAT_ED);
684
685                         gfs2_add_inode_blocks(&ip->i_inode, 1);
686
687                         copy = data_len > sdp->sd_jbsize ? sdp->sd_jbsize :
688                                                            data_len;
689                         memcpy(bh->b_data + mh_size, data, copy);
690                         if (copy < sdp->sd_jbsize)
691                                 memset(bh->b_data + mh_size + copy, 0,
692                                        sdp->sd_jbsize - copy);
693
694                         *dataptr++ = cpu_to_be64(bh->b_blocknr);
695                         data += copy;
696                         data_len -= copy;
697
698                         brelse(bh);
699                 }
700
701                 gfs2_assert_withdraw(sdp, !data_len);
702         }
703
704         return 0;
705 }
706
707 typedef int (*ea_skeleton_call_t) (struct gfs2_inode *ip,
708                                    struct gfs2_ea_request *er, void *private);
709
710 static int ea_alloc_skeleton(struct gfs2_inode *ip, struct gfs2_ea_request *er,
711                              unsigned int blks,
712                              ea_skeleton_call_t skeleton_call, void *private)
713 {
714         struct buffer_head *dibh;
715         int error;
716
717         error = gfs2_rindex_update(GFS2_SB(&ip->i_inode));
718         if (error)
719                 return error;
720
721         error = gfs2_quota_lock_check(ip);
722         if (error)
723                 return error;
724
725         error = gfs2_inplace_reserve(ip, blks);
726         if (error)
727                 goto out_gunlock_q;
728
729         error = gfs2_trans_begin(GFS2_SB(&ip->i_inode),
730                                  blks + gfs2_rg_blocks(ip) +
731                                  RES_DINODE + RES_STATFS + RES_QUOTA, 0);
732         if (error)
733                 goto out_ipres;
734
735         error = skeleton_call(ip, er, private);
736         if (error)
737                 goto out_end_trans;
738
739         error = gfs2_meta_inode_buffer(ip, &dibh);
740         if (!error) {
741                 ip->i_inode.i_ctime = CURRENT_TIME;
742                 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
743                 gfs2_dinode_out(ip, dibh->b_data);
744                 brelse(dibh);
745         }
746
747 out_end_trans:
748         gfs2_trans_end(GFS2_SB(&ip->i_inode));
749 out_ipres:
750         gfs2_inplace_release(ip);
751 out_gunlock_q:
752         gfs2_quota_unlock(ip);
753         return error;
754 }
755
756 static int ea_init_i(struct gfs2_inode *ip, struct gfs2_ea_request *er,
757                      void *private)
758 {
759         struct buffer_head *bh;
760         int error;
761
762         error = ea_alloc_blk(ip, &bh);
763         if (error)
764                 return error;
765
766         ip->i_eattr = bh->b_blocknr;
767         error = ea_write(ip, GFS2_EA_BH2FIRST(bh), er);
768
769         brelse(bh);
770
771         return error;
772 }
773
774 /**
775  * ea_init - initializes a new eattr block
776  * @ip:
777  * @er:
778  *
779  * Returns: errno
780  */
781
782 static int ea_init(struct gfs2_inode *ip, int type, const char *name,
783                    const void *data, size_t size)
784 {
785         struct gfs2_ea_request er;
786         unsigned int jbsize = GFS2_SB(&ip->i_inode)->sd_jbsize;
787         unsigned int blks = 1;
788
789         er.er_type = type;
790         er.er_name = name;
791         er.er_name_len = strlen(name);
792         er.er_data = (void *)data;
793         er.er_data_len = size;
794
795         if (GFS2_EAREQ_SIZE_STUFFED(&er) > jbsize)
796                 blks += DIV_ROUND_UP(er.er_data_len, jbsize);
797
798         return ea_alloc_skeleton(ip, &er, blks, ea_init_i, NULL);
799 }
800
801 static struct gfs2_ea_header *ea_split_ea(struct gfs2_ea_header *ea)
802 {
803         u32 ea_size = GFS2_EA_SIZE(ea);
804         struct gfs2_ea_header *new = (struct gfs2_ea_header *)((char *)ea +
805                                      ea_size);
806         u32 new_size = GFS2_EA_REC_LEN(ea) - ea_size;
807         int last = ea->ea_flags & GFS2_EAFLAG_LAST;
808
809         ea->ea_rec_len = cpu_to_be32(ea_size);
810         ea->ea_flags ^= last;
811
812         new->ea_rec_len = cpu_to_be32(new_size);
813         new->ea_flags = last;
814
815         return new;
816 }
817
818 static void ea_set_remove_stuffed(struct gfs2_inode *ip,
819                                   struct gfs2_ea_location *el)
820 {
821         struct gfs2_ea_header *ea = el->el_ea;
822         struct gfs2_ea_header *prev = el->el_prev;
823         u32 len;
824
825         gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
826
827         if (!prev || !GFS2_EA_IS_STUFFED(ea)) {
828                 ea->ea_type = GFS2_EATYPE_UNUSED;
829                 return;
830         } else if (GFS2_EA2NEXT(prev) != ea) {
831                 prev = GFS2_EA2NEXT(prev);
832                 gfs2_assert_withdraw(GFS2_SB(&ip->i_inode), GFS2_EA2NEXT(prev) == ea);
833         }
834
835         len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea);
836         prev->ea_rec_len = cpu_to_be32(len);
837
838         if (GFS2_EA_IS_LAST(ea))
839                 prev->ea_flags |= GFS2_EAFLAG_LAST;
840 }
841
842 struct ea_set {
843         int ea_split;
844
845         struct gfs2_ea_request *es_er;
846         struct gfs2_ea_location *es_el;
847
848         struct buffer_head *es_bh;
849         struct gfs2_ea_header *es_ea;
850 };
851
852 static int ea_set_simple_noalloc(struct gfs2_inode *ip, struct buffer_head *bh,
853                                  struct gfs2_ea_header *ea, struct ea_set *es)
854 {
855         struct gfs2_ea_request *er = es->es_er;
856         struct buffer_head *dibh;
857         int error;
858
859         error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + 2 * RES_EATTR, 0);
860         if (error)
861                 return error;
862
863         gfs2_trans_add_bh(ip->i_gl, bh, 1);
864
865         if (es->ea_split)
866                 ea = ea_split_ea(ea);
867
868         ea_write(ip, ea, er);
869
870         if (es->es_el)
871                 ea_set_remove_stuffed(ip, es->es_el);
872
873         error = gfs2_meta_inode_buffer(ip, &dibh);
874         if (error)
875                 goto out;
876         ip->i_inode.i_ctime = CURRENT_TIME;
877         gfs2_trans_add_bh(ip->i_gl, dibh, 1);
878         gfs2_dinode_out(ip, dibh->b_data);
879         brelse(dibh);
880 out:
881         gfs2_trans_end(GFS2_SB(&ip->i_inode));
882         return error;
883 }
884
885 static int ea_set_simple_alloc(struct gfs2_inode *ip,
886                                struct gfs2_ea_request *er, void *private)
887 {
888         struct ea_set *es = private;
889         struct gfs2_ea_header *ea = es->es_ea;
890         int error;
891
892         gfs2_trans_add_bh(ip->i_gl, es->es_bh, 1);
893
894         if (es->ea_split)
895                 ea = ea_split_ea(ea);
896
897         error = ea_write(ip, ea, er);
898         if (error)
899                 return error;
900
901         if (es->es_el)
902                 ea_set_remove_stuffed(ip, es->es_el);
903
904         return 0;
905 }
906
907 static int ea_set_simple(struct gfs2_inode *ip, struct buffer_head *bh,
908                          struct gfs2_ea_header *ea, struct gfs2_ea_header *prev,
909                          void *private)
910 {
911         struct ea_set *es = private;
912         unsigned int size;
913         int stuffed;
914         int error;
915
916         stuffed = ea_calc_size(GFS2_SB(&ip->i_inode), es->es_er->er_name_len,
917                                es->es_er->er_data_len, &size);
918
919         if (ea->ea_type == GFS2_EATYPE_UNUSED) {
920                 if (GFS2_EA_REC_LEN(ea) < size)
921                         return 0;
922                 if (!GFS2_EA_IS_STUFFED(ea)) {
923                         error = ea_remove_unstuffed(ip, bh, ea, prev, 1);
924                         if (error)
925                                 return error;
926                 }
927                 es->ea_split = 0;
928         } else if (GFS2_EA_REC_LEN(ea) - GFS2_EA_SIZE(ea) >= size)
929                 es->ea_split = 1;
930         else
931                 return 0;
932
933         if (stuffed) {
934                 error = ea_set_simple_noalloc(ip, bh, ea, es);
935                 if (error)
936                         return error;
937         } else {
938                 unsigned int blks;
939
940                 es->es_bh = bh;
941                 es->es_ea = ea;
942                 blks = 2 + DIV_ROUND_UP(es->es_er->er_data_len,
943                                         GFS2_SB(&ip->i_inode)->sd_jbsize);
944
945                 error = ea_alloc_skeleton(ip, es->es_er, blks,
946                                           ea_set_simple_alloc, es);
947                 if (error)
948                         return error;
949         }
950
951         return 1;
952 }
953
954 static int ea_set_block(struct gfs2_inode *ip, struct gfs2_ea_request *er,
955                         void *private)
956 {
957         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
958         struct buffer_head *indbh, *newbh;
959         __be64 *eablk;
960         int error;
961         int mh_size = sizeof(struct gfs2_meta_header);
962
963         if (ip->i_diskflags & GFS2_DIF_EA_INDIRECT) {
964                 __be64 *end;
965
966                 error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT,
967                                        &indbh);
968                 if (error)
969                         return error;
970
971                 if (gfs2_metatype_check(sdp, indbh, GFS2_METATYPE_IN)) {
972                         error = -EIO;
973                         goto out;
974                 }
975
976                 eablk = (__be64 *)(indbh->b_data + mh_size);
977                 end = eablk + sdp->sd_inptrs;
978
979                 for (; eablk < end; eablk++)
980                         if (!*eablk)
981                                 break;
982
983                 if (eablk == end) {
984                         error = -ENOSPC;
985                         goto out;
986                 }
987
988                 gfs2_trans_add_bh(ip->i_gl, indbh, 1);
989         } else {
990                 u64 blk;
991                 unsigned int n = 1;
992                 error = gfs2_alloc_blocks(ip, &blk, &n, 0, NULL);
993                 if (error)
994                         return error;
995                 gfs2_trans_add_unrevoke(sdp, blk, 1);
996                 indbh = gfs2_meta_new(ip->i_gl, blk);
997                 gfs2_trans_add_bh(ip->i_gl, indbh, 1);
998                 gfs2_metatype_set(indbh, GFS2_METATYPE_IN, GFS2_FORMAT_IN);
999                 gfs2_buffer_clear_tail(indbh, mh_size);
1000
1001                 eablk = (__be64 *)(indbh->b_data + mh_size);
1002                 *eablk = cpu_to_be64(ip->i_eattr);
1003                 ip->i_eattr = blk;
1004                 ip->i_diskflags |= GFS2_DIF_EA_INDIRECT;
1005                 gfs2_add_inode_blocks(&ip->i_inode, 1);
1006
1007                 eablk++;
1008         }
1009
1010         error = ea_alloc_blk(ip, &newbh);
1011         if (error)
1012                 goto out;
1013
1014         *eablk = cpu_to_be64((u64)newbh->b_blocknr);
1015         error = ea_write(ip, GFS2_EA_BH2FIRST(newbh), er);
1016         brelse(newbh);
1017         if (error)
1018                 goto out;
1019
1020         if (private)
1021                 ea_set_remove_stuffed(ip, private);
1022
1023 out:
1024         brelse(indbh);
1025         return error;
1026 }
1027
1028 static int ea_set_i(struct gfs2_inode *ip, int type, const char *name,
1029                     const void *value, size_t size, struct gfs2_ea_location *el)
1030 {
1031         struct gfs2_ea_request er;
1032         struct ea_set es;
1033         unsigned int blks = 2;
1034         int error;
1035
1036         er.er_type = type;
1037         er.er_name = name;
1038         er.er_data = (void *)value;
1039         er.er_name_len = strlen(name);
1040         er.er_data_len = size;
1041
1042         memset(&es, 0, sizeof(struct ea_set));
1043         es.es_er = &er;
1044         es.es_el = el;
1045
1046         error = ea_foreach(ip, ea_set_simple, &es);
1047         if (error > 0)
1048                 return 0;
1049         if (error)
1050                 return error;
1051
1052         if (!(ip->i_diskflags & GFS2_DIF_EA_INDIRECT))
1053                 blks++;
1054         if (GFS2_EAREQ_SIZE_STUFFED(&er) > GFS2_SB(&ip->i_inode)->sd_jbsize)
1055                 blks += DIV_ROUND_UP(er.er_data_len, GFS2_SB(&ip->i_inode)->sd_jbsize);
1056
1057         return ea_alloc_skeleton(ip, &er, blks, ea_set_block, el);
1058 }
1059
1060 static int ea_set_remove_unstuffed(struct gfs2_inode *ip,
1061                                    struct gfs2_ea_location *el)
1062 {
1063         if (el->el_prev && GFS2_EA2NEXT(el->el_prev) != el->el_ea) {
1064                 el->el_prev = GFS2_EA2NEXT(el->el_prev);
1065                 gfs2_assert_withdraw(GFS2_SB(&ip->i_inode),
1066                                      GFS2_EA2NEXT(el->el_prev) == el->el_ea);
1067         }
1068
1069         return ea_remove_unstuffed(ip, el->el_bh, el->el_ea, el->el_prev, 0);
1070 }
1071
1072 static int ea_remove_stuffed(struct gfs2_inode *ip, struct gfs2_ea_location *el)
1073 {
1074         struct gfs2_ea_header *ea = el->el_ea;
1075         struct gfs2_ea_header *prev = el->el_prev;
1076         struct buffer_head *dibh;
1077         int error;
1078
1079         error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + RES_EATTR, 0);
1080         if (error)
1081                 return error;
1082
1083         gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
1084
1085         if (prev) {
1086                 u32 len;
1087
1088                 len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea);
1089                 prev->ea_rec_len = cpu_to_be32(len);
1090
1091                 if (GFS2_EA_IS_LAST(ea))
1092                         prev->ea_flags |= GFS2_EAFLAG_LAST;
1093         } else {
1094                 ea->ea_type = GFS2_EATYPE_UNUSED;
1095         }
1096
1097         error = gfs2_meta_inode_buffer(ip, &dibh);
1098         if (!error) {
1099                 ip->i_inode.i_ctime = CURRENT_TIME;
1100                 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1101                 gfs2_dinode_out(ip, dibh->b_data);
1102                 brelse(dibh);
1103         }
1104
1105         gfs2_trans_end(GFS2_SB(&ip->i_inode));
1106
1107         return error;
1108 }
1109
1110 /**
1111  * gfs2_xattr_remove - Remove a GFS2 extended attribute
1112  * @ip: The inode
1113  * @type: The type of the extended attribute
1114  * @name: The name of the extended attribute
1115  *
1116  * This is not called directly by the VFS since we use the (common)
1117  * scheme of making a "set with NULL data" mean a remove request. Note
1118  * that this is different from a set with zero length data.
1119  *
1120  * Returns: 0, or errno on failure
1121  */
1122
1123 static int gfs2_xattr_remove(struct gfs2_inode *ip, int type, const char *name)
1124 {
1125         struct gfs2_ea_location el;
1126         int error;
1127
1128         if (!ip->i_eattr)
1129                 return -ENODATA;
1130
1131         error = gfs2_ea_find(ip, type, name, &el);
1132         if (error)
1133                 return error;
1134         if (!el.el_ea)
1135                 return -ENODATA;
1136
1137         if (GFS2_EA_IS_STUFFED(el.el_ea))
1138                 error = ea_remove_stuffed(ip, &el);
1139         else
1140                 error = ea_remove_unstuffed(ip, el.el_bh, el.el_ea, el.el_prev, 0);
1141
1142         brelse(el.el_bh);
1143
1144         return error;
1145 }
1146
1147 /**
1148  * __gfs2_xattr_set - Set (or remove) a GFS2 extended attribute
1149  * @ip: The inode
1150  * @name: The name of the extended attribute
1151  * @value: The value of the extended attribute (NULL for remove)
1152  * @size: The size of the @value argument
1153  * @flags: Create or Replace
1154  * @type: The type of the extended attribute
1155  *
1156  * See gfs2_xattr_remove() for details of the removal of xattrs.
1157  *
1158  * Returns: 0 or errno on failure
1159  */
1160
1161 int __gfs2_xattr_set(struct inode *inode, const char *name,
1162                    const void *value, size_t size, int flags, int type)
1163 {
1164         struct gfs2_inode *ip = GFS2_I(inode);
1165         struct gfs2_sbd *sdp = GFS2_SB(inode);
1166         struct gfs2_ea_location el;
1167         unsigned int namel = strlen(name);
1168         int error;
1169
1170         if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
1171                 return -EPERM;
1172         if (namel > GFS2_EA_MAX_NAME_LEN)
1173                 return -ERANGE;
1174
1175         if (value == NULL)
1176                 return gfs2_xattr_remove(ip, type, name);
1177
1178         if (ea_check_size(sdp, namel, size))
1179                 return -ERANGE;
1180
1181         if (!ip->i_eattr) {
1182                 if (flags & XATTR_REPLACE)
1183                         return -ENODATA;
1184                 return ea_init(ip, type, name, value, size);
1185         }
1186
1187         error = gfs2_ea_find(ip, type, name, &el);
1188         if (error)
1189                 return error;
1190
1191         if (el.el_ea) {
1192                 if (ip->i_diskflags & GFS2_DIF_APPENDONLY) {
1193                         brelse(el.el_bh);
1194                         return -EPERM;
1195                 }
1196
1197                 error = -EEXIST;
1198                 if (!(flags & XATTR_CREATE)) {
1199                         int unstuffed = !GFS2_EA_IS_STUFFED(el.el_ea);
1200                         error = ea_set_i(ip, type, name, value, size, &el);
1201                         if (!error && unstuffed)
1202                                 ea_set_remove_unstuffed(ip, &el);
1203                 }
1204
1205                 brelse(el.el_bh);
1206                 return error;
1207         }
1208
1209         error = -ENODATA;
1210         if (!(flags & XATTR_REPLACE))
1211                 error = ea_set_i(ip, type, name, value, size, NULL);
1212
1213         return error;
1214 }
1215
1216 static int gfs2_xattr_set(struct dentry *dentry, const char *name,
1217                 const void *value, size_t size, int flags, int type)
1218 {
1219         return __gfs2_xattr_set(dentry->d_inode, name, value,
1220                                 size, flags, type);
1221 }
1222
1223 static int ea_acl_chmod_unstuffed(struct gfs2_inode *ip,
1224                                   struct gfs2_ea_header *ea, char *data)
1225 {
1226         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1227         struct buffer_head **bh;
1228         unsigned int amount = GFS2_EA_DATA_LEN(ea);
1229         unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
1230         __be64 *dataptrs = GFS2_EA2DATAPTRS(ea);
1231         unsigned int x;
1232         int error;
1233
1234         bh = kcalloc(nptrs, sizeof(struct buffer_head *), GFP_NOFS);
1235         if (!bh)
1236                 return -ENOMEM;
1237
1238         error = gfs2_trans_begin(sdp, nptrs + RES_DINODE, 0);
1239         if (error)
1240                 goto out;
1241
1242         for (x = 0; x < nptrs; x++) {
1243                 error = gfs2_meta_read(ip->i_gl, be64_to_cpu(*dataptrs), 0,
1244                                        bh + x);
1245                 if (error) {
1246                         while (x--)
1247                                 brelse(bh[x]);
1248                         goto fail;
1249                 }
1250                 dataptrs++;
1251         }
1252
1253         for (x = 0; x < nptrs; x++) {
1254                 error = gfs2_meta_wait(sdp, bh[x]);
1255                 if (error) {
1256                         for (; x < nptrs; x++)
1257                                 brelse(bh[x]);
1258                         goto fail;
1259                 }
1260                 if (gfs2_metatype_check(sdp, bh[x], GFS2_METATYPE_ED)) {
1261                         for (; x < nptrs; x++)
1262                                 brelse(bh[x]);
1263                         error = -EIO;
1264                         goto fail;
1265                 }
1266
1267                 gfs2_trans_add_bh(ip->i_gl, bh[x], 1);
1268
1269                 memcpy(bh[x]->b_data + sizeof(struct gfs2_meta_header), data,
1270                        (sdp->sd_jbsize > amount) ? amount : sdp->sd_jbsize);
1271
1272                 amount -= sdp->sd_jbsize;
1273                 data += sdp->sd_jbsize;
1274
1275                 brelse(bh[x]);
1276         }
1277
1278 out:
1279         kfree(bh);
1280         return error;
1281
1282 fail:
1283         gfs2_trans_end(sdp);
1284         kfree(bh);
1285         return error;
1286 }
1287
1288 int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data)
1289 {
1290         struct inode *inode = &ip->i_inode;
1291         struct gfs2_sbd *sdp = GFS2_SB(inode);
1292         struct gfs2_ea_location el;
1293         int error;
1294
1295         error = gfs2_ea_find(ip, GFS2_EATYPE_SYS, GFS2_POSIX_ACL_ACCESS, &el);
1296         if (error)
1297                 return error;
1298
1299         if (GFS2_EA_IS_STUFFED(el.el_ea)) {
1300                 error = gfs2_trans_begin(sdp, RES_DINODE + RES_EATTR, 0);
1301                 if (error == 0) {
1302                         gfs2_trans_add_bh(ip->i_gl, el.el_bh, 1);
1303                         memcpy(GFS2_EA2DATA(el.el_ea), data,
1304                                GFS2_EA_DATA_LEN(el.el_ea));
1305                 }
1306         } else {
1307                 error = ea_acl_chmod_unstuffed(ip, el.el_ea, data);
1308         }
1309
1310         brelse(el.el_bh);
1311         if (error)
1312                 return error;
1313
1314         error = gfs2_setattr_simple(inode, attr);
1315         gfs2_trans_end(sdp);
1316         return error;
1317 }
1318
1319 static int ea_dealloc_indirect(struct gfs2_inode *ip)
1320 {
1321         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1322         struct gfs2_rgrp_list rlist;
1323         struct buffer_head *indbh, *dibh;
1324         __be64 *eablk, *end;
1325         unsigned int rg_blocks = 0;
1326         u64 bstart = 0;
1327         unsigned int blen = 0;
1328         unsigned int blks = 0;
1329         unsigned int x;
1330         int error;
1331
1332         error = gfs2_rindex_update(sdp);
1333         if (error)
1334                 return error;
1335
1336         memset(&rlist, 0, sizeof(struct gfs2_rgrp_list));
1337
1338         error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT, &indbh);
1339         if (error)
1340                 return error;
1341
1342         if (gfs2_metatype_check(sdp, indbh, GFS2_METATYPE_IN)) {
1343                 error = -EIO;
1344                 goto out;
1345         }
1346
1347         eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header));
1348         end = eablk + sdp->sd_inptrs;
1349
1350         for (; eablk < end; eablk++) {
1351                 u64 bn;
1352
1353                 if (!*eablk)
1354                         break;
1355                 bn = be64_to_cpu(*eablk);
1356
1357                 if (bstart + blen == bn)
1358                         blen++;
1359                 else {
1360                         if (bstart)
1361                                 gfs2_rlist_add(ip, &rlist, bstart);
1362                         bstart = bn;
1363                         blen = 1;
1364                 }
1365                 blks++;
1366         }
1367         if (bstart)
1368                 gfs2_rlist_add(ip, &rlist, bstart);
1369         else
1370                 goto out;
1371
1372         gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE);
1373
1374         for (x = 0; x < rlist.rl_rgrps; x++) {
1375                 struct gfs2_rgrpd *rgd;
1376                 rgd = rlist.rl_ghs[x].gh_gl->gl_object;
1377                 rg_blocks += rgd->rd_length;
1378         }
1379
1380         error = gfs2_glock_nq_m(rlist.rl_rgrps, rlist.rl_ghs);
1381         if (error)
1382                 goto out_rlist_free;
1383
1384         error = gfs2_trans_begin(sdp, rg_blocks + RES_DINODE + RES_INDIRECT +
1385                                  RES_STATFS + RES_QUOTA, blks);
1386         if (error)
1387                 goto out_gunlock;
1388
1389         gfs2_trans_add_bh(ip->i_gl, indbh, 1);
1390
1391         eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header));
1392         bstart = 0;
1393         blen = 0;
1394
1395         for (; eablk < end; eablk++) {
1396                 u64 bn;
1397
1398                 if (!*eablk)
1399                         break;
1400                 bn = be64_to_cpu(*eablk);
1401
1402                 if (bstart + blen == bn)
1403                         blen++;
1404                 else {
1405                         if (bstart)
1406                                 gfs2_free_meta(ip, bstart, blen);
1407                         bstart = bn;
1408                         blen = 1;
1409                 }
1410
1411                 *eablk = 0;
1412                 gfs2_add_inode_blocks(&ip->i_inode, -1);
1413         }
1414         if (bstart)
1415                 gfs2_free_meta(ip, bstart, blen);
1416
1417         ip->i_diskflags &= ~GFS2_DIF_EA_INDIRECT;
1418
1419         error = gfs2_meta_inode_buffer(ip, &dibh);
1420         if (!error) {
1421                 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1422                 gfs2_dinode_out(ip, dibh->b_data);
1423                 brelse(dibh);
1424         }
1425
1426         gfs2_trans_end(sdp);
1427
1428 out_gunlock:
1429         gfs2_glock_dq_m(rlist.rl_rgrps, rlist.rl_ghs);
1430 out_rlist_free:
1431         gfs2_rlist_free(&rlist);
1432 out:
1433         brelse(indbh);
1434         return error;
1435 }
1436
1437 static int ea_dealloc_block(struct gfs2_inode *ip)
1438 {
1439         struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1440         struct gfs2_rgrpd *rgd;
1441         struct buffer_head *dibh;
1442         struct gfs2_holder gh;
1443         int error;
1444
1445         error = gfs2_rindex_update(sdp);
1446         if (error)
1447                 return error;
1448
1449         rgd = gfs2_blk2rgrpd(sdp, ip->i_eattr, 1);
1450         if (!rgd) {
1451                 gfs2_consist_inode(ip);
1452                 return -EIO;
1453         }
1454
1455         error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh);
1456         if (error)
1457                 return error;
1458
1459         error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_DINODE + RES_STATFS +
1460                                  RES_QUOTA, 1);
1461         if (error)
1462                 goto out_gunlock;
1463
1464         gfs2_free_meta(ip, ip->i_eattr, 1);
1465
1466         ip->i_eattr = 0;
1467         gfs2_add_inode_blocks(&ip->i_inode, -1);
1468
1469         error = gfs2_meta_inode_buffer(ip, &dibh);
1470         if (!error) {
1471                 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1472                 gfs2_dinode_out(ip, dibh->b_data);
1473                 brelse(dibh);
1474         }
1475
1476         gfs2_trans_end(sdp);
1477
1478 out_gunlock:
1479         gfs2_glock_dq_uninit(&gh);
1480         return error;
1481 }
1482
1483 /**
1484  * gfs2_ea_dealloc - deallocate the extended attribute fork
1485  * @ip: the inode
1486  *
1487  * Returns: errno
1488  */
1489
1490 int gfs2_ea_dealloc(struct gfs2_inode *ip)
1491 {
1492         int error;
1493
1494         error = gfs2_rindex_update(GFS2_SB(&ip->i_inode));
1495         if (error)
1496                 return error;
1497
1498         error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
1499         if (error)
1500                 return error;
1501
1502         error = ea_foreach(ip, ea_dealloc_unstuffed, NULL);
1503         if (error)
1504                 goto out_quota;
1505
1506         if (ip->i_diskflags & GFS2_DIF_EA_INDIRECT) {
1507                 error = ea_dealloc_indirect(ip);
1508                 if (error)
1509                         goto out_quota;
1510         }
1511
1512         error = ea_dealloc_block(ip);
1513
1514 out_quota:
1515         gfs2_quota_unhold(ip);
1516         return error;
1517 }
1518
1519 static const struct xattr_handler gfs2_xattr_user_handler = {
1520         .prefix = XATTR_USER_PREFIX,
1521         .flags  = GFS2_EATYPE_USR,
1522         .get    = gfs2_xattr_get,
1523         .set    = gfs2_xattr_set,
1524 };
1525
1526 static const struct xattr_handler gfs2_xattr_security_handler = {
1527         .prefix = XATTR_SECURITY_PREFIX,
1528         .flags  = GFS2_EATYPE_SECURITY,
1529         .get    = gfs2_xattr_get,
1530         .set    = gfs2_xattr_set,
1531 };
1532
1533 const struct xattr_handler *gfs2_xattr_handlers[] = {
1534         &gfs2_xattr_user_handler,
1535         &gfs2_xattr_security_handler,
1536         &gfs2_xattr_system_handler,
1537         NULL,
1538 };
1539