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