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