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