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_meta(ip->i_gl, bh); 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_meta(ip->i_gl, dibh); 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_iter_unstuffed - copies the unstuffed xattr data to/from the 452 * request buffer 453 * @ip: The GFS2 inode 454 * @ea: The extended attribute header structure 455 * @din: The data to be copied in 456 * @dout: The data to be copied out (one of din,dout will be NULL) 457 * 458 * Returns: errno 459 */ 460 461 static int gfs2_iter_unstuffed(struct gfs2_inode *ip, struct gfs2_ea_header *ea, 462 const char *din, char *dout) 463 { 464 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 465 struct buffer_head **bh; 466 unsigned int amount = GFS2_EA_DATA_LEN(ea); 467 unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize); 468 __be64 *dataptrs = GFS2_EA2DATAPTRS(ea); 469 unsigned int x; 470 int error = 0; 471 unsigned char *pos; 472 unsigned cp_size; 473 474 bh = kcalloc(nptrs, sizeof(struct buffer_head *), GFP_NOFS); 475 if (!bh) 476 return -ENOMEM; 477 478 for (x = 0; x < nptrs; x++) { 479 error = gfs2_meta_read(ip->i_gl, be64_to_cpu(*dataptrs), 0, 480 bh + x); 481 if (error) { 482 while (x--) 483 brelse(bh[x]); 484 goto out; 485 } 486 dataptrs++; 487 } 488 489 for (x = 0; x < nptrs; x++) { 490 error = gfs2_meta_wait(sdp, bh[x]); 491 if (error) { 492 for (; x < nptrs; x++) 493 brelse(bh[x]); 494 goto out; 495 } 496 if (gfs2_metatype_check(sdp, bh[x], GFS2_METATYPE_ED)) { 497 for (; x < nptrs; x++) 498 brelse(bh[x]); 499 error = -EIO; 500 goto out; 501 } 502 503 pos = bh[x]->b_data + sizeof(struct gfs2_meta_header); 504 cp_size = (sdp->sd_jbsize > amount) ? amount : sdp->sd_jbsize; 505 506 if (dout) { 507 memcpy(dout, pos, cp_size); 508 dout += sdp->sd_jbsize; 509 } 510 511 if (din) { 512 gfs2_trans_add_meta(ip->i_gl, bh[x]); 513 memcpy(pos, din, cp_size); 514 din += sdp->sd_jbsize; 515 } 516 517 amount -= sdp->sd_jbsize; 518 brelse(bh[x]); 519 } 520 521 out: 522 kfree(bh); 523 return error; 524 } 525 526 static int gfs2_ea_get_copy(struct gfs2_inode *ip, struct gfs2_ea_location *el, 527 char *data, size_t size) 528 { 529 int ret; 530 size_t len = GFS2_EA_DATA_LEN(el->el_ea); 531 if (len > size) 532 return -ERANGE; 533 534 if (GFS2_EA_IS_STUFFED(el->el_ea)) { 535 memcpy(data, GFS2_EA2DATA(el->el_ea), len); 536 return len; 537 } 538 ret = gfs2_iter_unstuffed(ip, el->el_ea, NULL, data); 539 if (ret < 0) 540 return ret; 541 return len; 542 } 543 544 int gfs2_xattr_acl_get(struct gfs2_inode *ip, const char *name, char **ppdata) 545 { 546 struct gfs2_ea_location el; 547 int error; 548 int len; 549 char *data; 550 551 error = gfs2_ea_find(ip, GFS2_EATYPE_SYS, name, &el); 552 if (error) 553 return error; 554 if (!el.el_ea) 555 goto out; 556 if (!GFS2_EA_DATA_LEN(el.el_ea)) 557 goto out; 558 559 len = GFS2_EA_DATA_LEN(el.el_ea); 560 data = kmalloc(len, GFP_NOFS); 561 error = -ENOMEM; 562 if (data == NULL) 563 goto out; 564 565 error = gfs2_ea_get_copy(ip, &el, data, len); 566 if (error < 0) 567 kfree(data); 568 else 569 *ppdata = data; 570 out: 571 brelse(el.el_bh); 572 return error; 573 } 574 575 /** 576 * gfs2_xattr_get - Get a GFS2 extended attribute 577 * @inode: The inode 578 * @name: The name of the extended attribute 579 * @buffer: The buffer to write the result into 580 * @size: The size of the buffer 581 * @type: The type of extended attribute 582 * 583 * Returns: actual size of data on success, -errno on error 584 */ 585 static int gfs2_xattr_get(struct dentry *dentry, const char *name, 586 void *buffer, size_t size, int type) 587 { 588 struct gfs2_inode *ip = GFS2_I(dentry->d_inode); 589 struct gfs2_ea_location el; 590 int error; 591 592 if (!ip->i_eattr) 593 return -ENODATA; 594 if (strlen(name) > GFS2_EA_MAX_NAME_LEN) 595 return -EINVAL; 596 597 error = gfs2_ea_find(ip, type, name, &el); 598 if (error) 599 return error; 600 if (!el.el_ea) 601 return -ENODATA; 602 if (size) 603 error = gfs2_ea_get_copy(ip, &el, buffer, size); 604 else 605 error = GFS2_EA_DATA_LEN(el.el_ea); 606 brelse(el.el_bh); 607 608 return error; 609 } 610 611 /** 612 * ea_alloc_blk - allocates a new block for extended attributes. 613 * @ip: A pointer to the inode that's getting extended attributes 614 * @bhp: Pointer to pointer to a struct buffer_head 615 * 616 * Returns: errno 617 */ 618 619 static int ea_alloc_blk(struct gfs2_inode *ip, struct buffer_head **bhp) 620 { 621 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 622 struct gfs2_ea_header *ea; 623 unsigned int n = 1; 624 u64 block; 625 int error; 626 627 error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL); 628 if (error) 629 return error; 630 gfs2_trans_add_unrevoke(sdp, block, 1); 631 *bhp = gfs2_meta_new(ip->i_gl, block); 632 gfs2_trans_add_meta(ip->i_gl, *bhp); 633 gfs2_metatype_set(*bhp, GFS2_METATYPE_EA, GFS2_FORMAT_EA); 634 gfs2_buffer_clear_tail(*bhp, sizeof(struct gfs2_meta_header)); 635 636 ea = GFS2_EA_BH2FIRST(*bhp); 637 ea->ea_rec_len = cpu_to_be32(sdp->sd_jbsize); 638 ea->ea_type = GFS2_EATYPE_UNUSED; 639 ea->ea_flags = GFS2_EAFLAG_LAST; 640 ea->ea_num_ptrs = 0; 641 642 gfs2_add_inode_blocks(&ip->i_inode, 1); 643 644 return 0; 645 } 646 647 /** 648 * ea_write - writes the request info to an ea, creating new blocks if 649 * necessary 650 * @ip: inode that is being modified 651 * @ea: the location of the new ea in a block 652 * @er: the write request 653 * 654 * Note: does not update ea_rec_len or the GFS2_EAFLAG_LAST bin of ea_flags 655 * 656 * returns : errno 657 */ 658 659 static int ea_write(struct gfs2_inode *ip, struct gfs2_ea_header *ea, 660 struct gfs2_ea_request *er) 661 { 662 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 663 int error; 664 665 ea->ea_data_len = cpu_to_be32(er->er_data_len); 666 ea->ea_name_len = er->er_name_len; 667 ea->ea_type = er->er_type; 668 ea->__pad = 0; 669 670 memcpy(GFS2_EA2NAME(ea), er->er_name, er->er_name_len); 671 672 if (GFS2_EAREQ_SIZE_STUFFED(er) <= sdp->sd_jbsize) { 673 ea->ea_num_ptrs = 0; 674 memcpy(GFS2_EA2DATA(ea), er->er_data, er->er_data_len); 675 } else { 676 __be64 *dataptr = GFS2_EA2DATAPTRS(ea); 677 const char *data = er->er_data; 678 unsigned int data_len = er->er_data_len; 679 unsigned int copy; 680 unsigned int x; 681 682 ea->ea_num_ptrs = DIV_ROUND_UP(er->er_data_len, sdp->sd_jbsize); 683 for (x = 0; x < ea->ea_num_ptrs; x++) { 684 struct buffer_head *bh; 685 u64 block; 686 int mh_size = sizeof(struct gfs2_meta_header); 687 unsigned int n = 1; 688 689 error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL); 690 if (error) 691 return error; 692 gfs2_trans_add_unrevoke(sdp, block, 1); 693 bh = gfs2_meta_new(ip->i_gl, block); 694 gfs2_trans_add_meta(ip->i_gl, bh); 695 gfs2_metatype_set(bh, GFS2_METATYPE_ED, GFS2_FORMAT_ED); 696 697 gfs2_add_inode_blocks(&ip->i_inode, 1); 698 699 copy = data_len > sdp->sd_jbsize ? sdp->sd_jbsize : 700 data_len; 701 memcpy(bh->b_data + mh_size, data, copy); 702 if (copy < sdp->sd_jbsize) 703 memset(bh->b_data + mh_size + copy, 0, 704 sdp->sd_jbsize - copy); 705 706 *dataptr++ = cpu_to_be64(bh->b_blocknr); 707 data += copy; 708 data_len -= copy; 709 710 brelse(bh); 711 } 712 713 gfs2_assert_withdraw(sdp, !data_len); 714 } 715 716 return 0; 717 } 718 719 typedef int (*ea_skeleton_call_t) (struct gfs2_inode *ip, 720 struct gfs2_ea_request *er, void *private); 721 722 static int ea_alloc_skeleton(struct gfs2_inode *ip, struct gfs2_ea_request *er, 723 unsigned int blks, 724 ea_skeleton_call_t skeleton_call, void *private) 725 { 726 struct buffer_head *dibh; 727 int error; 728 729 error = gfs2_rindex_update(GFS2_SB(&ip->i_inode)); 730 if (error) 731 return error; 732 733 error = gfs2_quota_lock_check(ip); 734 if (error) 735 return error; 736 737 error = gfs2_inplace_reserve(ip, blks, 0); 738 if (error) 739 goto out_gunlock_q; 740 741 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), 742 blks + gfs2_rg_blocks(ip, blks) + 743 RES_DINODE + RES_STATFS + RES_QUOTA, 0); 744 if (error) 745 goto out_ipres; 746 747 error = skeleton_call(ip, er, private); 748 if (error) 749 goto out_end_trans; 750 751 error = gfs2_meta_inode_buffer(ip, &dibh); 752 if (!error) { 753 ip->i_inode.i_ctime = CURRENT_TIME; 754 gfs2_trans_add_meta(ip->i_gl, dibh); 755 gfs2_dinode_out(ip, dibh->b_data); 756 brelse(dibh); 757 } 758 759 out_end_trans: 760 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 761 out_ipres: 762 gfs2_inplace_release(ip); 763 out_gunlock_q: 764 gfs2_quota_unlock(ip); 765 return error; 766 } 767 768 static int ea_init_i(struct gfs2_inode *ip, struct gfs2_ea_request *er, 769 void *private) 770 { 771 struct buffer_head *bh; 772 int error; 773 774 error = ea_alloc_blk(ip, &bh); 775 if (error) 776 return error; 777 778 ip->i_eattr = bh->b_blocknr; 779 error = ea_write(ip, GFS2_EA_BH2FIRST(bh), er); 780 781 brelse(bh); 782 783 return error; 784 } 785 786 /** 787 * ea_init - initializes a new eattr block 788 * @ip: 789 * @er: 790 * 791 * Returns: errno 792 */ 793 794 static int ea_init(struct gfs2_inode *ip, int type, const char *name, 795 const void *data, size_t size) 796 { 797 struct gfs2_ea_request er; 798 unsigned int jbsize = GFS2_SB(&ip->i_inode)->sd_jbsize; 799 unsigned int blks = 1; 800 801 er.er_type = type; 802 er.er_name = name; 803 er.er_name_len = strlen(name); 804 er.er_data = (void *)data; 805 er.er_data_len = size; 806 807 if (GFS2_EAREQ_SIZE_STUFFED(&er) > jbsize) 808 blks += DIV_ROUND_UP(er.er_data_len, jbsize); 809 810 return ea_alloc_skeleton(ip, &er, blks, ea_init_i, NULL); 811 } 812 813 static struct gfs2_ea_header *ea_split_ea(struct gfs2_ea_header *ea) 814 { 815 u32 ea_size = GFS2_EA_SIZE(ea); 816 struct gfs2_ea_header *new = (struct gfs2_ea_header *)((char *)ea + 817 ea_size); 818 u32 new_size = GFS2_EA_REC_LEN(ea) - ea_size; 819 int last = ea->ea_flags & GFS2_EAFLAG_LAST; 820 821 ea->ea_rec_len = cpu_to_be32(ea_size); 822 ea->ea_flags ^= last; 823 824 new->ea_rec_len = cpu_to_be32(new_size); 825 new->ea_flags = last; 826 827 return new; 828 } 829 830 static void ea_set_remove_stuffed(struct gfs2_inode *ip, 831 struct gfs2_ea_location *el) 832 { 833 struct gfs2_ea_header *ea = el->el_ea; 834 struct gfs2_ea_header *prev = el->el_prev; 835 u32 len; 836 837 gfs2_trans_add_meta(ip->i_gl, el->el_bh); 838 839 if (!prev || !GFS2_EA_IS_STUFFED(ea)) { 840 ea->ea_type = GFS2_EATYPE_UNUSED; 841 return; 842 } else if (GFS2_EA2NEXT(prev) != ea) { 843 prev = GFS2_EA2NEXT(prev); 844 gfs2_assert_withdraw(GFS2_SB(&ip->i_inode), GFS2_EA2NEXT(prev) == ea); 845 } 846 847 len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea); 848 prev->ea_rec_len = cpu_to_be32(len); 849 850 if (GFS2_EA_IS_LAST(ea)) 851 prev->ea_flags |= GFS2_EAFLAG_LAST; 852 } 853 854 struct ea_set { 855 int ea_split; 856 857 struct gfs2_ea_request *es_er; 858 struct gfs2_ea_location *es_el; 859 860 struct buffer_head *es_bh; 861 struct gfs2_ea_header *es_ea; 862 }; 863 864 static int ea_set_simple_noalloc(struct gfs2_inode *ip, struct buffer_head *bh, 865 struct gfs2_ea_header *ea, struct ea_set *es) 866 { 867 struct gfs2_ea_request *er = es->es_er; 868 struct buffer_head *dibh; 869 int error; 870 871 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + 2 * RES_EATTR, 0); 872 if (error) 873 return error; 874 875 gfs2_trans_add_meta(ip->i_gl, bh); 876 877 if (es->ea_split) 878 ea = ea_split_ea(ea); 879 880 ea_write(ip, ea, er); 881 882 if (es->es_el) 883 ea_set_remove_stuffed(ip, es->es_el); 884 885 error = gfs2_meta_inode_buffer(ip, &dibh); 886 if (error) 887 goto out; 888 ip->i_inode.i_ctime = CURRENT_TIME; 889 gfs2_trans_add_meta(ip->i_gl, dibh); 890 gfs2_dinode_out(ip, dibh->b_data); 891 brelse(dibh); 892 out: 893 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 894 return error; 895 } 896 897 static int ea_set_simple_alloc(struct gfs2_inode *ip, 898 struct gfs2_ea_request *er, void *private) 899 { 900 struct ea_set *es = private; 901 struct gfs2_ea_header *ea = es->es_ea; 902 int error; 903 904 gfs2_trans_add_meta(ip->i_gl, es->es_bh); 905 906 if (es->ea_split) 907 ea = ea_split_ea(ea); 908 909 error = ea_write(ip, ea, er); 910 if (error) 911 return error; 912 913 if (es->es_el) 914 ea_set_remove_stuffed(ip, es->es_el); 915 916 return 0; 917 } 918 919 static int ea_set_simple(struct gfs2_inode *ip, struct buffer_head *bh, 920 struct gfs2_ea_header *ea, struct gfs2_ea_header *prev, 921 void *private) 922 { 923 struct ea_set *es = private; 924 unsigned int size; 925 int stuffed; 926 int error; 927 928 stuffed = ea_calc_size(GFS2_SB(&ip->i_inode), es->es_er->er_name_len, 929 es->es_er->er_data_len, &size); 930 931 if (ea->ea_type == GFS2_EATYPE_UNUSED) { 932 if (GFS2_EA_REC_LEN(ea) < size) 933 return 0; 934 if (!GFS2_EA_IS_STUFFED(ea)) { 935 error = ea_remove_unstuffed(ip, bh, ea, prev, 1); 936 if (error) 937 return error; 938 } 939 es->ea_split = 0; 940 } else if (GFS2_EA_REC_LEN(ea) - GFS2_EA_SIZE(ea) >= size) 941 es->ea_split = 1; 942 else 943 return 0; 944 945 if (stuffed) { 946 error = ea_set_simple_noalloc(ip, bh, ea, es); 947 if (error) 948 return error; 949 } else { 950 unsigned int blks; 951 952 es->es_bh = bh; 953 es->es_ea = ea; 954 blks = 2 + DIV_ROUND_UP(es->es_er->er_data_len, 955 GFS2_SB(&ip->i_inode)->sd_jbsize); 956 957 error = ea_alloc_skeleton(ip, es->es_er, blks, 958 ea_set_simple_alloc, es); 959 if (error) 960 return error; 961 } 962 963 return 1; 964 } 965 966 static int ea_set_block(struct gfs2_inode *ip, struct gfs2_ea_request *er, 967 void *private) 968 { 969 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 970 struct buffer_head *indbh, *newbh; 971 __be64 *eablk; 972 int error; 973 int mh_size = sizeof(struct gfs2_meta_header); 974 975 if (ip->i_diskflags & GFS2_DIF_EA_INDIRECT) { 976 __be64 *end; 977 978 error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT, 979 &indbh); 980 if (error) 981 return error; 982 983 if (gfs2_metatype_check(sdp, indbh, GFS2_METATYPE_IN)) { 984 error = -EIO; 985 goto out; 986 } 987 988 eablk = (__be64 *)(indbh->b_data + mh_size); 989 end = eablk + sdp->sd_inptrs; 990 991 for (; eablk < end; eablk++) 992 if (!*eablk) 993 break; 994 995 if (eablk == end) { 996 error = -ENOSPC; 997 goto out; 998 } 999 1000 gfs2_trans_add_meta(ip->i_gl, indbh); 1001 } else { 1002 u64 blk; 1003 unsigned int n = 1; 1004 error = gfs2_alloc_blocks(ip, &blk, &n, 0, NULL); 1005 if (error) 1006 return error; 1007 gfs2_trans_add_unrevoke(sdp, blk, 1); 1008 indbh = gfs2_meta_new(ip->i_gl, blk); 1009 gfs2_trans_add_meta(ip->i_gl, indbh); 1010 gfs2_metatype_set(indbh, GFS2_METATYPE_IN, GFS2_FORMAT_IN); 1011 gfs2_buffer_clear_tail(indbh, mh_size); 1012 1013 eablk = (__be64 *)(indbh->b_data + mh_size); 1014 *eablk = cpu_to_be64(ip->i_eattr); 1015 ip->i_eattr = blk; 1016 ip->i_diskflags |= GFS2_DIF_EA_INDIRECT; 1017 gfs2_add_inode_blocks(&ip->i_inode, 1); 1018 1019 eablk++; 1020 } 1021 1022 error = ea_alloc_blk(ip, &newbh); 1023 if (error) 1024 goto out; 1025 1026 *eablk = cpu_to_be64((u64)newbh->b_blocknr); 1027 error = ea_write(ip, GFS2_EA_BH2FIRST(newbh), er); 1028 brelse(newbh); 1029 if (error) 1030 goto out; 1031 1032 if (private) 1033 ea_set_remove_stuffed(ip, private); 1034 1035 out: 1036 brelse(indbh); 1037 return error; 1038 } 1039 1040 static int ea_set_i(struct gfs2_inode *ip, int type, const char *name, 1041 const void *value, size_t size, struct gfs2_ea_location *el) 1042 { 1043 struct gfs2_ea_request er; 1044 struct ea_set es; 1045 unsigned int blks = 2; 1046 int error; 1047 1048 er.er_type = type; 1049 er.er_name = name; 1050 er.er_data = (void *)value; 1051 er.er_name_len = strlen(name); 1052 er.er_data_len = size; 1053 1054 memset(&es, 0, sizeof(struct ea_set)); 1055 es.es_er = &er; 1056 es.es_el = el; 1057 1058 error = ea_foreach(ip, ea_set_simple, &es); 1059 if (error > 0) 1060 return 0; 1061 if (error) 1062 return error; 1063 1064 if (!(ip->i_diskflags & GFS2_DIF_EA_INDIRECT)) 1065 blks++; 1066 if (GFS2_EAREQ_SIZE_STUFFED(&er) > GFS2_SB(&ip->i_inode)->sd_jbsize) 1067 blks += DIV_ROUND_UP(er.er_data_len, GFS2_SB(&ip->i_inode)->sd_jbsize); 1068 1069 return ea_alloc_skeleton(ip, &er, blks, ea_set_block, el); 1070 } 1071 1072 static int ea_set_remove_unstuffed(struct gfs2_inode *ip, 1073 struct gfs2_ea_location *el) 1074 { 1075 if (el->el_prev && GFS2_EA2NEXT(el->el_prev) != el->el_ea) { 1076 el->el_prev = GFS2_EA2NEXT(el->el_prev); 1077 gfs2_assert_withdraw(GFS2_SB(&ip->i_inode), 1078 GFS2_EA2NEXT(el->el_prev) == el->el_ea); 1079 } 1080 1081 return ea_remove_unstuffed(ip, el->el_bh, el->el_ea, el->el_prev, 0); 1082 } 1083 1084 static int ea_remove_stuffed(struct gfs2_inode *ip, struct gfs2_ea_location *el) 1085 { 1086 struct gfs2_ea_header *ea = el->el_ea; 1087 struct gfs2_ea_header *prev = el->el_prev; 1088 struct buffer_head *dibh; 1089 int error; 1090 1091 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + RES_EATTR, 0); 1092 if (error) 1093 return error; 1094 1095 gfs2_trans_add_meta(ip->i_gl, el->el_bh); 1096 1097 if (prev) { 1098 u32 len; 1099 1100 len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea); 1101 prev->ea_rec_len = cpu_to_be32(len); 1102 1103 if (GFS2_EA_IS_LAST(ea)) 1104 prev->ea_flags |= GFS2_EAFLAG_LAST; 1105 } else { 1106 ea->ea_type = GFS2_EATYPE_UNUSED; 1107 } 1108 1109 error = gfs2_meta_inode_buffer(ip, &dibh); 1110 if (!error) { 1111 ip->i_inode.i_ctime = CURRENT_TIME; 1112 gfs2_trans_add_meta(ip->i_gl, dibh); 1113 gfs2_dinode_out(ip, dibh->b_data); 1114 brelse(dibh); 1115 } 1116 1117 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 1118 1119 return error; 1120 } 1121 1122 /** 1123 * gfs2_xattr_remove - Remove a GFS2 extended attribute 1124 * @ip: The inode 1125 * @type: The type of the extended attribute 1126 * @name: The name of the extended attribute 1127 * 1128 * This is not called directly by the VFS since we use the (common) 1129 * scheme of making a "set with NULL data" mean a remove request. Note 1130 * that this is different from a set with zero length data. 1131 * 1132 * Returns: 0, or errno on failure 1133 */ 1134 1135 static int gfs2_xattr_remove(struct gfs2_inode *ip, int type, const char *name) 1136 { 1137 struct gfs2_ea_location el; 1138 int error; 1139 1140 if (!ip->i_eattr) 1141 return -ENODATA; 1142 1143 error = gfs2_ea_find(ip, type, name, &el); 1144 if (error) 1145 return error; 1146 if (!el.el_ea) 1147 return -ENODATA; 1148 1149 if (GFS2_EA_IS_STUFFED(el.el_ea)) 1150 error = ea_remove_stuffed(ip, &el); 1151 else 1152 error = ea_remove_unstuffed(ip, el.el_bh, el.el_ea, el.el_prev, 0); 1153 1154 brelse(el.el_bh); 1155 1156 return error; 1157 } 1158 1159 /** 1160 * __gfs2_xattr_set - Set (or remove) a GFS2 extended attribute 1161 * @ip: The inode 1162 * @name: The name of the extended attribute 1163 * @value: The value of the extended attribute (NULL for remove) 1164 * @size: The size of the @value argument 1165 * @flags: Create or Replace 1166 * @type: The type of the extended attribute 1167 * 1168 * See gfs2_xattr_remove() for details of the removal of xattrs. 1169 * 1170 * Returns: 0 or errno on failure 1171 */ 1172 1173 int __gfs2_xattr_set(struct inode *inode, const char *name, 1174 const void *value, size_t size, int flags, int type) 1175 { 1176 struct gfs2_inode *ip = GFS2_I(inode); 1177 struct gfs2_sbd *sdp = GFS2_SB(inode); 1178 struct gfs2_ea_location el; 1179 unsigned int namel = strlen(name); 1180 int error; 1181 1182 if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) 1183 return -EPERM; 1184 if (namel > GFS2_EA_MAX_NAME_LEN) 1185 return -ERANGE; 1186 1187 if (value == NULL) 1188 return gfs2_xattr_remove(ip, type, name); 1189 1190 if (ea_check_size(sdp, namel, size)) 1191 return -ERANGE; 1192 1193 if (!ip->i_eattr) { 1194 if (flags & XATTR_REPLACE) 1195 return -ENODATA; 1196 return ea_init(ip, type, name, value, size); 1197 } 1198 1199 error = gfs2_ea_find(ip, type, name, &el); 1200 if (error) 1201 return error; 1202 1203 if (el.el_ea) { 1204 if (ip->i_diskflags & GFS2_DIF_APPENDONLY) { 1205 brelse(el.el_bh); 1206 return -EPERM; 1207 } 1208 1209 error = -EEXIST; 1210 if (!(flags & XATTR_CREATE)) { 1211 int unstuffed = !GFS2_EA_IS_STUFFED(el.el_ea); 1212 error = ea_set_i(ip, type, name, value, size, &el); 1213 if (!error && unstuffed) 1214 ea_set_remove_unstuffed(ip, &el); 1215 } 1216 1217 brelse(el.el_bh); 1218 return error; 1219 } 1220 1221 error = -ENODATA; 1222 if (!(flags & XATTR_REPLACE)) 1223 error = ea_set_i(ip, type, name, value, size, NULL); 1224 1225 return error; 1226 } 1227 1228 static int gfs2_xattr_set(struct dentry *dentry, const char *name, 1229 const void *value, size_t size, int flags, int type) 1230 { 1231 return __gfs2_xattr_set(dentry->d_inode, name, value, 1232 size, flags, type); 1233 } 1234 1235 1236 static int ea_acl_chmod_unstuffed(struct gfs2_inode *ip, 1237 struct gfs2_ea_header *ea, char *data) 1238 { 1239 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1240 unsigned int amount = GFS2_EA_DATA_LEN(ea); 1241 unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize); 1242 int ret; 1243 1244 ret = gfs2_trans_begin(sdp, nptrs + RES_DINODE, 0); 1245 if (ret) 1246 return ret; 1247 1248 ret = gfs2_iter_unstuffed(ip, ea, data, NULL); 1249 gfs2_trans_end(sdp); 1250 1251 return ret; 1252 } 1253 1254 int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data) 1255 { 1256 struct inode *inode = &ip->i_inode; 1257 struct gfs2_sbd *sdp = GFS2_SB(inode); 1258 struct gfs2_ea_location el; 1259 int error; 1260 1261 error = gfs2_ea_find(ip, GFS2_EATYPE_SYS, GFS2_POSIX_ACL_ACCESS, &el); 1262 if (error) 1263 return error; 1264 1265 if (GFS2_EA_IS_STUFFED(el.el_ea)) { 1266 error = gfs2_trans_begin(sdp, RES_DINODE + RES_EATTR, 0); 1267 if (error == 0) { 1268 gfs2_trans_add_meta(ip->i_gl, el.el_bh); 1269 memcpy(GFS2_EA2DATA(el.el_ea), data, 1270 GFS2_EA_DATA_LEN(el.el_ea)); 1271 } 1272 } else { 1273 error = ea_acl_chmod_unstuffed(ip, el.el_ea, data); 1274 } 1275 1276 brelse(el.el_bh); 1277 if (error) 1278 return error; 1279 1280 error = gfs2_setattr_simple(inode, attr); 1281 gfs2_trans_end(sdp); 1282 return error; 1283 } 1284 1285 static int ea_dealloc_indirect(struct gfs2_inode *ip) 1286 { 1287 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1288 struct gfs2_rgrp_list rlist; 1289 struct buffer_head *indbh, *dibh; 1290 __be64 *eablk, *end; 1291 unsigned int rg_blocks = 0; 1292 u64 bstart = 0; 1293 unsigned int blen = 0; 1294 unsigned int blks = 0; 1295 unsigned int x; 1296 int error; 1297 1298 error = gfs2_rindex_update(sdp); 1299 if (error) 1300 return error; 1301 1302 memset(&rlist, 0, sizeof(struct gfs2_rgrp_list)); 1303 1304 error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT, &indbh); 1305 if (error) 1306 return error; 1307 1308 if (gfs2_metatype_check(sdp, indbh, GFS2_METATYPE_IN)) { 1309 error = -EIO; 1310 goto out; 1311 } 1312 1313 eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header)); 1314 end = eablk + sdp->sd_inptrs; 1315 1316 for (; eablk < end; eablk++) { 1317 u64 bn; 1318 1319 if (!*eablk) 1320 break; 1321 bn = be64_to_cpu(*eablk); 1322 1323 if (bstart + blen == bn) 1324 blen++; 1325 else { 1326 if (bstart) 1327 gfs2_rlist_add(ip, &rlist, bstart); 1328 bstart = bn; 1329 blen = 1; 1330 } 1331 blks++; 1332 } 1333 if (bstart) 1334 gfs2_rlist_add(ip, &rlist, bstart); 1335 else 1336 goto out; 1337 1338 gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE); 1339 1340 for (x = 0; x < rlist.rl_rgrps; x++) { 1341 struct gfs2_rgrpd *rgd; 1342 rgd = rlist.rl_ghs[x].gh_gl->gl_object; 1343 rg_blocks += rgd->rd_length; 1344 } 1345 1346 error = gfs2_glock_nq_m(rlist.rl_rgrps, rlist.rl_ghs); 1347 if (error) 1348 goto out_rlist_free; 1349 1350 error = gfs2_trans_begin(sdp, rg_blocks + RES_DINODE + RES_INDIRECT + 1351 RES_STATFS + RES_QUOTA, blks); 1352 if (error) 1353 goto out_gunlock; 1354 1355 gfs2_trans_add_meta(ip->i_gl, indbh); 1356 1357 eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header)); 1358 bstart = 0; 1359 blen = 0; 1360 1361 for (; eablk < end; eablk++) { 1362 u64 bn; 1363 1364 if (!*eablk) 1365 break; 1366 bn = be64_to_cpu(*eablk); 1367 1368 if (bstart + blen == bn) 1369 blen++; 1370 else { 1371 if (bstart) 1372 gfs2_free_meta(ip, bstart, blen); 1373 bstart = bn; 1374 blen = 1; 1375 } 1376 1377 *eablk = 0; 1378 gfs2_add_inode_blocks(&ip->i_inode, -1); 1379 } 1380 if (bstart) 1381 gfs2_free_meta(ip, bstart, blen); 1382 1383 ip->i_diskflags &= ~GFS2_DIF_EA_INDIRECT; 1384 1385 error = gfs2_meta_inode_buffer(ip, &dibh); 1386 if (!error) { 1387 gfs2_trans_add_meta(ip->i_gl, dibh); 1388 gfs2_dinode_out(ip, dibh->b_data); 1389 brelse(dibh); 1390 } 1391 1392 gfs2_trans_end(sdp); 1393 1394 out_gunlock: 1395 gfs2_glock_dq_m(rlist.rl_rgrps, rlist.rl_ghs); 1396 out_rlist_free: 1397 gfs2_rlist_free(&rlist); 1398 out: 1399 brelse(indbh); 1400 return error; 1401 } 1402 1403 static int ea_dealloc_block(struct gfs2_inode *ip) 1404 { 1405 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1406 struct gfs2_rgrpd *rgd; 1407 struct buffer_head *dibh; 1408 struct gfs2_holder gh; 1409 int error; 1410 1411 error = gfs2_rindex_update(sdp); 1412 if (error) 1413 return error; 1414 1415 rgd = gfs2_blk2rgrpd(sdp, ip->i_eattr, 1); 1416 if (!rgd) { 1417 gfs2_consist_inode(ip); 1418 return -EIO; 1419 } 1420 1421 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh); 1422 if (error) 1423 return error; 1424 1425 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_DINODE + RES_STATFS + 1426 RES_QUOTA, 1); 1427 if (error) 1428 goto out_gunlock; 1429 1430 gfs2_free_meta(ip, ip->i_eattr, 1); 1431 1432 ip->i_eattr = 0; 1433 gfs2_add_inode_blocks(&ip->i_inode, -1); 1434 1435 error = gfs2_meta_inode_buffer(ip, &dibh); 1436 if (!error) { 1437 gfs2_trans_add_meta(ip->i_gl, dibh); 1438 gfs2_dinode_out(ip, dibh->b_data); 1439 brelse(dibh); 1440 } 1441 1442 gfs2_trans_end(sdp); 1443 1444 out_gunlock: 1445 gfs2_glock_dq_uninit(&gh); 1446 return error; 1447 } 1448 1449 /** 1450 * gfs2_ea_dealloc - deallocate the extended attribute fork 1451 * @ip: the inode 1452 * 1453 * Returns: errno 1454 */ 1455 1456 int gfs2_ea_dealloc(struct gfs2_inode *ip) 1457 { 1458 int error; 1459 1460 error = gfs2_rindex_update(GFS2_SB(&ip->i_inode)); 1461 if (error) 1462 return error; 1463 1464 error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE); 1465 if (error) 1466 return error; 1467 1468 error = ea_foreach(ip, ea_dealloc_unstuffed, NULL); 1469 if (error) 1470 goto out_quota; 1471 1472 if (ip->i_diskflags & GFS2_DIF_EA_INDIRECT) { 1473 error = ea_dealloc_indirect(ip); 1474 if (error) 1475 goto out_quota; 1476 } 1477 1478 error = ea_dealloc_block(ip); 1479 1480 out_quota: 1481 gfs2_quota_unhold(ip); 1482 return error; 1483 } 1484 1485 static const struct xattr_handler gfs2_xattr_user_handler = { 1486 .prefix = XATTR_USER_PREFIX, 1487 .flags = GFS2_EATYPE_USR, 1488 .get = gfs2_xattr_get, 1489 .set = gfs2_xattr_set, 1490 }; 1491 1492 static const struct xattr_handler gfs2_xattr_security_handler = { 1493 .prefix = XATTR_SECURITY_PREFIX, 1494 .flags = GFS2_EATYPE_SECURITY, 1495 .get = gfs2_xattr_get, 1496 .set = gfs2_xattr_set, 1497 }; 1498 1499 const struct xattr_handler *gfs2_xattr_handlers[] = { 1500 &gfs2_xattr_user_handler, 1501 &gfs2_xattr_security_handler, 1502 &gfs2_xattr_system_handler, 1503 NULL, 1504 }; 1505 1506