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_UID_QUOTA_CHANGE, NO_GID_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 gfs2_alloc_parms ap = { .target = blks }; 727 struct buffer_head *dibh; 728 int error; 729 730 error = gfs2_rindex_update(GFS2_SB(&ip->i_inode)); 731 if (error) 732 return error; 733 734 error = gfs2_quota_lock_check(ip); 735 if (error) 736 return error; 737 738 error = gfs2_inplace_reserve(ip, &ap); 739 if (error) 740 goto out_gunlock_q; 741 742 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), 743 blks + gfs2_rg_blocks(ip, blks) + 744 RES_DINODE + RES_STATFS + RES_QUOTA, 0); 745 if (error) 746 goto out_ipres; 747 748 error = skeleton_call(ip, er, private); 749 if (error) 750 goto out_end_trans; 751 752 error = gfs2_meta_inode_buffer(ip, &dibh); 753 if (!error) { 754 ip->i_inode.i_ctime = CURRENT_TIME; 755 gfs2_trans_add_meta(ip->i_gl, dibh); 756 gfs2_dinode_out(ip, dibh->b_data); 757 brelse(dibh); 758 } 759 760 out_end_trans: 761 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 762 out_ipres: 763 gfs2_inplace_release(ip); 764 out_gunlock_q: 765 gfs2_quota_unlock(ip); 766 return error; 767 } 768 769 static int ea_init_i(struct gfs2_inode *ip, struct gfs2_ea_request *er, 770 void *private) 771 { 772 struct buffer_head *bh; 773 int error; 774 775 error = ea_alloc_blk(ip, &bh); 776 if (error) 777 return error; 778 779 ip->i_eattr = bh->b_blocknr; 780 error = ea_write(ip, GFS2_EA_BH2FIRST(bh), er); 781 782 brelse(bh); 783 784 return error; 785 } 786 787 /** 788 * ea_init - initializes a new eattr block 789 * @ip: 790 * @er: 791 * 792 * Returns: errno 793 */ 794 795 static int ea_init(struct gfs2_inode *ip, int type, const char *name, 796 const void *data, size_t size) 797 { 798 struct gfs2_ea_request er; 799 unsigned int jbsize = GFS2_SB(&ip->i_inode)->sd_jbsize; 800 unsigned int blks = 1; 801 802 er.er_type = type; 803 er.er_name = name; 804 er.er_name_len = strlen(name); 805 er.er_data = (void *)data; 806 er.er_data_len = size; 807 808 if (GFS2_EAREQ_SIZE_STUFFED(&er) > jbsize) 809 blks += DIV_ROUND_UP(er.er_data_len, jbsize); 810 811 return ea_alloc_skeleton(ip, &er, blks, ea_init_i, NULL); 812 } 813 814 static struct gfs2_ea_header *ea_split_ea(struct gfs2_ea_header *ea) 815 { 816 u32 ea_size = GFS2_EA_SIZE(ea); 817 struct gfs2_ea_header *new = (struct gfs2_ea_header *)((char *)ea + 818 ea_size); 819 u32 new_size = GFS2_EA_REC_LEN(ea) - ea_size; 820 int last = ea->ea_flags & GFS2_EAFLAG_LAST; 821 822 ea->ea_rec_len = cpu_to_be32(ea_size); 823 ea->ea_flags ^= last; 824 825 new->ea_rec_len = cpu_to_be32(new_size); 826 new->ea_flags = last; 827 828 return new; 829 } 830 831 static void ea_set_remove_stuffed(struct gfs2_inode *ip, 832 struct gfs2_ea_location *el) 833 { 834 struct gfs2_ea_header *ea = el->el_ea; 835 struct gfs2_ea_header *prev = el->el_prev; 836 u32 len; 837 838 gfs2_trans_add_meta(ip->i_gl, el->el_bh); 839 840 if (!prev || !GFS2_EA_IS_STUFFED(ea)) { 841 ea->ea_type = GFS2_EATYPE_UNUSED; 842 return; 843 } else if (GFS2_EA2NEXT(prev) != ea) { 844 prev = GFS2_EA2NEXT(prev); 845 gfs2_assert_withdraw(GFS2_SB(&ip->i_inode), GFS2_EA2NEXT(prev) == ea); 846 } 847 848 len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea); 849 prev->ea_rec_len = cpu_to_be32(len); 850 851 if (GFS2_EA_IS_LAST(ea)) 852 prev->ea_flags |= GFS2_EAFLAG_LAST; 853 } 854 855 struct ea_set { 856 int ea_split; 857 858 struct gfs2_ea_request *es_er; 859 struct gfs2_ea_location *es_el; 860 861 struct buffer_head *es_bh; 862 struct gfs2_ea_header *es_ea; 863 }; 864 865 static int ea_set_simple_noalloc(struct gfs2_inode *ip, struct buffer_head *bh, 866 struct gfs2_ea_header *ea, struct ea_set *es) 867 { 868 struct gfs2_ea_request *er = es->es_er; 869 struct buffer_head *dibh; 870 int error; 871 872 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + 2 * RES_EATTR, 0); 873 if (error) 874 return error; 875 876 gfs2_trans_add_meta(ip->i_gl, bh); 877 878 if (es->ea_split) 879 ea = ea_split_ea(ea); 880 881 ea_write(ip, ea, er); 882 883 if (es->es_el) 884 ea_set_remove_stuffed(ip, es->es_el); 885 886 error = gfs2_meta_inode_buffer(ip, &dibh); 887 if (error) 888 goto out; 889 ip->i_inode.i_ctime = CURRENT_TIME; 890 gfs2_trans_add_meta(ip->i_gl, dibh); 891 gfs2_dinode_out(ip, dibh->b_data); 892 brelse(dibh); 893 out: 894 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 895 return error; 896 } 897 898 static int ea_set_simple_alloc(struct gfs2_inode *ip, 899 struct gfs2_ea_request *er, void *private) 900 { 901 struct ea_set *es = private; 902 struct gfs2_ea_header *ea = es->es_ea; 903 int error; 904 905 gfs2_trans_add_meta(ip->i_gl, es->es_bh); 906 907 if (es->ea_split) 908 ea = ea_split_ea(ea); 909 910 error = ea_write(ip, ea, er); 911 if (error) 912 return error; 913 914 if (es->es_el) 915 ea_set_remove_stuffed(ip, es->es_el); 916 917 return 0; 918 } 919 920 static int ea_set_simple(struct gfs2_inode *ip, struct buffer_head *bh, 921 struct gfs2_ea_header *ea, struct gfs2_ea_header *prev, 922 void *private) 923 { 924 struct ea_set *es = private; 925 unsigned int size; 926 int stuffed; 927 int error; 928 929 stuffed = ea_calc_size(GFS2_SB(&ip->i_inode), es->es_er->er_name_len, 930 es->es_er->er_data_len, &size); 931 932 if (ea->ea_type == GFS2_EATYPE_UNUSED) { 933 if (GFS2_EA_REC_LEN(ea) < size) 934 return 0; 935 if (!GFS2_EA_IS_STUFFED(ea)) { 936 error = ea_remove_unstuffed(ip, bh, ea, prev, 1); 937 if (error) 938 return error; 939 } 940 es->ea_split = 0; 941 } else if (GFS2_EA_REC_LEN(ea) - GFS2_EA_SIZE(ea) >= size) 942 es->ea_split = 1; 943 else 944 return 0; 945 946 if (stuffed) { 947 error = ea_set_simple_noalloc(ip, bh, ea, es); 948 if (error) 949 return error; 950 } else { 951 unsigned int blks; 952 953 es->es_bh = bh; 954 es->es_ea = ea; 955 blks = 2 + DIV_ROUND_UP(es->es_er->er_data_len, 956 GFS2_SB(&ip->i_inode)->sd_jbsize); 957 958 error = ea_alloc_skeleton(ip, es->es_er, blks, 959 ea_set_simple_alloc, es); 960 if (error) 961 return error; 962 } 963 964 return 1; 965 } 966 967 static int ea_set_block(struct gfs2_inode *ip, struct gfs2_ea_request *er, 968 void *private) 969 { 970 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 971 struct buffer_head *indbh, *newbh; 972 __be64 *eablk; 973 int error; 974 int mh_size = sizeof(struct gfs2_meta_header); 975 976 if (ip->i_diskflags & GFS2_DIF_EA_INDIRECT) { 977 __be64 *end; 978 979 error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT, 980 &indbh); 981 if (error) 982 return error; 983 984 if (gfs2_metatype_check(sdp, indbh, GFS2_METATYPE_IN)) { 985 error = -EIO; 986 goto out; 987 } 988 989 eablk = (__be64 *)(indbh->b_data + mh_size); 990 end = eablk + sdp->sd_inptrs; 991 992 for (; eablk < end; eablk++) 993 if (!*eablk) 994 break; 995 996 if (eablk == end) { 997 error = -ENOSPC; 998 goto out; 999 } 1000 1001 gfs2_trans_add_meta(ip->i_gl, indbh); 1002 } else { 1003 u64 blk; 1004 unsigned int n = 1; 1005 error = gfs2_alloc_blocks(ip, &blk, &n, 0, NULL); 1006 if (error) 1007 return error; 1008 gfs2_trans_add_unrevoke(sdp, blk, 1); 1009 indbh = gfs2_meta_new(ip->i_gl, blk); 1010 gfs2_trans_add_meta(ip->i_gl, indbh); 1011 gfs2_metatype_set(indbh, GFS2_METATYPE_IN, GFS2_FORMAT_IN); 1012 gfs2_buffer_clear_tail(indbh, mh_size); 1013 1014 eablk = (__be64 *)(indbh->b_data + mh_size); 1015 *eablk = cpu_to_be64(ip->i_eattr); 1016 ip->i_eattr = blk; 1017 ip->i_diskflags |= GFS2_DIF_EA_INDIRECT; 1018 gfs2_add_inode_blocks(&ip->i_inode, 1); 1019 1020 eablk++; 1021 } 1022 1023 error = ea_alloc_blk(ip, &newbh); 1024 if (error) 1025 goto out; 1026 1027 *eablk = cpu_to_be64((u64)newbh->b_blocknr); 1028 error = ea_write(ip, GFS2_EA_BH2FIRST(newbh), er); 1029 brelse(newbh); 1030 if (error) 1031 goto out; 1032 1033 if (private) 1034 ea_set_remove_stuffed(ip, private); 1035 1036 out: 1037 brelse(indbh); 1038 return error; 1039 } 1040 1041 static int ea_set_i(struct gfs2_inode *ip, int type, const char *name, 1042 const void *value, size_t size, struct gfs2_ea_location *el) 1043 { 1044 struct gfs2_ea_request er; 1045 struct ea_set es; 1046 unsigned int blks = 2; 1047 int error; 1048 1049 er.er_type = type; 1050 er.er_name = name; 1051 er.er_data = (void *)value; 1052 er.er_name_len = strlen(name); 1053 er.er_data_len = size; 1054 1055 memset(&es, 0, sizeof(struct ea_set)); 1056 es.es_er = &er; 1057 es.es_el = el; 1058 1059 error = ea_foreach(ip, ea_set_simple, &es); 1060 if (error > 0) 1061 return 0; 1062 if (error) 1063 return error; 1064 1065 if (!(ip->i_diskflags & GFS2_DIF_EA_INDIRECT)) 1066 blks++; 1067 if (GFS2_EAREQ_SIZE_STUFFED(&er) > GFS2_SB(&ip->i_inode)->sd_jbsize) 1068 blks += DIV_ROUND_UP(er.er_data_len, GFS2_SB(&ip->i_inode)->sd_jbsize); 1069 1070 return ea_alloc_skeleton(ip, &er, blks, ea_set_block, el); 1071 } 1072 1073 static int ea_set_remove_unstuffed(struct gfs2_inode *ip, 1074 struct gfs2_ea_location *el) 1075 { 1076 if (el->el_prev && GFS2_EA2NEXT(el->el_prev) != el->el_ea) { 1077 el->el_prev = GFS2_EA2NEXT(el->el_prev); 1078 gfs2_assert_withdraw(GFS2_SB(&ip->i_inode), 1079 GFS2_EA2NEXT(el->el_prev) == el->el_ea); 1080 } 1081 1082 return ea_remove_unstuffed(ip, el->el_bh, el->el_ea, el->el_prev, 0); 1083 } 1084 1085 static int ea_remove_stuffed(struct gfs2_inode *ip, struct gfs2_ea_location *el) 1086 { 1087 struct gfs2_ea_header *ea = el->el_ea; 1088 struct gfs2_ea_header *prev = el->el_prev; 1089 struct buffer_head *dibh; 1090 int error; 1091 1092 error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + RES_EATTR, 0); 1093 if (error) 1094 return error; 1095 1096 gfs2_trans_add_meta(ip->i_gl, el->el_bh); 1097 1098 if (prev) { 1099 u32 len; 1100 1101 len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea); 1102 prev->ea_rec_len = cpu_to_be32(len); 1103 1104 if (GFS2_EA_IS_LAST(ea)) 1105 prev->ea_flags |= GFS2_EAFLAG_LAST; 1106 } else { 1107 ea->ea_type = GFS2_EATYPE_UNUSED; 1108 } 1109 1110 error = gfs2_meta_inode_buffer(ip, &dibh); 1111 if (!error) { 1112 ip->i_inode.i_ctime = CURRENT_TIME; 1113 gfs2_trans_add_meta(ip->i_gl, dibh); 1114 gfs2_dinode_out(ip, dibh->b_data); 1115 brelse(dibh); 1116 } 1117 1118 gfs2_trans_end(GFS2_SB(&ip->i_inode)); 1119 1120 return error; 1121 } 1122 1123 /** 1124 * gfs2_xattr_remove - Remove a GFS2 extended attribute 1125 * @ip: The inode 1126 * @type: The type of the extended attribute 1127 * @name: The name of the extended attribute 1128 * 1129 * This is not called directly by the VFS since we use the (common) 1130 * scheme of making a "set with NULL data" mean a remove request. Note 1131 * that this is different from a set with zero length data. 1132 * 1133 * Returns: 0, or errno on failure 1134 */ 1135 1136 static int gfs2_xattr_remove(struct gfs2_inode *ip, int type, const char *name) 1137 { 1138 struct gfs2_ea_location el; 1139 int error; 1140 1141 if (!ip->i_eattr) 1142 return -ENODATA; 1143 1144 error = gfs2_ea_find(ip, type, name, &el); 1145 if (error) 1146 return error; 1147 if (!el.el_ea) 1148 return -ENODATA; 1149 1150 if (GFS2_EA_IS_STUFFED(el.el_ea)) 1151 error = ea_remove_stuffed(ip, &el); 1152 else 1153 error = ea_remove_unstuffed(ip, el.el_bh, el.el_ea, el.el_prev, 0); 1154 1155 brelse(el.el_bh); 1156 1157 return error; 1158 } 1159 1160 /** 1161 * __gfs2_xattr_set - Set (or remove) a GFS2 extended attribute 1162 * @ip: The inode 1163 * @name: The name of the extended attribute 1164 * @value: The value of the extended attribute (NULL for remove) 1165 * @size: The size of the @value argument 1166 * @flags: Create or Replace 1167 * @type: The type of the extended attribute 1168 * 1169 * See gfs2_xattr_remove() for details of the removal of xattrs. 1170 * 1171 * Returns: 0 or errno on failure 1172 */ 1173 1174 int __gfs2_xattr_set(struct inode *inode, const char *name, 1175 const void *value, size_t size, int flags, int type) 1176 { 1177 struct gfs2_inode *ip = GFS2_I(inode); 1178 struct gfs2_sbd *sdp = GFS2_SB(inode); 1179 struct gfs2_ea_location el; 1180 unsigned int namel = strlen(name); 1181 int error; 1182 1183 if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) 1184 return -EPERM; 1185 if (namel > GFS2_EA_MAX_NAME_LEN) 1186 return -ERANGE; 1187 1188 if (value == NULL) 1189 return gfs2_xattr_remove(ip, type, name); 1190 1191 if (ea_check_size(sdp, namel, size)) 1192 return -ERANGE; 1193 1194 if (!ip->i_eattr) { 1195 if (flags & XATTR_REPLACE) 1196 return -ENODATA; 1197 return ea_init(ip, type, name, value, size); 1198 } 1199 1200 error = gfs2_ea_find(ip, type, name, &el); 1201 if (error) 1202 return error; 1203 1204 if (el.el_ea) { 1205 if (ip->i_diskflags & GFS2_DIF_APPENDONLY) { 1206 brelse(el.el_bh); 1207 return -EPERM; 1208 } 1209 1210 error = -EEXIST; 1211 if (!(flags & XATTR_CREATE)) { 1212 int unstuffed = !GFS2_EA_IS_STUFFED(el.el_ea); 1213 error = ea_set_i(ip, type, name, value, size, &el); 1214 if (!error && unstuffed) 1215 ea_set_remove_unstuffed(ip, &el); 1216 } 1217 1218 brelse(el.el_bh); 1219 return error; 1220 } 1221 1222 error = -ENODATA; 1223 if (!(flags & XATTR_REPLACE)) 1224 error = ea_set_i(ip, type, name, value, size, NULL); 1225 1226 return error; 1227 } 1228 1229 static int gfs2_xattr_set(struct dentry *dentry, const char *name, 1230 const void *value, size_t size, int flags, int type) 1231 { 1232 return __gfs2_xattr_set(dentry->d_inode, name, value, 1233 size, flags, type); 1234 } 1235 1236 1237 static int ea_acl_chmod_unstuffed(struct gfs2_inode *ip, 1238 struct gfs2_ea_header *ea, char *data) 1239 { 1240 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1241 unsigned int amount = GFS2_EA_DATA_LEN(ea); 1242 unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize); 1243 int ret; 1244 1245 ret = gfs2_trans_begin(sdp, nptrs + RES_DINODE, 0); 1246 if (ret) 1247 return ret; 1248 1249 ret = gfs2_iter_unstuffed(ip, ea, data, NULL); 1250 gfs2_trans_end(sdp); 1251 1252 return ret; 1253 } 1254 1255 int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data) 1256 { 1257 struct inode *inode = &ip->i_inode; 1258 struct gfs2_sbd *sdp = GFS2_SB(inode); 1259 struct gfs2_ea_location el; 1260 int error; 1261 1262 error = gfs2_ea_find(ip, GFS2_EATYPE_SYS, GFS2_POSIX_ACL_ACCESS, &el); 1263 if (error) 1264 return error; 1265 1266 if (GFS2_EA_IS_STUFFED(el.el_ea)) { 1267 error = gfs2_trans_begin(sdp, RES_DINODE + RES_EATTR, 0); 1268 if (error == 0) { 1269 gfs2_trans_add_meta(ip->i_gl, el.el_bh); 1270 memcpy(GFS2_EA2DATA(el.el_ea), data, 1271 GFS2_EA_DATA_LEN(el.el_ea)); 1272 } 1273 } else { 1274 error = ea_acl_chmod_unstuffed(ip, el.el_ea, data); 1275 } 1276 1277 brelse(el.el_bh); 1278 if (error) 1279 return error; 1280 1281 error = gfs2_setattr_simple(inode, attr); 1282 gfs2_trans_end(sdp); 1283 return error; 1284 } 1285 1286 static int ea_dealloc_indirect(struct gfs2_inode *ip) 1287 { 1288 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1289 struct gfs2_rgrp_list rlist; 1290 struct buffer_head *indbh, *dibh; 1291 __be64 *eablk, *end; 1292 unsigned int rg_blocks = 0; 1293 u64 bstart = 0; 1294 unsigned int blen = 0; 1295 unsigned int blks = 0; 1296 unsigned int x; 1297 int error; 1298 1299 error = gfs2_rindex_update(sdp); 1300 if (error) 1301 return error; 1302 1303 memset(&rlist, 0, sizeof(struct gfs2_rgrp_list)); 1304 1305 error = gfs2_meta_read(ip->i_gl, ip->i_eattr, DIO_WAIT, &indbh); 1306 if (error) 1307 return error; 1308 1309 if (gfs2_metatype_check(sdp, indbh, GFS2_METATYPE_IN)) { 1310 error = -EIO; 1311 goto out; 1312 } 1313 1314 eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header)); 1315 end = eablk + sdp->sd_inptrs; 1316 1317 for (; eablk < end; eablk++) { 1318 u64 bn; 1319 1320 if (!*eablk) 1321 break; 1322 bn = be64_to_cpu(*eablk); 1323 1324 if (bstart + blen == bn) 1325 blen++; 1326 else { 1327 if (bstart) 1328 gfs2_rlist_add(ip, &rlist, bstart); 1329 bstart = bn; 1330 blen = 1; 1331 } 1332 blks++; 1333 } 1334 if (bstart) 1335 gfs2_rlist_add(ip, &rlist, bstart); 1336 else 1337 goto out; 1338 1339 gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE); 1340 1341 for (x = 0; x < rlist.rl_rgrps; x++) { 1342 struct gfs2_rgrpd *rgd; 1343 rgd = rlist.rl_ghs[x].gh_gl->gl_object; 1344 rg_blocks += rgd->rd_length; 1345 } 1346 1347 error = gfs2_glock_nq_m(rlist.rl_rgrps, rlist.rl_ghs); 1348 if (error) 1349 goto out_rlist_free; 1350 1351 error = gfs2_trans_begin(sdp, rg_blocks + RES_DINODE + RES_INDIRECT + 1352 RES_STATFS + RES_QUOTA, blks); 1353 if (error) 1354 goto out_gunlock; 1355 1356 gfs2_trans_add_meta(ip->i_gl, indbh); 1357 1358 eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header)); 1359 bstart = 0; 1360 blen = 0; 1361 1362 for (; eablk < end; eablk++) { 1363 u64 bn; 1364 1365 if (!*eablk) 1366 break; 1367 bn = be64_to_cpu(*eablk); 1368 1369 if (bstart + blen == bn) 1370 blen++; 1371 else { 1372 if (bstart) 1373 gfs2_free_meta(ip, bstart, blen); 1374 bstart = bn; 1375 blen = 1; 1376 } 1377 1378 *eablk = 0; 1379 gfs2_add_inode_blocks(&ip->i_inode, -1); 1380 } 1381 if (bstart) 1382 gfs2_free_meta(ip, bstart, blen); 1383 1384 ip->i_diskflags &= ~GFS2_DIF_EA_INDIRECT; 1385 1386 error = gfs2_meta_inode_buffer(ip, &dibh); 1387 if (!error) { 1388 gfs2_trans_add_meta(ip->i_gl, dibh); 1389 gfs2_dinode_out(ip, dibh->b_data); 1390 brelse(dibh); 1391 } 1392 1393 gfs2_trans_end(sdp); 1394 1395 out_gunlock: 1396 gfs2_glock_dq_m(rlist.rl_rgrps, rlist.rl_ghs); 1397 out_rlist_free: 1398 gfs2_rlist_free(&rlist); 1399 out: 1400 brelse(indbh); 1401 return error; 1402 } 1403 1404 static int ea_dealloc_block(struct gfs2_inode *ip) 1405 { 1406 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); 1407 struct gfs2_rgrpd *rgd; 1408 struct buffer_head *dibh; 1409 struct gfs2_holder gh; 1410 int error; 1411 1412 error = gfs2_rindex_update(sdp); 1413 if (error) 1414 return error; 1415 1416 rgd = gfs2_blk2rgrpd(sdp, ip->i_eattr, 1); 1417 if (!rgd) { 1418 gfs2_consist_inode(ip); 1419 return -EIO; 1420 } 1421 1422 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh); 1423 if (error) 1424 return error; 1425 1426 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_DINODE + RES_STATFS + 1427 RES_QUOTA, 1); 1428 if (error) 1429 goto out_gunlock; 1430 1431 gfs2_free_meta(ip, ip->i_eattr, 1); 1432 1433 ip->i_eattr = 0; 1434 gfs2_add_inode_blocks(&ip->i_inode, -1); 1435 1436 error = gfs2_meta_inode_buffer(ip, &dibh); 1437 if (!error) { 1438 gfs2_trans_add_meta(ip->i_gl, dibh); 1439 gfs2_dinode_out(ip, dibh->b_data); 1440 brelse(dibh); 1441 } 1442 1443 gfs2_trans_end(sdp); 1444 1445 out_gunlock: 1446 gfs2_glock_dq_uninit(&gh); 1447 return error; 1448 } 1449 1450 /** 1451 * gfs2_ea_dealloc - deallocate the extended attribute fork 1452 * @ip: the inode 1453 * 1454 * Returns: errno 1455 */ 1456 1457 int gfs2_ea_dealloc(struct gfs2_inode *ip) 1458 { 1459 int error; 1460 1461 error = gfs2_rindex_update(GFS2_SB(&ip->i_inode)); 1462 if (error) 1463 return error; 1464 1465 error = gfs2_quota_hold(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE); 1466 if (error) 1467 return error; 1468 1469 error = ea_foreach(ip, ea_dealloc_unstuffed, NULL); 1470 if (error) 1471 goto out_quota; 1472 1473 if (ip->i_diskflags & GFS2_DIF_EA_INDIRECT) { 1474 error = ea_dealloc_indirect(ip); 1475 if (error) 1476 goto out_quota; 1477 } 1478 1479 error = ea_dealloc_block(ip); 1480 1481 out_quota: 1482 gfs2_quota_unhold(ip); 1483 return error; 1484 } 1485 1486 static const struct xattr_handler gfs2_xattr_user_handler = { 1487 .prefix = XATTR_USER_PREFIX, 1488 .flags = GFS2_EATYPE_USR, 1489 .get = gfs2_xattr_get, 1490 .set = gfs2_xattr_set, 1491 }; 1492 1493 static const struct xattr_handler gfs2_xattr_security_handler = { 1494 .prefix = XATTR_SECURITY_PREFIX, 1495 .flags = GFS2_EATYPE_SECURITY, 1496 .get = gfs2_xattr_get, 1497 .set = gfs2_xattr_set, 1498 }; 1499 1500 const struct xattr_handler *gfs2_xattr_handlers[] = { 1501 &gfs2_xattr_user_handler, 1502 &gfs2_xattr_security_handler, 1503 &gfs2_xattr_system_handler, 1504 NULL, 1505 }; 1506 1507