1 /* -*- mode: c; c-basic-offset: 8; -*- 2 * vim: noexpandtab sw=8 ts=8 sts=0: 3 * 4 * xattr.c 5 * 6 * Copyright (C) 2004, 2008 Oracle. All rights reserved. 7 * 8 * CREDITS: 9 * Lots of code in this file is copy from linux/fs/ext3/xattr.c. 10 * Copyright (C) 2001-2003 Andreas Gruenbacher, <agruen@suse.de> 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public 14 * License version 2 as published by the Free Software Foundation. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * General Public License for more details. 20 */ 21 22 #include <linux/capability.h> 23 #include <linux/fs.h> 24 #include <linux/types.h> 25 #include <linux/slab.h> 26 #include <linux/highmem.h> 27 #include <linux/pagemap.h> 28 #include <linux/uio.h> 29 #include <linux/sched.h> 30 #include <linux/splice.h> 31 #include <linux/mount.h> 32 #include <linux/writeback.h> 33 #include <linux/falloc.h> 34 #include <linux/sort.h> 35 #include <linux/init.h> 36 #include <linux/module.h> 37 #include <linux/string.h> 38 #include <linux/security.h> 39 40 #define MLOG_MASK_PREFIX ML_XATTR 41 #include <cluster/masklog.h> 42 43 #include "ocfs2.h" 44 #include "alloc.h" 45 #include "blockcheck.h" 46 #include "dlmglue.h" 47 #include "file.h" 48 #include "symlink.h" 49 #include "sysfile.h" 50 #include "inode.h" 51 #include "journal.h" 52 #include "ocfs2_fs.h" 53 #include "suballoc.h" 54 #include "uptodate.h" 55 #include "buffer_head_io.h" 56 #include "super.h" 57 #include "xattr.h" 58 #include "refcounttree.h" 59 #include "acl.h" 60 61 struct ocfs2_xattr_def_value_root { 62 struct ocfs2_xattr_value_root xv; 63 struct ocfs2_extent_rec er; 64 }; 65 66 struct ocfs2_xattr_bucket { 67 /* The inode these xattrs are associated with */ 68 struct inode *bu_inode; 69 70 /* The actual buffers that make up the bucket */ 71 struct buffer_head *bu_bhs[OCFS2_XATTR_MAX_BLOCKS_PER_BUCKET]; 72 73 /* How many blocks make up one bucket for this filesystem */ 74 int bu_blocks; 75 }; 76 77 struct ocfs2_xattr_set_ctxt { 78 handle_t *handle; 79 struct ocfs2_alloc_context *meta_ac; 80 struct ocfs2_alloc_context *data_ac; 81 struct ocfs2_cached_dealloc_ctxt dealloc; 82 }; 83 84 #define OCFS2_XATTR_ROOT_SIZE (sizeof(struct ocfs2_xattr_def_value_root)) 85 #define OCFS2_XATTR_INLINE_SIZE 80 86 #define OCFS2_XATTR_HEADER_GAP 4 87 #define OCFS2_XATTR_FREE_IN_IBODY (OCFS2_MIN_XATTR_INLINE_SIZE \ 88 - sizeof(struct ocfs2_xattr_header) \ 89 - OCFS2_XATTR_HEADER_GAP) 90 #define OCFS2_XATTR_FREE_IN_BLOCK(ptr) ((ptr)->i_sb->s_blocksize \ 91 - sizeof(struct ocfs2_xattr_block) \ 92 - sizeof(struct ocfs2_xattr_header) \ 93 - OCFS2_XATTR_HEADER_GAP) 94 95 static struct ocfs2_xattr_def_value_root def_xv = { 96 .xv.xr_list.l_count = cpu_to_le16(1), 97 }; 98 99 struct xattr_handler *ocfs2_xattr_handlers[] = { 100 &ocfs2_xattr_user_handler, 101 &ocfs2_xattr_acl_access_handler, 102 &ocfs2_xattr_acl_default_handler, 103 &ocfs2_xattr_trusted_handler, 104 &ocfs2_xattr_security_handler, 105 NULL 106 }; 107 108 static struct xattr_handler *ocfs2_xattr_handler_map[OCFS2_XATTR_MAX] = { 109 [OCFS2_XATTR_INDEX_USER] = &ocfs2_xattr_user_handler, 110 [OCFS2_XATTR_INDEX_POSIX_ACL_ACCESS] 111 = &ocfs2_xattr_acl_access_handler, 112 [OCFS2_XATTR_INDEX_POSIX_ACL_DEFAULT] 113 = &ocfs2_xattr_acl_default_handler, 114 [OCFS2_XATTR_INDEX_TRUSTED] = &ocfs2_xattr_trusted_handler, 115 [OCFS2_XATTR_INDEX_SECURITY] = &ocfs2_xattr_security_handler, 116 }; 117 118 struct ocfs2_xattr_info { 119 int name_index; 120 const char *name; 121 const void *value; 122 size_t value_len; 123 }; 124 125 struct ocfs2_xattr_search { 126 struct buffer_head *inode_bh; 127 /* 128 * xattr_bh point to the block buffer head which has extended attribute 129 * when extended attribute in inode, xattr_bh is equal to inode_bh. 130 */ 131 struct buffer_head *xattr_bh; 132 struct ocfs2_xattr_header *header; 133 struct ocfs2_xattr_bucket *bucket; 134 void *base; 135 void *end; 136 struct ocfs2_xattr_entry *here; 137 int not_found; 138 }; 139 140 static int ocfs2_xattr_bucket_get_name_value(struct super_block *sb, 141 struct ocfs2_xattr_header *xh, 142 int index, 143 int *block_off, 144 int *new_offset); 145 146 static int ocfs2_xattr_block_find(struct inode *inode, 147 int name_index, 148 const char *name, 149 struct ocfs2_xattr_search *xs); 150 static int ocfs2_xattr_index_block_find(struct inode *inode, 151 struct buffer_head *root_bh, 152 int name_index, 153 const char *name, 154 struct ocfs2_xattr_search *xs); 155 156 static int ocfs2_xattr_tree_list_index_block(struct inode *inode, 157 struct buffer_head *blk_bh, 158 char *buffer, 159 size_t buffer_size); 160 161 static int ocfs2_xattr_create_index_block(struct inode *inode, 162 struct ocfs2_xattr_search *xs, 163 struct ocfs2_xattr_set_ctxt *ctxt); 164 165 static int ocfs2_xattr_set_entry_index_block(struct inode *inode, 166 struct ocfs2_xattr_info *xi, 167 struct ocfs2_xattr_search *xs, 168 struct ocfs2_xattr_set_ctxt *ctxt); 169 170 typedef int (xattr_tree_rec_func)(struct inode *inode, 171 struct buffer_head *root_bh, 172 u64 blkno, u32 cpos, u32 len, void *para); 173 static int ocfs2_iterate_xattr_index_block(struct inode *inode, 174 struct buffer_head *root_bh, 175 xattr_tree_rec_func *rec_func, 176 void *para); 177 static int ocfs2_delete_xattr_in_bucket(struct inode *inode, 178 struct ocfs2_xattr_bucket *bucket, 179 void *para); 180 static int ocfs2_rm_xattr_cluster(struct inode *inode, 181 struct buffer_head *root_bh, 182 u64 blkno, 183 u32 cpos, 184 u32 len, 185 void *para); 186 187 static int ocfs2_mv_xattr_buckets(struct inode *inode, handle_t *handle, 188 u64 src_blk, u64 last_blk, u64 to_blk, 189 unsigned int start_bucket, 190 u32 *first_hash); 191 static int ocfs2_prepare_refcount_xattr(struct inode *inode, 192 struct ocfs2_dinode *di, 193 struct ocfs2_xattr_info *xi, 194 struct ocfs2_xattr_search *xis, 195 struct ocfs2_xattr_search *xbs, 196 struct ocfs2_refcount_tree **ref_tree, 197 int *meta_need, 198 int *credits); 199 static int ocfs2_get_xattr_tree_value_root(struct super_block *sb, 200 struct ocfs2_xattr_bucket *bucket, 201 int offset, 202 struct ocfs2_xattr_value_root **xv, 203 struct buffer_head **bh); 204 205 static inline u16 ocfs2_xattr_buckets_per_cluster(struct ocfs2_super *osb) 206 { 207 return (1 << osb->s_clustersize_bits) / OCFS2_XATTR_BUCKET_SIZE; 208 } 209 210 static inline u16 ocfs2_blocks_per_xattr_bucket(struct super_block *sb) 211 { 212 return OCFS2_XATTR_BUCKET_SIZE / (1 << sb->s_blocksize_bits); 213 } 214 215 static inline u16 ocfs2_xattr_max_xe_in_bucket(struct super_block *sb) 216 { 217 u16 len = sb->s_blocksize - 218 offsetof(struct ocfs2_xattr_header, xh_entries); 219 220 return len / sizeof(struct ocfs2_xattr_entry); 221 } 222 223 #define bucket_blkno(_b) ((_b)->bu_bhs[0]->b_blocknr) 224 #define bucket_block(_b, _n) ((_b)->bu_bhs[(_n)]->b_data) 225 #define bucket_xh(_b) ((struct ocfs2_xattr_header *)bucket_block((_b), 0)) 226 227 static struct ocfs2_xattr_bucket *ocfs2_xattr_bucket_new(struct inode *inode) 228 { 229 struct ocfs2_xattr_bucket *bucket; 230 int blks = ocfs2_blocks_per_xattr_bucket(inode->i_sb); 231 232 BUG_ON(blks > OCFS2_XATTR_MAX_BLOCKS_PER_BUCKET); 233 234 bucket = kzalloc(sizeof(struct ocfs2_xattr_bucket), GFP_NOFS); 235 if (bucket) { 236 bucket->bu_inode = inode; 237 bucket->bu_blocks = blks; 238 } 239 240 return bucket; 241 } 242 243 static void ocfs2_xattr_bucket_relse(struct ocfs2_xattr_bucket *bucket) 244 { 245 int i; 246 247 for (i = 0; i < bucket->bu_blocks; i++) { 248 brelse(bucket->bu_bhs[i]); 249 bucket->bu_bhs[i] = NULL; 250 } 251 } 252 253 static void ocfs2_xattr_bucket_free(struct ocfs2_xattr_bucket *bucket) 254 { 255 if (bucket) { 256 ocfs2_xattr_bucket_relse(bucket); 257 bucket->bu_inode = NULL; 258 kfree(bucket); 259 } 260 } 261 262 /* 263 * A bucket that has never been written to disk doesn't need to be 264 * read. We just need the buffer_heads. Don't call this for 265 * buckets that are already on disk. ocfs2_read_xattr_bucket() initializes 266 * them fully. 267 */ 268 static int ocfs2_init_xattr_bucket(struct ocfs2_xattr_bucket *bucket, 269 u64 xb_blkno) 270 { 271 int i, rc = 0; 272 273 for (i = 0; i < bucket->bu_blocks; i++) { 274 bucket->bu_bhs[i] = sb_getblk(bucket->bu_inode->i_sb, 275 xb_blkno + i); 276 if (!bucket->bu_bhs[i]) { 277 rc = -EIO; 278 mlog_errno(rc); 279 break; 280 } 281 282 if (!ocfs2_buffer_uptodate(INODE_CACHE(bucket->bu_inode), 283 bucket->bu_bhs[i])) 284 ocfs2_set_new_buffer_uptodate(INODE_CACHE(bucket->bu_inode), 285 bucket->bu_bhs[i]); 286 } 287 288 if (rc) 289 ocfs2_xattr_bucket_relse(bucket); 290 return rc; 291 } 292 293 /* Read the xattr bucket at xb_blkno */ 294 static int ocfs2_read_xattr_bucket(struct ocfs2_xattr_bucket *bucket, 295 u64 xb_blkno) 296 { 297 int rc; 298 299 rc = ocfs2_read_blocks(INODE_CACHE(bucket->bu_inode), xb_blkno, 300 bucket->bu_blocks, bucket->bu_bhs, 0, 301 NULL); 302 if (!rc) { 303 spin_lock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); 304 rc = ocfs2_validate_meta_ecc_bhs(bucket->bu_inode->i_sb, 305 bucket->bu_bhs, 306 bucket->bu_blocks, 307 &bucket_xh(bucket)->xh_check); 308 spin_unlock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); 309 if (rc) 310 mlog_errno(rc); 311 } 312 313 if (rc) 314 ocfs2_xattr_bucket_relse(bucket); 315 return rc; 316 } 317 318 static int ocfs2_xattr_bucket_journal_access(handle_t *handle, 319 struct ocfs2_xattr_bucket *bucket, 320 int type) 321 { 322 int i, rc = 0; 323 324 for (i = 0; i < bucket->bu_blocks; i++) { 325 rc = ocfs2_journal_access(handle, 326 INODE_CACHE(bucket->bu_inode), 327 bucket->bu_bhs[i], type); 328 if (rc) { 329 mlog_errno(rc); 330 break; 331 } 332 } 333 334 return rc; 335 } 336 337 static void ocfs2_xattr_bucket_journal_dirty(handle_t *handle, 338 struct ocfs2_xattr_bucket *bucket) 339 { 340 int i; 341 342 spin_lock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); 343 ocfs2_compute_meta_ecc_bhs(bucket->bu_inode->i_sb, 344 bucket->bu_bhs, bucket->bu_blocks, 345 &bucket_xh(bucket)->xh_check); 346 spin_unlock(&OCFS2_SB(bucket->bu_inode->i_sb)->osb_xattr_lock); 347 348 for (i = 0; i < bucket->bu_blocks; i++) 349 ocfs2_journal_dirty(handle, bucket->bu_bhs[i]); 350 } 351 352 static void ocfs2_xattr_bucket_copy_data(struct ocfs2_xattr_bucket *dest, 353 struct ocfs2_xattr_bucket *src) 354 { 355 int i; 356 int blocksize = src->bu_inode->i_sb->s_blocksize; 357 358 BUG_ON(dest->bu_blocks != src->bu_blocks); 359 BUG_ON(dest->bu_inode != src->bu_inode); 360 361 for (i = 0; i < src->bu_blocks; i++) { 362 memcpy(bucket_block(dest, i), bucket_block(src, i), 363 blocksize); 364 } 365 } 366 367 static int ocfs2_validate_xattr_block(struct super_block *sb, 368 struct buffer_head *bh) 369 { 370 int rc; 371 struct ocfs2_xattr_block *xb = 372 (struct ocfs2_xattr_block *)bh->b_data; 373 374 mlog(0, "Validating xattr block %llu\n", 375 (unsigned long long)bh->b_blocknr); 376 377 BUG_ON(!buffer_uptodate(bh)); 378 379 /* 380 * If the ecc fails, we return the error but otherwise 381 * leave the filesystem running. We know any error is 382 * local to this block. 383 */ 384 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &xb->xb_check); 385 if (rc) 386 return rc; 387 388 /* 389 * Errors after here are fatal 390 */ 391 392 if (!OCFS2_IS_VALID_XATTR_BLOCK(xb)) { 393 ocfs2_error(sb, 394 "Extended attribute block #%llu has bad " 395 "signature %.*s", 396 (unsigned long long)bh->b_blocknr, 7, 397 xb->xb_signature); 398 return -EINVAL; 399 } 400 401 if (le64_to_cpu(xb->xb_blkno) != bh->b_blocknr) { 402 ocfs2_error(sb, 403 "Extended attribute block #%llu has an " 404 "invalid xb_blkno of %llu", 405 (unsigned long long)bh->b_blocknr, 406 (unsigned long long)le64_to_cpu(xb->xb_blkno)); 407 return -EINVAL; 408 } 409 410 if (le32_to_cpu(xb->xb_fs_generation) != OCFS2_SB(sb)->fs_generation) { 411 ocfs2_error(sb, 412 "Extended attribute block #%llu has an invalid " 413 "xb_fs_generation of #%u", 414 (unsigned long long)bh->b_blocknr, 415 le32_to_cpu(xb->xb_fs_generation)); 416 return -EINVAL; 417 } 418 419 return 0; 420 } 421 422 static int ocfs2_read_xattr_block(struct inode *inode, u64 xb_blkno, 423 struct buffer_head **bh) 424 { 425 int rc; 426 struct buffer_head *tmp = *bh; 427 428 rc = ocfs2_read_block(INODE_CACHE(inode), xb_blkno, &tmp, 429 ocfs2_validate_xattr_block); 430 431 /* If ocfs2_read_block() got us a new bh, pass it up. */ 432 if (!rc && !*bh) 433 *bh = tmp; 434 435 return rc; 436 } 437 438 static inline const char *ocfs2_xattr_prefix(int name_index) 439 { 440 struct xattr_handler *handler = NULL; 441 442 if (name_index > 0 && name_index < OCFS2_XATTR_MAX) 443 handler = ocfs2_xattr_handler_map[name_index]; 444 445 return handler ? handler->prefix : NULL; 446 } 447 448 static u32 ocfs2_xattr_name_hash(struct inode *inode, 449 const char *name, 450 int name_len) 451 { 452 /* Get hash value of uuid from super block */ 453 u32 hash = OCFS2_SB(inode->i_sb)->uuid_hash; 454 int i; 455 456 /* hash extended attribute name */ 457 for (i = 0; i < name_len; i++) { 458 hash = (hash << OCFS2_HASH_SHIFT) ^ 459 (hash >> (8*sizeof(hash) - OCFS2_HASH_SHIFT)) ^ 460 *name++; 461 } 462 463 return hash; 464 } 465 466 /* 467 * ocfs2_xattr_hash_entry() 468 * 469 * Compute the hash of an extended attribute. 470 */ 471 static void ocfs2_xattr_hash_entry(struct inode *inode, 472 struct ocfs2_xattr_header *header, 473 struct ocfs2_xattr_entry *entry) 474 { 475 u32 hash = 0; 476 char *name = (char *)header + le16_to_cpu(entry->xe_name_offset); 477 478 hash = ocfs2_xattr_name_hash(inode, name, entry->xe_name_len); 479 entry->xe_name_hash = cpu_to_le32(hash); 480 481 return; 482 } 483 484 static int ocfs2_xattr_entry_real_size(int name_len, size_t value_len) 485 { 486 int size = 0; 487 488 if (value_len <= OCFS2_XATTR_INLINE_SIZE) 489 size = OCFS2_XATTR_SIZE(name_len) + OCFS2_XATTR_SIZE(value_len); 490 else 491 size = OCFS2_XATTR_SIZE(name_len) + OCFS2_XATTR_ROOT_SIZE; 492 size += sizeof(struct ocfs2_xattr_entry); 493 494 return size; 495 } 496 497 int ocfs2_calc_security_init(struct inode *dir, 498 struct ocfs2_security_xattr_info *si, 499 int *want_clusters, 500 int *xattr_credits, 501 struct ocfs2_alloc_context **xattr_ac) 502 { 503 int ret = 0; 504 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 505 int s_size = ocfs2_xattr_entry_real_size(strlen(si->name), 506 si->value_len); 507 508 /* 509 * The max space of security xattr taken inline is 510 * 256(name) + 80(value) + 16(entry) = 352 bytes, 511 * So reserve one metadata block for it is ok. 512 */ 513 if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE || 514 s_size > OCFS2_XATTR_FREE_IN_IBODY) { 515 ret = ocfs2_reserve_new_metadata_blocks(osb, 1, xattr_ac); 516 if (ret) { 517 mlog_errno(ret); 518 return ret; 519 } 520 *xattr_credits += OCFS2_XATTR_BLOCK_CREATE_CREDITS; 521 } 522 523 /* reserve clusters for xattr value which will be set in B tree*/ 524 if (si->value_len > OCFS2_XATTR_INLINE_SIZE) { 525 int new_clusters = ocfs2_clusters_for_bytes(dir->i_sb, 526 si->value_len); 527 528 *xattr_credits += ocfs2_clusters_to_blocks(dir->i_sb, 529 new_clusters); 530 *want_clusters += new_clusters; 531 } 532 return ret; 533 } 534 535 int ocfs2_calc_xattr_init(struct inode *dir, 536 struct buffer_head *dir_bh, 537 int mode, 538 struct ocfs2_security_xattr_info *si, 539 int *want_clusters, 540 int *xattr_credits, 541 int *want_meta) 542 { 543 int ret = 0; 544 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 545 int s_size = 0, a_size = 0, acl_len = 0, new_clusters; 546 547 if (si->enable) 548 s_size = ocfs2_xattr_entry_real_size(strlen(si->name), 549 si->value_len); 550 551 if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) { 552 acl_len = ocfs2_xattr_get_nolock(dir, dir_bh, 553 OCFS2_XATTR_INDEX_POSIX_ACL_DEFAULT, 554 "", NULL, 0); 555 if (acl_len > 0) { 556 a_size = ocfs2_xattr_entry_real_size(0, acl_len); 557 if (S_ISDIR(mode)) 558 a_size <<= 1; 559 } else if (acl_len != 0 && acl_len != -ENODATA) { 560 mlog_errno(ret); 561 return ret; 562 } 563 } 564 565 if (!(s_size + a_size)) 566 return ret; 567 568 /* 569 * The max space of security xattr taken inline is 570 * 256(name) + 80(value) + 16(entry) = 352 bytes, 571 * The max space of acl xattr taken inline is 572 * 80(value) + 16(entry) * 2(if directory) = 192 bytes, 573 * when blocksize = 512, may reserve one more cluser for 574 * xattr bucket, otherwise reserve one metadata block 575 * for them is ok. 576 * If this is a new directory with inline data, 577 * we choose to reserve the entire inline area for 578 * directory contents and force an external xattr block. 579 */ 580 if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE || 581 (S_ISDIR(mode) && ocfs2_supports_inline_data(osb)) || 582 (s_size + a_size) > OCFS2_XATTR_FREE_IN_IBODY) { 583 *want_meta = *want_meta + 1; 584 *xattr_credits += OCFS2_XATTR_BLOCK_CREATE_CREDITS; 585 } 586 587 if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE && 588 (s_size + a_size) > OCFS2_XATTR_FREE_IN_BLOCK(dir)) { 589 *want_clusters += 1; 590 *xattr_credits += ocfs2_blocks_per_xattr_bucket(dir->i_sb); 591 } 592 593 /* 594 * reserve credits and clusters for xattrs which has large value 595 * and have to be set outside 596 */ 597 if (si->enable && si->value_len > OCFS2_XATTR_INLINE_SIZE) { 598 new_clusters = ocfs2_clusters_for_bytes(dir->i_sb, 599 si->value_len); 600 *xattr_credits += ocfs2_clusters_to_blocks(dir->i_sb, 601 new_clusters); 602 *want_clusters += new_clusters; 603 } 604 if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL && 605 acl_len > OCFS2_XATTR_INLINE_SIZE) { 606 /* for directory, it has DEFAULT and ACCESS two types of acls */ 607 new_clusters = (S_ISDIR(mode) ? 2 : 1) * 608 ocfs2_clusters_for_bytes(dir->i_sb, acl_len); 609 *xattr_credits += ocfs2_clusters_to_blocks(dir->i_sb, 610 new_clusters); 611 *want_clusters += new_clusters; 612 } 613 614 return ret; 615 } 616 617 static int ocfs2_xattr_extend_allocation(struct inode *inode, 618 u32 clusters_to_add, 619 struct ocfs2_xattr_value_buf *vb, 620 struct ocfs2_xattr_set_ctxt *ctxt) 621 { 622 int status = 0; 623 handle_t *handle = ctxt->handle; 624 enum ocfs2_alloc_restarted why; 625 u32 prev_clusters, logical_start = le32_to_cpu(vb->vb_xv->xr_clusters); 626 struct ocfs2_extent_tree et; 627 628 mlog(0, "(clusters_to_add for xattr= %u)\n", clusters_to_add); 629 630 ocfs2_init_xattr_value_extent_tree(&et, INODE_CACHE(inode), vb); 631 632 status = vb->vb_access(handle, INODE_CACHE(inode), vb->vb_bh, 633 OCFS2_JOURNAL_ACCESS_WRITE); 634 if (status < 0) { 635 mlog_errno(status); 636 goto leave; 637 } 638 639 prev_clusters = le32_to_cpu(vb->vb_xv->xr_clusters); 640 status = ocfs2_add_clusters_in_btree(handle, 641 &et, 642 &logical_start, 643 clusters_to_add, 644 0, 645 ctxt->data_ac, 646 ctxt->meta_ac, 647 &why); 648 if (status < 0) { 649 mlog_errno(status); 650 goto leave; 651 } 652 653 status = ocfs2_journal_dirty(handle, vb->vb_bh); 654 if (status < 0) { 655 mlog_errno(status); 656 goto leave; 657 } 658 659 clusters_to_add -= le32_to_cpu(vb->vb_xv->xr_clusters) - prev_clusters; 660 661 /* 662 * We should have already allocated enough space before the transaction, 663 * so no need to restart. 664 */ 665 BUG_ON(why != RESTART_NONE || clusters_to_add); 666 667 leave: 668 669 return status; 670 } 671 672 static int __ocfs2_remove_xattr_range(struct inode *inode, 673 struct ocfs2_xattr_value_buf *vb, 674 u32 cpos, u32 phys_cpos, u32 len, 675 unsigned int ext_flags, 676 struct ocfs2_xattr_set_ctxt *ctxt) 677 { 678 int ret; 679 u64 phys_blkno = ocfs2_clusters_to_blocks(inode->i_sb, phys_cpos); 680 handle_t *handle = ctxt->handle; 681 struct ocfs2_extent_tree et; 682 683 ocfs2_init_xattr_value_extent_tree(&et, INODE_CACHE(inode), vb); 684 685 ret = vb->vb_access(handle, INODE_CACHE(inode), vb->vb_bh, 686 OCFS2_JOURNAL_ACCESS_WRITE); 687 if (ret) { 688 mlog_errno(ret); 689 goto out; 690 } 691 692 ret = ocfs2_remove_extent(handle, &et, cpos, len, ctxt->meta_ac, 693 &ctxt->dealloc); 694 if (ret) { 695 mlog_errno(ret); 696 goto out; 697 } 698 699 le32_add_cpu(&vb->vb_xv->xr_clusters, -len); 700 701 ret = ocfs2_journal_dirty(handle, vb->vb_bh); 702 if (ret) { 703 mlog_errno(ret); 704 goto out; 705 } 706 707 if (ext_flags & OCFS2_EXT_REFCOUNTED) 708 ret = ocfs2_decrease_refcount(inode, handle, 709 ocfs2_blocks_to_clusters(inode->i_sb, 710 phys_blkno), 711 len, ctxt->meta_ac, &ctxt->dealloc, 1); 712 else 713 ret = ocfs2_cache_cluster_dealloc(&ctxt->dealloc, 714 phys_blkno, len); 715 if (ret) 716 mlog_errno(ret); 717 718 out: 719 return ret; 720 } 721 722 static int ocfs2_xattr_shrink_size(struct inode *inode, 723 u32 old_clusters, 724 u32 new_clusters, 725 struct ocfs2_xattr_value_buf *vb, 726 struct ocfs2_xattr_set_ctxt *ctxt) 727 { 728 int ret = 0; 729 unsigned int ext_flags; 730 u32 trunc_len, cpos, phys_cpos, alloc_size; 731 u64 block; 732 733 if (old_clusters <= new_clusters) 734 return 0; 735 736 cpos = new_clusters; 737 trunc_len = old_clusters - new_clusters; 738 while (trunc_len) { 739 ret = ocfs2_xattr_get_clusters(inode, cpos, &phys_cpos, 740 &alloc_size, 741 &vb->vb_xv->xr_list, &ext_flags); 742 if (ret) { 743 mlog_errno(ret); 744 goto out; 745 } 746 747 if (alloc_size > trunc_len) 748 alloc_size = trunc_len; 749 750 ret = __ocfs2_remove_xattr_range(inode, vb, cpos, 751 phys_cpos, alloc_size, 752 ext_flags, ctxt); 753 if (ret) { 754 mlog_errno(ret); 755 goto out; 756 } 757 758 block = ocfs2_clusters_to_blocks(inode->i_sb, phys_cpos); 759 ocfs2_remove_xattr_clusters_from_cache(INODE_CACHE(inode), 760 block, alloc_size); 761 cpos += alloc_size; 762 trunc_len -= alloc_size; 763 } 764 765 out: 766 return ret; 767 } 768 769 static int ocfs2_xattr_value_truncate(struct inode *inode, 770 struct ocfs2_xattr_value_buf *vb, 771 int len, 772 struct ocfs2_xattr_set_ctxt *ctxt) 773 { 774 int ret; 775 u32 new_clusters = ocfs2_clusters_for_bytes(inode->i_sb, len); 776 u32 old_clusters = le32_to_cpu(vb->vb_xv->xr_clusters); 777 778 if (new_clusters == old_clusters) 779 return 0; 780 781 if (new_clusters > old_clusters) 782 ret = ocfs2_xattr_extend_allocation(inode, 783 new_clusters - old_clusters, 784 vb, ctxt); 785 else 786 ret = ocfs2_xattr_shrink_size(inode, 787 old_clusters, new_clusters, 788 vb, ctxt); 789 790 return ret; 791 } 792 793 static int ocfs2_xattr_list_entry(char *buffer, size_t size, 794 size_t *result, const char *prefix, 795 const char *name, int name_len) 796 { 797 char *p = buffer + *result; 798 int prefix_len = strlen(prefix); 799 int total_len = prefix_len + name_len + 1; 800 801 *result += total_len; 802 803 /* we are just looking for how big our buffer needs to be */ 804 if (!size) 805 return 0; 806 807 if (*result > size) 808 return -ERANGE; 809 810 memcpy(p, prefix, prefix_len); 811 memcpy(p + prefix_len, name, name_len); 812 p[prefix_len + name_len] = '\0'; 813 814 return 0; 815 } 816 817 static int ocfs2_xattr_list_entries(struct inode *inode, 818 struct ocfs2_xattr_header *header, 819 char *buffer, size_t buffer_size) 820 { 821 size_t result = 0; 822 int i, type, ret; 823 const char *prefix, *name; 824 825 for (i = 0 ; i < le16_to_cpu(header->xh_count); i++) { 826 struct ocfs2_xattr_entry *entry = &header->xh_entries[i]; 827 type = ocfs2_xattr_get_type(entry); 828 prefix = ocfs2_xattr_prefix(type); 829 830 if (prefix) { 831 name = (const char *)header + 832 le16_to_cpu(entry->xe_name_offset); 833 834 ret = ocfs2_xattr_list_entry(buffer, buffer_size, 835 &result, prefix, name, 836 entry->xe_name_len); 837 if (ret) 838 return ret; 839 } 840 } 841 842 return result; 843 } 844 845 int ocfs2_has_inline_xattr_value_outside(struct inode *inode, 846 struct ocfs2_dinode *di) 847 { 848 struct ocfs2_xattr_header *xh; 849 int i; 850 851 xh = (struct ocfs2_xattr_header *) 852 ((void *)di + inode->i_sb->s_blocksize - 853 le16_to_cpu(di->i_xattr_inline_size)); 854 855 for (i = 0; i < le16_to_cpu(xh->xh_count); i++) 856 if (!ocfs2_xattr_is_local(&xh->xh_entries[i])) 857 return 1; 858 859 return 0; 860 } 861 862 static int ocfs2_xattr_ibody_list(struct inode *inode, 863 struct ocfs2_dinode *di, 864 char *buffer, 865 size_t buffer_size) 866 { 867 struct ocfs2_xattr_header *header = NULL; 868 struct ocfs2_inode_info *oi = OCFS2_I(inode); 869 int ret = 0; 870 871 if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) 872 return ret; 873 874 header = (struct ocfs2_xattr_header *) 875 ((void *)di + inode->i_sb->s_blocksize - 876 le16_to_cpu(di->i_xattr_inline_size)); 877 878 ret = ocfs2_xattr_list_entries(inode, header, buffer, buffer_size); 879 880 return ret; 881 } 882 883 static int ocfs2_xattr_block_list(struct inode *inode, 884 struct ocfs2_dinode *di, 885 char *buffer, 886 size_t buffer_size) 887 { 888 struct buffer_head *blk_bh = NULL; 889 struct ocfs2_xattr_block *xb; 890 int ret = 0; 891 892 if (!di->i_xattr_loc) 893 return ret; 894 895 ret = ocfs2_read_xattr_block(inode, le64_to_cpu(di->i_xattr_loc), 896 &blk_bh); 897 if (ret < 0) { 898 mlog_errno(ret); 899 return ret; 900 } 901 902 xb = (struct ocfs2_xattr_block *)blk_bh->b_data; 903 if (!(le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED)) { 904 struct ocfs2_xattr_header *header = &xb->xb_attrs.xb_header; 905 ret = ocfs2_xattr_list_entries(inode, header, 906 buffer, buffer_size); 907 } else 908 ret = ocfs2_xattr_tree_list_index_block(inode, blk_bh, 909 buffer, buffer_size); 910 911 brelse(blk_bh); 912 913 return ret; 914 } 915 916 ssize_t ocfs2_listxattr(struct dentry *dentry, 917 char *buffer, 918 size_t size) 919 { 920 int ret = 0, i_ret = 0, b_ret = 0; 921 struct buffer_head *di_bh = NULL; 922 struct ocfs2_dinode *di = NULL; 923 struct ocfs2_inode_info *oi = OCFS2_I(dentry->d_inode); 924 925 if (!ocfs2_supports_xattr(OCFS2_SB(dentry->d_sb))) 926 return -EOPNOTSUPP; 927 928 if (!(oi->ip_dyn_features & OCFS2_HAS_XATTR_FL)) 929 return ret; 930 931 ret = ocfs2_inode_lock(dentry->d_inode, &di_bh, 0); 932 if (ret < 0) { 933 mlog_errno(ret); 934 return ret; 935 } 936 937 di = (struct ocfs2_dinode *)di_bh->b_data; 938 939 down_read(&oi->ip_xattr_sem); 940 i_ret = ocfs2_xattr_ibody_list(dentry->d_inode, di, buffer, size); 941 if (i_ret < 0) 942 b_ret = 0; 943 else { 944 if (buffer) { 945 buffer += i_ret; 946 size -= i_ret; 947 } 948 b_ret = ocfs2_xattr_block_list(dentry->d_inode, di, 949 buffer, size); 950 if (b_ret < 0) 951 i_ret = 0; 952 } 953 up_read(&oi->ip_xattr_sem); 954 ocfs2_inode_unlock(dentry->d_inode, 0); 955 956 brelse(di_bh); 957 958 return i_ret + b_ret; 959 } 960 961 static int ocfs2_xattr_find_entry(int name_index, 962 const char *name, 963 struct ocfs2_xattr_search *xs) 964 { 965 struct ocfs2_xattr_entry *entry; 966 size_t name_len; 967 int i, cmp = 1; 968 969 if (name == NULL) 970 return -EINVAL; 971 972 name_len = strlen(name); 973 entry = xs->here; 974 for (i = 0; i < le16_to_cpu(xs->header->xh_count); i++) { 975 cmp = name_index - ocfs2_xattr_get_type(entry); 976 if (!cmp) 977 cmp = name_len - entry->xe_name_len; 978 if (!cmp) 979 cmp = memcmp(name, (xs->base + 980 le16_to_cpu(entry->xe_name_offset)), 981 name_len); 982 if (cmp == 0) 983 break; 984 entry += 1; 985 } 986 xs->here = entry; 987 988 return cmp ? -ENODATA : 0; 989 } 990 991 static int ocfs2_xattr_get_value_outside(struct inode *inode, 992 struct ocfs2_xattr_value_root *xv, 993 void *buffer, 994 size_t len) 995 { 996 u32 cpos, p_cluster, num_clusters, bpc, clusters; 997 u64 blkno; 998 int i, ret = 0; 999 size_t cplen, blocksize; 1000 struct buffer_head *bh = NULL; 1001 struct ocfs2_extent_list *el; 1002 1003 el = &xv->xr_list; 1004 clusters = le32_to_cpu(xv->xr_clusters); 1005 bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1); 1006 blocksize = inode->i_sb->s_blocksize; 1007 1008 cpos = 0; 1009 while (cpos < clusters) { 1010 ret = ocfs2_xattr_get_clusters(inode, cpos, &p_cluster, 1011 &num_clusters, el, NULL); 1012 if (ret) { 1013 mlog_errno(ret); 1014 goto out; 1015 } 1016 1017 blkno = ocfs2_clusters_to_blocks(inode->i_sb, p_cluster); 1018 /* Copy ocfs2_xattr_value */ 1019 for (i = 0; i < num_clusters * bpc; i++, blkno++) { 1020 ret = ocfs2_read_block(INODE_CACHE(inode), blkno, 1021 &bh, NULL); 1022 if (ret) { 1023 mlog_errno(ret); 1024 goto out; 1025 } 1026 1027 cplen = len >= blocksize ? blocksize : len; 1028 memcpy(buffer, bh->b_data, cplen); 1029 len -= cplen; 1030 buffer += cplen; 1031 1032 brelse(bh); 1033 bh = NULL; 1034 if (len == 0) 1035 break; 1036 } 1037 cpos += num_clusters; 1038 } 1039 out: 1040 return ret; 1041 } 1042 1043 static int ocfs2_xattr_ibody_get(struct inode *inode, 1044 int name_index, 1045 const char *name, 1046 void *buffer, 1047 size_t buffer_size, 1048 struct ocfs2_xattr_search *xs) 1049 { 1050 struct ocfs2_inode_info *oi = OCFS2_I(inode); 1051 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; 1052 struct ocfs2_xattr_value_root *xv; 1053 size_t size; 1054 int ret = 0; 1055 1056 if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) 1057 return -ENODATA; 1058 1059 xs->end = (void *)di + inode->i_sb->s_blocksize; 1060 xs->header = (struct ocfs2_xattr_header *) 1061 (xs->end - le16_to_cpu(di->i_xattr_inline_size)); 1062 xs->base = (void *)xs->header; 1063 xs->here = xs->header->xh_entries; 1064 1065 ret = ocfs2_xattr_find_entry(name_index, name, xs); 1066 if (ret) 1067 return ret; 1068 size = le64_to_cpu(xs->here->xe_value_size); 1069 if (buffer) { 1070 if (size > buffer_size) 1071 return -ERANGE; 1072 if (ocfs2_xattr_is_local(xs->here)) { 1073 memcpy(buffer, (void *)xs->base + 1074 le16_to_cpu(xs->here->xe_name_offset) + 1075 OCFS2_XATTR_SIZE(xs->here->xe_name_len), size); 1076 } else { 1077 xv = (struct ocfs2_xattr_value_root *) 1078 (xs->base + le16_to_cpu( 1079 xs->here->xe_name_offset) + 1080 OCFS2_XATTR_SIZE(xs->here->xe_name_len)); 1081 ret = ocfs2_xattr_get_value_outside(inode, xv, 1082 buffer, size); 1083 if (ret < 0) { 1084 mlog_errno(ret); 1085 return ret; 1086 } 1087 } 1088 } 1089 1090 return size; 1091 } 1092 1093 static int ocfs2_xattr_block_get(struct inode *inode, 1094 int name_index, 1095 const char *name, 1096 void *buffer, 1097 size_t buffer_size, 1098 struct ocfs2_xattr_search *xs) 1099 { 1100 struct ocfs2_xattr_block *xb; 1101 struct ocfs2_xattr_value_root *xv; 1102 size_t size; 1103 int ret = -ENODATA, name_offset, name_len, i; 1104 int uninitialized_var(block_off); 1105 1106 xs->bucket = ocfs2_xattr_bucket_new(inode); 1107 if (!xs->bucket) { 1108 ret = -ENOMEM; 1109 mlog_errno(ret); 1110 goto cleanup; 1111 } 1112 1113 ret = ocfs2_xattr_block_find(inode, name_index, name, xs); 1114 if (ret) { 1115 mlog_errno(ret); 1116 goto cleanup; 1117 } 1118 1119 if (xs->not_found) { 1120 ret = -ENODATA; 1121 goto cleanup; 1122 } 1123 1124 xb = (struct ocfs2_xattr_block *)xs->xattr_bh->b_data; 1125 size = le64_to_cpu(xs->here->xe_value_size); 1126 if (buffer) { 1127 ret = -ERANGE; 1128 if (size > buffer_size) 1129 goto cleanup; 1130 1131 name_offset = le16_to_cpu(xs->here->xe_name_offset); 1132 name_len = OCFS2_XATTR_SIZE(xs->here->xe_name_len); 1133 i = xs->here - xs->header->xh_entries; 1134 1135 if (le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED) { 1136 ret = ocfs2_xattr_bucket_get_name_value(inode->i_sb, 1137 bucket_xh(xs->bucket), 1138 i, 1139 &block_off, 1140 &name_offset); 1141 xs->base = bucket_block(xs->bucket, block_off); 1142 } 1143 if (ocfs2_xattr_is_local(xs->here)) { 1144 memcpy(buffer, (void *)xs->base + 1145 name_offset + name_len, size); 1146 } else { 1147 xv = (struct ocfs2_xattr_value_root *) 1148 (xs->base + name_offset + name_len); 1149 ret = ocfs2_xattr_get_value_outside(inode, xv, 1150 buffer, size); 1151 if (ret < 0) { 1152 mlog_errno(ret); 1153 goto cleanup; 1154 } 1155 } 1156 } 1157 ret = size; 1158 cleanup: 1159 ocfs2_xattr_bucket_free(xs->bucket); 1160 1161 brelse(xs->xattr_bh); 1162 xs->xattr_bh = NULL; 1163 return ret; 1164 } 1165 1166 int ocfs2_xattr_get_nolock(struct inode *inode, 1167 struct buffer_head *di_bh, 1168 int name_index, 1169 const char *name, 1170 void *buffer, 1171 size_t buffer_size) 1172 { 1173 int ret; 1174 struct ocfs2_dinode *di = NULL; 1175 struct ocfs2_inode_info *oi = OCFS2_I(inode); 1176 struct ocfs2_xattr_search xis = { 1177 .not_found = -ENODATA, 1178 }; 1179 struct ocfs2_xattr_search xbs = { 1180 .not_found = -ENODATA, 1181 }; 1182 1183 if (!ocfs2_supports_xattr(OCFS2_SB(inode->i_sb))) 1184 return -EOPNOTSUPP; 1185 1186 if (!(oi->ip_dyn_features & OCFS2_HAS_XATTR_FL)) 1187 ret = -ENODATA; 1188 1189 xis.inode_bh = xbs.inode_bh = di_bh; 1190 di = (struct ocfs2_dinode *)di_bh->b_data; 1191 1192 down_read(&oi->ip_xattr_sem); 1193 ret = ocfs2_xattr_ibody_get(inode, name_index, name, buffer, 1194 buffer_size, &xis); 1195 if (ret == -ENODATA && di->i_xattr_loc) 1196 ret = ocfs2_xattr_block_get(inode, name_index, name, buffer, 1197 buffer_size, &xbs); 1198 up_read(&oi->ip_xattr_sem); 1199 1200 return ret; 1201 } 1202 1203 /* ocfs2_xattr_get() 1204 * 1205 * Copy an extended attribute into the buffer provided. 1206 * Buffer is NULL to compute the size of buffer required. 1207 */ 1208 static int ocfs2_xattr_get(struct inode *inode, 1209 int name_index, 1210 const char *name, 1211 void *buffer, 1212 size_t buffer_size) 1213 { 1214 int ret; 1215 struct buffer_head *di_bh = NULL; 1216 1217 ret = ocfs2_inode_lock(inode, &di_bh, 0); 1218 if (ret < 0) { 1219 mlog_errno(ret); 1220 return ret; 1221 } 1222 ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index, 1223 name, buffer, buffer_size); 1224 1225 ocfs2_inode_unlock(inode, 0); 1226 1227 brelse(di_bh); 1228 1229 return ret; 1230 } 1231 1232 static int __ocfs2_xattr_set_value_outside(struct inode *inode, 1233 handle_t *handle, 1234 struct ocfs2_xattr_value_buf *vb, 1235 const void *value, 1236 int value_len) 1237 { 1238 int ret = 0, i, cp_len; 1239 u16 blocksize = inode->i_sb->s_blocksize; 1240 u32 p_cluster, num_clusters; 1241 u32 cpos = 0, bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1); 1242 u32 clusters = ocfs2_clusters_for_bytes(inode->i_sb, value_len); 1243 u64 blkno; 1244 struct buffer_head *bh = NULL; 1245 unsigned int ext_flags; 1246 struct ocfs2_xattr_value_root *xv = vb->vb_xv; 1247 1248 BUG_ON(clusters > le32_to_cpu(xv->xr_clusters)); 1249 1250 while (cpos < clusters) { 1251 ret = ocfs2_xattr_get_clusters(inode, cpos, &p_cluster, 1252 &num_clusters, &xv->xr_list, 1253 &ext_flags); 1254 if (ret) { 1255 mlog_errno(ret); 1256 goto out; 1257 } 1258 1259 BUG_ON(ext_flags & OCFS2_EXT_REFCOUNTED); 1260 1261 blkno = ocfs2_clusters_to_blocks(inode->i_sb, p_cluster); 1262 1263 for (i = 0; i < num_clusters * bpc; i++, blkno++) { 1264 ret = ocfs2_read_block(INODE_CACHE(inode), blkno, 1265 &bh, NULL); 1266 if (ret) { 1267 mlog_errno(ret); 1268 goto out; 1269 } 1270 1271 ret = ocfs2_journal_access(handle, 1272 INODE_CACHE(inode), 1273 bh, 1274 OCFS2_JOURNAL_ACCESS_WRITE); 1275 if (ret < 0) { 1276 mlog_errno(ret); 1277 goto out; 1278 } 1279 1280 cp_len = value_len > blocksize ? blocksize : value_len; 1281 memcpy(bh->b_data, value, cp_len); 1282 value_len -= cp_len; 1283 value += cp_len; 1284 if (cp_len < blocksize) 1285 memset(bh->b_data + cp_len, 0, 1286 blocksize - cp_len); 1287 1288 ret = ocfs2_journal_dirty(handle, bh); 1289 if (ret < 0) { 1290 mlog_errno(ret); 1291 goto out; 1292 } 1293 brelse(bh); 1294 bh = NULL; 1295 1296 /* 1297 * XXX: do we need to empty all the following 1298 * blocks in this cluster? 1299 */ 1300 if (!value_len) 1301 break; 1302 } 1303 cpos += num_clusters; 1304 } 1305 out: 1306 brelse(bh); 1307 1308 return ret; 1309 } 1310 1311 static int ocfs2_xattr_cleanup(struct inode *inode, 1312 handle_t *handle, 1313 struct ocfs2_xattr_info *xi, 1314 struct ocfs2_xattr_search *xs, 1315 struct ocfs2_xattr_value_buf *vb, 1316 size_t offs) 1317 { 1318 int ret = 0; 1319 size_t name_len = strlen(xi->name); 1320 void *val = xs->base + offs; 1321 size_t size = OCFS2_XATTR_SIZE(name_len) + OCFS2_XATTR_ROOT_SIZE; 1322 1323 ret = vb->vb_access(handle, INODE_CACHE(inode), vb->vb_bh, 1324 OCFS2_JOURNAL_ACCESS_WRITE); 1325 if (ret) { 1326 mlog_errno(ret); 1327 goto out; 1328 } 1329 /* Decrease xattr count */ 1330 le16_add_cpu(&xs->header->xh_count, -1); 1331 /* Remove the xattr entry and tree root which has already be set*/ 1332 memset((void *)xs->here, 0, sizeof(struct ocfs2_xattr_entry)); 1333 memset(val, 0, size); 1334 1335 ret = ocfs2_journal_dirty(handle, vb->vb_bh); 1336 if (ret < 0) 1337 mlog_errno(ret); 1338 out: 1339 return ret; 1340 } 1341 1342 static int ocfs2_xattr_update_entry(struct inode *inode, 1343 handle_t *handle, 1344 struct ocfs2_xattr_info *xi, 1345 struct ocfs2_xattr_search *xs, 1346 struct ocfs2_xattr_value_buf *vb, 1347 size_t offs) 1348 { 1349 int ret; 1350 1351 ret = vb->vb_access(handle, INODE_CACHE(inode), vb->vb_bh, 1352 OCFS2_JOURNAL_ACCESS_WRITE); 1353 if (ret) { 1354 mlog_errno(ret); 1355 goto out; 1356 } 1357 1358 xs->here->xe_name_offset = cpu_to_le16(offs); 1359 xs->here->xe_value_size = cpu_to_le64(xi->value_len); 1360 if (xi->value_len <= OCFS2_XATTR_INLINE_SIZE) 1361 ocfs2_xattr_set_local(xs->here, 1); 1362 else 1363 ocfs2_xattr_set_local(xs->here, 0); 1364 ocfs2_xattr_hash_entry(inode, xs->header, xs->here); 1365 1366 ret = ocfs2_journal_dirty(handle, vb->vb_bh); 1367 if (ret < 0) 1368 mlog_errno(ret); 1369 out: 1370 return ret; 1371 } 1372 1373 /* 1374 * ocfs2_xattr_set_value_outside() 1375 * 1376 * Set large size value in B tree. 1377 */ 1378 static int ocfs2_xattr_set_value_outside(struct inode *inode, 1379 struct ocfs2_xattr_info *xi, 1380 struct ocfs2_xattr_search *xs, 1381 struct ocfs2_xattr_set_ctxt *ctxt, 1382 struct ocfs2_xattr_value_buf *vb, 1383 size_t offs) 1384 { 1385 size_t name_len = strlen(xi->name); 1386 void *val = xs->base + offs; 1387 struct ocfs2_xattr_value_root *xv = NULL; 1388 size_t size = OCFS2_XATTR_SIZE(name_len) + OCFS2_XATTR_ROOT_SIZE; 1389 int ret = 0; 1390 1391 memset(val, 0, size); 1392 memcpy(val, xi->name, name_len); 1393 xv = (struct ocfs2_xattr_value_root *) 1394 (val + OCFS2_XATTR_SIZE(name_len)); 1395 xv->xr_clusters = 0; 1396 xv->xr_last_eb_blk = 0; 1397 xv->xr_list.l_tree_depth = 0; 1398 xv->xr_list.l_count = cpu_to_le16(1); 1399 xv->xr_list.l_next_free_rec = 0; 1400 vb->vb_xv = xv; 1401 1402 ret = ocfs2_xattr_value_truncate(inode, vb, xi->value_len, ctxt); 1403 if (ret < 0) { 1404 mlog_errno(ret); 1405 return ret; 1406 } 1407 ret = ocfs2_xattr_update_entry(inode, ctxt->handle, xi, xs, vb, offs); 1408 if (ret < 0) { 1409 mlog_errno(ret); 1410 return ret; 1411 } 1412 ret = __ocfs2_xattr_set_value_outside(inode, ctxt->handle, vb, 1413 xi->value, xi->value_len); 1414 if (ret < 0) 1415 mlog_errno(ret); 1416 1417 return ret; 1418 } 1419 1420 /* 1421 * ocfs2_xattr_set_entry_local() 1422 * 1423 * Set, replace or remove extended attribute in local. 1424 */ 1425 static void ocfs2_xattr_set_entry_local(struct inode *inode, 1426 struct ocfs2_xattr_info *xi, 1427 struct ocfs2_xattr_search *xs, 1428 struct ocfs2_xattr_entry *last, 1429 size_t min_offs) 1430 { 1431 size_t name_len = strlen(xi->name); 1432 int i; 1433 1434 if (xi->value && xs->not_found) { 1435 /* Insert the new xattr entry. */ 1436 le16_add_cpu(&xs->header->xh_count, 1); 1437 ocfs2_xattr_set_type(last, xi->name_index); 1438 ocfs2_xattr_set_local(last, 1); 1439 last->xe_name_len = name_len; 1440 } else { 1441 void *first_val; 1442 void *val; 1443 size_t offs, size; 1444 1445 first_val = xs->base + min_offs; 1446 offs = le16_to_cpu(xs->here->xe_name_offset); 1447 val = xs->base + offs; 1448 1449 if (le64_to_cpu(xs->here->xe_value_size) > 1450 OCFS2_XATTR_INLINE_SIZE) 1451 size = OCFS2_XATTR_SIZE(name_len) + 1452 OCFS2_XATTR_ROOT_SIZE; 1453 else 1454 size = OCFS2_XATTR_SIZE(name_len) + 1455 OCFS2_XATTR_SIZE(le64_to_cpu(xs->here->xe_value_size)); 1456 1457 if (xi->value && size == OCFS2_XATTR_SIZE(name_len) + 1458 OCFS2_XATTR_SIZE(xi->value_len)) { 1459 /* The old and the new value have the 1460 same size. Just replace the value. */ 1461 ocfs2_xattr_set_local(xs->here, 1); 1462 xs->here->xe_value_size = cpu_to_le64(xi->value_len); 1463 /* Clear value bytes. */ 1464 memset(val + OCFS2_XATTR_SIZE(name_len), 1465 0, 1466 OCFS2_XATTR_SIZE(xi->value_len)); 1467 memcpy(val + OCFS2_XATTR_SIZE(name_len), 1468 xi->value, 1469 xi->value_len); 1470 return; 1471 } 1472 /* Remove the old name+value. */ 1473 memmove(first_val + size, first_val, val - first_val); 1474 memset(first_val, 0, size); 1475 xs->here->xe_name_hash = 0; 1476 xs->here->xe_name_offset = 0; 1477 ocfs2_xattr_set_local(xs->here, 1); 1478 xs->here->xe_value_size = 0; 1479 1480 min_offs += size; 1481 1482 /* Adjust all value offsets. */ 1483 last = xs->header->xh_entries; 1484 for (i = 0 ; i < le16_to_cpu(xs->header->xh_count); i++) { 1485 size_t o = le16_to_cpu(last->xe_name_offset); 1486 1487 if (o < offs) 1488 last->xe_name_offset = cpu_to_le16(o + size); 1489 last += 1; 1490 } 1491 1492 if (!xi->value) { 1493 /* Remove the old entry. */ 1494 last -= 1; 1495 memmove(xs->here, xs->here + 1, 1496 (void *)last - (void *)xs->here); 1497 memset(last, 0, sizeof(struct ocfs2_xattr_entry)); 1498 le16_add_cpu(&xs->header->xh_count, -1); 1499 } 1500 } 1501 if (xi->value) { 1502 /* Insert the new name+value. */ 1503 size_t size = OCFS2_XATTR_SIZE(name_len) + 1504 OCFS2_XATTR_SIZE(xi->value_len); 1505 void *val = xs->base + min_offs - size; 1506 1507 xs->here->xe_name_offset = cpu_to_le16(min_offs - size); 1508 memset(val, 0, size); 1509 memcpy(val, xi->name, name_len); 1510 memcpy(val + OCFS2_XATTR_SIZE(name_len), 1511 xi->value, 1512 xi->value_len); 1513 xs->here->xe_value_size = cpu_to_le64(xi->value_len); 1514 ocfs2_xattr_set_local(xs->here, 1); 1515 ocfs2_xattr_hash_entry(inode, xs->header, xs->here); 1516 } 1517 1518 return; 1519 } 1520 1521 /* 1522 * ocfs2_xattr_set_entry() 1523 * 1524 * Set extended attribute entry into inode or block. 1525 * 1526 * If extended attribute value size > OCFS2_XATTR_INLINE_SIZE, 1527 * We first insert tree root(ocfs2_xattr_value_root) with set_entry_local(), 1528 * then set value in B tree with set_value_outside(). 1529 */ 1530 static int ocfs2_xattr_set_entry(struct inode *inode, 1531 struct ocfs2_xattr_info *xi, 1532 struct ocfs2_xattr_search *xs, 1533 struct ocfs2_xattr_set_ctxt *ctxt, 1534 int flag) 1535 { 1536 struct ocfs2_xattr_entry *last; 1537 struct ocfs2_inode_info *oi = OCFS2_I(inode); 1538 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; 1539 size_t min_offs = xs->end - xs->base, name_len = strlen(xi->name); 1540 size_t size_l = 0; 1541 handle_t *handle = ctxt->handle; 1542 int free, i, ret; 1543 struct ocfs2_xattr_info xi_l = { 1544 .name_index = xi->name_index, 1545 .name = xi->name, 1546 .value = xi->value, 1547 .value_len = xi->value_len, 1548 }; 1549 struct ocfs2_xattr_value_buf vb = { 1550 .vb_bh = xs->xattr_bh, 1551 .vb_access = ocfs2_journal_access_di, 1552 }; 1553 1554 if (!(flag & OCFS2_INLINE_XATTR_FL)) { 1555 BUG_ON(xs->xattr_bh == xs->inode_bh); 1556 vb.vb_access = ocfs2_journal_access_xb; 1557 } else 1558 BUG_ON(xs->xattr_bh != xs->inode_bh); 1559 1560 /* Compute min_offs, last and free space. */ 1561 last = xs->header->xh_entries; 1562 1563 for (i = 0 ; i < le16_to_cpu(xs->header->xh_count); i++) { 1564 size_t offs = le16_to_cpu(last->xe_name_offset); 1565 if (offs < min_offs) 1566 min_offs = offs; 1567 last += 1; 1568 } 1569 1570 free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP; 1571 if (free < 0) 1572 return -EIO; 1573 1574 if (!xs->not_found) { 1575 size_t size = 0; 1576 if (ocfs2_xattr_is_local(xs->here)) 1577 size = OCFS2_XATTR_SIZE(name_len) + 1578 OCFS2_XATTR_SIZE(le64_to_cpu(xs->here->xe_value_size)); 1579 else 1580 size = OCFS2_XATTR_SIZE(name_len) + 1581 OCFS2_XATTR_ROOT_SIZE; 1582 free += (size + sizeof(struct ocfs2_xattr_entry)); 1583 } 1584 /* Check free space in inode or block */ 1585 if (xi->value && xi->value_len > OCFS2_XATTR_INLINE_SIZE) { 1586 if (free < sizeof(struct ocfs2_xattr_entry) + 1587 OCFS2_XATTR_SIZE(name_len) + 1588 OCFS2_XATTR_ROOT_SIZE) { 1589 ret = -ENOSPC; 1590 goto out; 1591 } 1592 size_l = OCFS2_XATTR_SIZE(name_len) + OCFS2_XATTR_ROOT_SIZE; 1593 xi_l.value = (void *)&def_xv; 1594 xi_l.value_len = OCFS2_XATTR_ROOT_SIZE; 1595 } else if (xi->value) { 1596 if (free < sizeof(struct ocfs2_xattr_entry) + 1597 OCFS2_XATTR_SIZE(name_len) + 1598 OCFS2_XATTR_SIZE(xi->value_len)) { 1599 ret = -ENOSPC; 1600 goto out; 1601 } 1602 } 1603 1604 if (!xs->not_found) { 1605 /* For existing extended attribute */ 1606 size_t size = OCFS2_XATTR_SIZE(name_len) + 1607 OCFS2_XATTR_SIZE(le64_to_cpu(xs->here->xe_value_size)); 1608 size_t offs = le16_to_cpu(xs->here->xe_name_offset); 1609 void *val = xs->base + offs; 1610 1611 if (ocfs2_xattr_is_local(xs->here) && size == size_l) { 1612 /* Replace existing local xattr with tree root */ 1613 ret = ocfs2_xattr_set_value_outside(inode, xi, xs, 1614 ctxt, &vb, offs); 1615 if (ret < 0) 1616 mlog_errno(ret); 1617 goto out; 1618 } else if (!ocfs2_xattr_is_local(xs->here)) { 1619 /* For existing xattr which has value outside */ 1620 vb.vb_xv = (struct ocfs2_xattr_value_root *) 1621 (val + OCFS2_XATTR_SIZE(name_len)); 1622 1623 if (xi->value_len > OCFS2_XATTR_INLINE_SIZE) { 1624 /* 1625 * If new value need set outside also, 1626 * first truncate old value to new value, 1627 * then set new value with set_value_outside(). 1628 */ 1629 ret = ocfs2_xattr_value_truncate(inode, 1630 &vb, 1631 xi->value_len, 1632 ctxt); 1633 if (ret < 0) { 1634 mlog_errno(ret); 1635 goto out; 1636 } 1637 1638 ret = ocfs2_xattr_update_entry(inode, 1639 handle, 1640 xi, 1641 xs, 1642 &vb, 1643 offs); 1644 if (ret < 0) { 1645 mlog_errno(ret); 1646 goto out; 1647 } 1648 1649 ret = __ocfs2_xattr_set_value_outside(inode, 1650 handle, 1651 &vb, 1652 xi->value, 1653 xi->value_len); 1654 if (ret < 0) 1655 mlog_errno(ret); 1656 goto out; 1657 } else { 1658 /* 1659 * If new value need set in local, 1660 * just trucate old value to zero. 1661 */ 1662 ret = ocfs2_xattr_value_truncate(inode, 1663 &vb, 1664 0, 1665 ctxt); 1666 if (ret < 0) 1667 mlog_errno(ret); 1668 } 1669 } 1670 } 1671 1672 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), xs->inode_bh, 1673 OCFS2_JOURNAL_ACCESS_WRITE); 1674 if (ret) { 1675 mlog_errno(ret); 1676 goto out; 1677 } 1678 1679 if (!(flag & OCFS2_INLINE_XATTR_FL)) { 1680 ret = vb.vb_access(handle, INODE_CACHE(inode), vb.vb_bh, 1681 OCFS2_JOURNAL_ACCESS_WRITE); 1682 if (ret) { 1683 mlog_errno(ret); 1684 goto out; 1685 } 1686 } 1687 1688 /* 1689 * Set value in local, include set tree root in local. 1690 * This is the first step for value size >INLINE_SIZE. 1691 */ 1692 ocfs2_xattr_set_entry_local(inode, &xi_l, xs, last, min_offs); 1693 1694 if (!(flag & OCFS2_INLINE_XATTR_FL)) { 1695 ret = ocfs2_journal_dirty(handle, xs->xattr_bh); 1696 if (ret < 0) { 1697 mlog_errno(ret); 1698 goto out; 1699 } 1700 } 1701 1702 if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL) && 1703 (flag & OCFS2_INLINE_XATTR_FL)) { 1704 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 1705 unsigned int xattrsize = osb->s_xattr_inline_size; 1706 1707 /* 1708 * Adjust extent record count or inline data size 1709 * to reserve space for extended attribute. 1710 */ 1711 if (oi->ip_dyn_features & OCFS2_INLINE_DATA_FL) { 1712 struct ocfs2_inline_data *idata = &di->id2.i_data; 1713 le16_add_cpu(&idata->id_count, -xattrsize); 1714 } else if (!(ocfs2_inode_is_fast_symlink(inode))) { 1715 struct ocfs2_extent_list *el = &di->id2.i_list; 1716 le16_add_cpu(&el->l_count, -(xattrsize / 1717 sizeof(struct ocfs2_extent_rec))); 1718 } 1719 di->i_xattr_inline_size = cpu_to_le16(xattrsize); 1720 } 1721 /* Update xattr flag */ 1722 spin_lock(&oi->ip_lock); 1723 oi->ip_dyn_features |= flag; 1724 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); 1725 spin_unlock(&oi->ip_lock); 1726 1727 ret = ocfs2_journal_dirty(handle, xs->inode_bh); 1728 if (ret < 0) 1729 mlog_errno(ret); 1730 1731 if (!ret && xi->value_len > OCFS2_XATTR_INLINE_SIZE) { 1732 /* 1733 * Set value outside in B tree. 1734 * This is the second step for value size > INLINE_SIZE. 1735 */ 1736 size_t offs = le16_to_cpu(xs->here->xe_name_offset); 1737 ret = ocfs2_xattr_set_value_outside(inode, xi, xs, ctxt, 1738 &vb, offs); 1739 if (ret < 0) { 1740 int ret2; 1741 1742 mlog_errno(ret); 1743 /* 1744 * If set value outside failed, we have to clean 1745 * the junk tree root we have already set in local. 1746 */ 1747 ret2 = ocfs2_xattr_cleanup(inode, ctxt->handle, 1748 xi, xs, &vb, offs); 1749 if (ret2 < 0) 1750 mlog_errno(ret2); 1751 } 1752 } 1753 out: 1754 return ret; 1755 } 1756 1757 /* 1758 * In xattr remove, if it is stored outside and refcounted, we may have 1759 * the chance to split the refcount tree. So need the allocators. 1760 */ 1761 static int ocfs2_lock_xattr_remove_allocators(struct inode *inode, 1762 struct ocfs2_xattr_value_root *xv, 1763 struct ocfs2_caching_info *ref_ci, 1764 struct buffer_head *ref_root_bh, 1765 struct ocfs2_alloc_context **meta_ac, 1766 int *ref_credits) 1767 { 1768 int ret, meta_add = 0; 1769 u32 p_cluster, num_clusters; 1770 unsigned int ext_flags; 1771 1772 *ref_credits = 0; 1773 ret = ocfs2_xattr_get_clusters(inode, 0, &p_cluster, 1774 &num_clusters, 1775 &xv->xr_list, 1776 &ext_flags); 1777 if (ret) { 1778 mlog_errno(ret); 1779 goto out; 1780 } 1781 1782 if (!(ext_flags & OCFS2_EXT_REFCOUNTED)) 1783 goto out; 1784 1785 ret = ocfs2_refcounted_xattr_delete_need(inode, ref_ci, 1786 ref_root_bh, xv, 1787 &meta_add, ref_credits); 1788 if (ret) { 1789 mlog_errno(ret); 1790 goto out; 1791 } 1792 1793 ret = ocfs2_reserve_new_metadata_blocks(OCFS2_SB(inode->i_sb), 1794 meta_add, meta_ac); 1795 if (ret) 1796 mlog_errno(ret); 1797 1798 out: 1799 return ret; 1800 } 1801 1802 static int ocfs2_remove_value_outside(struct inode*inode, 1803 struct ocfs2_xattr_value_buf *vb, 1804 struct ocfs2_xattr_header *header, 1805 struct ocfs2_caching_info *ref_ci, 1806 struct buffer_head *ref_root_bh) 1807 { 1808 int ret = 0, i, ref_credits; 1809 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 1810 struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, }; 1811 void *val; 1812 1813 ocfs2_init_dealloc_ctxt(&ctxt.dealloc); 1814 1815 for (i = 0; i < le16_to_cpu(header->xh_count); i++) { 1816 struct ocfs2_xattr_entry *entry = &header->xh_entries[i]; 1817 1818 if (ocfs2_xattr_is_local(entry)) 1819 continue; 1820 1821 val = (void *)header + 1822 le16_to_cpu(entry->xe_name_offset); 1823 vb->vb_xv = (struct ocfs2_xattr_value_root *) 1824 (val + OCFS2_XATTR_SIZE(entry->xe_name_len)); 1825 1826 ret = ocfs2_lock_xattr_remove_allocators(inode, vb->vb_xv, 1827 ref_ci, ref_root_bh, 1828 &ctxt.meta_ac, 1829 &ref_credits); 1830 1831 ctxt.handle = ocfs2_start_trans(osb, ref_credits + 1832 ocfs2_remove_extent_credits(osb->sb)); 1833 if (IS_ERR(ctxt.handle)) { 1834 ret = PTR_ERR(ctxt.handle); 1835 mlog_errno(ret); 1836 break; 1837 } 1838 1839 ret = ocfs2_xattr_value_truncate(inode, vb, 0, &ctxt); 1840 if (ret < 0) { 1841 mlog_errno(ret); 1842 break; 1843 } 1844 1845 ocfs2_commit_trans(osb, ctxt.handle); 1846 if (ctxt.meta_ac) { 1847 ocfs2_free_alloc_context(ctxt.meta_ac); 1848 ctxt.meta_ac = NULL; 1849 } 1850 } 1851 1852 if (ctxt.meta_ac) 1853 ocfs2_free_alloc_context(ctxt.meta_ac); 1854 ocfs2_schedule_truncate_log_flush(osb, 1); 1855 ocfs2_run_deallocs(osb, &ctxt.dealloc); 1856 return ret; 1857 } 1858 1859 static int ocfs2_xattr_ibody_remove(struct inode *inode, 1860 struct buffer_head *di_bh, 1861 struct ocfs2_caching_info *ref_ci, 1862 struct buffer_head *ref_root_bh) 1863 { 1864 1865 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; 1866 struct ocfs2_xattr_header *header; 1867 int ret; 1868 struct ocfs2_xattr_value_buf vb = { 1869 .vb_bh = di_bh, 1870 .vb_access = ocfs2_journal_access_di, 1871 }; 1872 1873 header = (struct ocfs2_xattr_header *) 1874 ((void *)di + inode->i_sb->s_blocksize - 1875 le16_to_cpu(di->i_xattr_inline_size)); 1876 1877 ret = ocfs2_remove_value_outside(inode, &vb, header, 1878 ref_ci, ref_root_bh); 1879 1880 return ret; 1881 } 1882 1883 struct ocfs2_rm_xattr_bucket_para { 1884 struct ocfs2_caching_info *ref_ci; 1885 struct buffer_head *ref_root_bh; 1886 }; 1887 1888 static int ocfs2_xattr_block_remove(struct inode *inode, 1889 struct buffer_head *blk_bh, 1890 struct ocfs2_caching_info *ref_ci, 1891 struct buffer_head *ref_root_bh) 1892 { 1893 struct ocfs2_xattr_block *xb; 1894 int ret = 0; 1895 struct ocfs2_xattr_value_buf vb = { 1896 .vb_bh = blk_bh, 1897 .vb_access = ocfs2_journal_access_xb, 1898 }; 1899 struct ocfs2_rm_xattr_bucket_para args = { 1900 .ref_ci = ref_ci, 1901 .ref_root_bh = ref_root_bh, 1902 }; 1903 1904 xb = (struct ocfs2_xattr_block *)blk_bh->b_data; 1905 if (!(le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED)) { 1906 struct ocfs2_xattr_header *header = &(xb->xb_attrs.xb_header); 1907 ret = ocfs2_remove_value_outside(inode, &vb, header, 1908 ref_ci, ref_root_bh); 1909 } else 1910 ret = ocfs2_iterate_xattr_index_block(inode, 1911 blk_bh, 1912 ocfs2_rm_xattr_cluster, 1913 &args); 1914 1915 return ret; 1916 } 1917 1918 static int ocfs2_xattr_free_block(struct inode *inode, 1919 u64 block, 1920 struct ocfs2_caching_info *ref_ci, 1921 struct buffer_head *ref_root_bh) 1922 { 1923 struct inode *xb_alloc_inode; 1924 struct buffer_head *xb_alloc_bh = NULL; 1925 struct buffer_head *blk_bh = NULL; 1926 struct ocfs2_xattr_block *xb; 1927 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 1928 handle_t *handle; 1929 int ret = 0; 1930 u64 blk, bg_blkno; 1931 u16 bit; 1932 1933 ret = ocfs2_read_xattr_block(inode, block, &blk_bh); 1934 if (ret < 0) { 1935 mlog_errno(ret); 1936 goto out; 1937 } 1938 1939 ret = ocfs2_xattr_block_remove(inode, blk_bh, ref_ci, ref_root_bh); 1940 if (ret < 0) { 1941 mlog_errno(ret); 1942 goto out; 1943 } 1944 1945 xb = (struct ocfs2_xattr_block *)blk_bh->b_data; 1946 blk = le64_to_cpu(xb->xb_blkno); 1947 bit = le16_to_cpu(xb->xb_suballoc_bit); 1948 bg_blkno = ocfs2_which_suballoc_group(blk, bit); 1949 1950 xb_alloc_inode = ocfs2_get_system_file_inode(osb, 1951 EXTENT_ALLOC_SYSTEM_INODE, 1952 le16_to_cpu(xb->xb_suballoc_slot)); 1953 if (!xb_alloc_inode) { 1954 ret = -ENOMEM; 1955 mlog_errno(ret); 1956 goto out; 1957 } 1958 mutex_lock(&xb_alloc_inode->i_mutex); 1959 1960 ret = ocfs2_inode_lock(xb_alloc_inode, &xb_alloc_bh, 1); 1961 if (ret < 0) { 1962 mlog_errno(ret); 1963 goto out_mutex; 1964 } 1965 1966 handle = ocfs2_start_trans(osb, OCFS2_SUBALLOC_FREE); 1967 if (IS_ERR(handle)) { 1968 ret = PTR_ERR(handle); 1969 mlog_errno(ret); 1970 goto out_unlock; 1971 } 1972 1973 ret = ocfs2_free_suballoc_bits(handle, xb_alloc_inode, xb_alloc_bh, 1974 bit, bg_blkno, 1); 1975 if (ret < 0) 1976 mlog_errno(ret); 1977 1978 ocfs2_commit_trans(osb, handle); 1979 out_unlock: 1980 ocfs2_inode_unlock(xb_alloc_inode, 1); 1981 brelse(xb_alloc_bh); 1982 out_mutex: 1983 mutex_unlock(&xb_alloc_inode->i_mutex); 1984 iput(xb_alloc_inode); 1985 out: 1986 brelse(blk_bh); 1987 return ret; 1988 } 1989 1990 /* 1991 * ocfs2_xattr_remove() 1992 * 1993 * Free extended attribute resources associated with this inode. 1994 */ 1995 int ocfs2_xattr_remove(struct inode *inode, struct buffer_head *di_bh) 1996 { 1997 struct ocfs2_inode_info *oi = OCFS2_I(inode); 1998 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; 1999 struct ocfs2_refcount_tree *ref_tree = NULL; 2000 struct buffer_head *ref_root_bh = NULL; 2001 struct ocfs2_caching_info *ref_ci = NULL; 2002 handle_t *handle; 2003 int ret; 2004 2005 if (!ocfs2_supports_xattr(OCFS2_SB(inode->i_sb))) 2006 return 0; 2007 2008 if (!(oi->ip_dyn_features & OCFS2_HAS_XATTR_FL)) 2009 return 0; 2010 2011 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL) { 2012 ret = ocfs2_lock_refcount_tree(OCFS2_SB(inode->i_sb), 2013 le64_to_cpu(di->i_refcount_loc), 2014 1, &ref_tree, &ref_root_bh); 2015 if (ret) { 2016 mlog_errno(ret); 2017 goto out; 2018 } 2019 ref_ci = &ref_tree->rf_ci; 2020 2021 } 2022 2023 if (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL) { 2024 ret = ocfs2_xattr_ibody_remove(inode, di_bh, 2025 ref_ci, ref_root_bh); 2026 if (ret < 0) { 2027 mlog_errno(ret); 2028 goto out; 2029 } 2030 } 2031 2032 if (di->i_xattr_loc) { 2033 ret = ocfs2_xattr_free_block(inode, 2034 le64_to_cpu(di->i_xattr_loc), 2035 ref_ci, ref_root_bh); 2036 if (ret < 0) { 2037 mlog_errno(ret); 2038 goto out; 2039 } 2040 } 2041 2042 handle = ocfs2_start_trans((OCFS2_SB(inode->i_sb)), 2043 OCFS2_INODE_UPDATE_CREDITS); 2044 if (IS_ERR(handle)) { 2045 ret = PTR_ERR(handle); 2046 mlog_errno(ret); 2047 goto out; 2048 } 2049 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, 2050 OCFS2_JOURNAL_ACCESS_WRITE); 2051 if (ret) { 2052 mlog_errno(ret); 2053 goto out_commit; 2054 } 2055 2056 di->i_xattr_loc = 0; 2057 2058 spin_lock(&oi->ip_lock); 2059 oi->ip_dyn_features &= ~(OCFS2_INLINE_XATTR_FL | OCFS2_HAS_XATTR_FL); 2060 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); 2061 spin_unlock(&oi->ip_lock); 2062 2063 ret = ocfs2_journal_dirty(handle, di_bh); 2064 if (ret < 0) 2065 mlog_errno(ret); 2066 out_commit: 2067 ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); 2068 out: 2069 if (ref_tree) 2070 ocfs2_unlock_refcount_tree(OCFS2_SB(inode->i_sb), ref_tree, 1); 2071 brelse(ref_root_bh); 2072 return ret; 2073 } 2074 2075 static int ocfs2_xattr_has_space_inline(struct inode *inode, 2076 struct ocfs2_dinode *di) 2077 { 2078 struct ocfs2_inode_info *oi = OCFS2_I(inode); 2079 unsigned int xattrsize = OCFS2_SB(inode->i_sb)->s_xattr_inline_size; 2080 int free; 2081 2082 if (xattrsize < OCFS2_MIN_XATTR_INLINE_SIZE) 2083 return 0; 2084 2085 if (oi->ip_dyn_features & OCFS2_INLINE_DATA_FL) { 2086 struct ocfs2_inline_data *idata = &di->id2.i_data; 2087 free = le16_to_cpu(idata->id_count) - le64_to_cpu(di->i_size); 2088 } else if (ocfs2_inode_is_fast_symlink(inode)) { 2089 free = ocfs2_fast_symlink_chars(inode->i_sb) - 2090 le64_to_cpu(di->i_size); 2091 } else { 2092 struct ocfs2_extent_list *el = &di->id2.i_list; 2093 free = (le16_to_cpu(el->l_count) - 2094 le16_to_cpu(el->l_next_free_rec)) * 2095 sizeof(struct ocfs2_extent_rec); 2096 } 2097 if (free >= xattrsize) 2098 return 1; 2099 2100 return 0; 2101 } 2102 2103 /* 2104 * ocfs2_xattr_ibody_find() 2105 * 2106 * Find extended attribute in inode block and 2107 * fill search info into struct ocfs2_xattr_search. 2108 */ 2109 static int ocfs2_xattr_ibody_find(struct inode *inode, 2110 int name_index, 2111 const char *name, 2112 struct ocfs2_xattr_search *xs) 2113 { 2114 struct ocfs2_inode_info *oi = OCFS2_I(inode); 2115 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; 2116 int ret; 2117 int has_space = 0; 2118 2119 if (inode->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE) 2120 return 0; 2121 2122 if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) { 2123 down_read(&oi->ip_alloc_sem); 2124 has_space = ocfs2_xattr_has_space_inline(inode, di); 2125 up_read(&oi->ip_alloc_sem); 2126 if (!has_space) 2127 return 0; 2128 } 2129 2130 xs->xattr_bh = xs->inode_bh; 2131 xs->end = (void *)di + inode->i_sb->s_blocksize; 2132 if (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL) 2133 xs->header = (struct ocfs2_xattr_header *) 2134 (xs->end - le16_to_cpu(di->i_xattr_inline_size)); 2135 else 2136 xs->header = (struct ocfs2_xattr_header *) 2137 (xs->end - OCFS2_SB(inode->i_sb)->s_xattr_inline_size); 2138 xs->base = (void *)xs->header; 2139 xs->here = xs->header->xh_entries; 2140 2141 /* Find the named attribute. */ 2142 if (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL) { 2143 ret = ocfs2_xattr_find_entry(name_index, name, xs); 2144 if (ret && ret != -ENODATA) 2145 return ret; 2146 xs->not_found = ret; 2147 } 2148 2149 return 0; 2150 } 2151 2152 /* 2153 * ocfs2_xattr_ibody_set() 2154 * 2155 * Set, replace or remove an extended attribute into inode block. 2156 * 2157 */ 2158 static int ocfs2_xattr_ibody_set(struct inode *inode, 2159 struct ocfs2_xattr_info *xi, 2160 struct ocfs2_xattr_search *xs, 2161 struct ocfs2_xattr_set_ctxt *ctxt) 2162 { 2163 struct ocfs2_inode_info *oi = OCFS2_I(inode); 2164 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; 2165 int ret; 2166 2167 if (inode->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE) 2168 return -ENOSPC; 2169 2170 down_write(&oi->ip_alloc_sem); 2171 if (!(oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) { 2172 if (!ocfs2_xattr_has_space_inline(inode, di)) { 2173 ret = -ENOSPC; 2174 goto out; 2175 } 2176 } 2177 2178 ret = ocfs2_xattr_set_entry(inode, xi, xs, ctxt, 2179 (OCFS2_INLINE_XATTR_FL | OCFS2_HAS_XATTR_FL)); 2180 out: 2181 up_write(&oi->ip_alloc_sem); 2182 2183 return ret; 2184 } 2185 2186 /* 2187 * ocfs2_xattr_block_find() 2188 * 2189 * Find extended attribute in external block and 2190 * fill search info into struct ocfs2_xattr_search. 2191 */ 2192 static int ocfs2_xattr_block_find(struct inode *inode, 2193 int name_index, 2194 const char *name, 2195 struct ocfs2_xattr_search *xs) 2196 { 2197 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; 2198 struct buffer_head *blk_bh = NULL; 2199 struct ocfs2_xattr_block *xb; 2200 int ret = 0; 2201 2202 if (!di->i_xattr_loc) 2203 return ret; 2204 2205 ret = ocfs2_read_xattr_block(inode, le64_to_cpu(di->i_xattr_loc), 2206 &blk_bh); 2207 if (ret < 0) { 2208 mlog_errno(ret); 2209 return ret; 2210 } 2211 2212 xs->xattr_bh = blk_bh; 2213 xb = (struct ocfs2_xattr_block *)blk_bh->b_data; 2214 2215 if (!(le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED)) { 2216 xs->header = &xb->xb_attrs.xb_header; 2217 xs->base = (void *)xs->header; 2218 xs->end = (void *)(blk_bh->b_data) + blk_bh->b_size; 2219 xs->here = xs->header->xh_entries; 2220 2221 ret = ocfs2_xattr_find_entry(name_index, name, xs); 2222 } else 2223 ret = ocfs2_xattr_index_block_find(inode, blk_bh, 2224 name_index, 2225 name, xs); 2226 2227 if (ret && ret != -ENODATA) { 2228 xs->xattr_bh = NULL; 2229 goto cleanup; 2230 } 2231 xs->not_found = ret; 2232 return 0; 2233 cleanup: 2234 brelse(blk_bh); 2235 2236 return ret; 2237 } 2238 2239 static int ocfs2_create_xattr_block(handle_t *handle, 2240 struct inode *inode, 2241 struct buffer_head *inode_bh, 2242 struct ocfs2_alloc_context *meta_ac, 2243 struct buffer_head **ret_bh, 2244 int indexed) 2245 { 2246 int ret; 2247 u16 suballoc_bit_start; 2248 u32 num_got; 2249 u64 first_blkno; 2250 struct ocfs2_dinode *di = (struct ocfs2_dinode *)inode_bh->b_data; 2251 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 2252 struct buffer_head *new_bh = NULL; 2253 struct ocfs2_xattr_block *xblk; 2254 2255 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), inode_bh, 2256 OCFS2_JOURNAL_ACCESS_CREATE); 2257 if (ret < 0) { 2258 mlog_errno(ret); 2259 goto end; 2260 } 2261 2262 ret = ocfs2_claim_metadata(osb, handle, meta_ac, 1, 2263 &suballoc_bit_start, &num_got, 2264 &first_blkno); 2265 if (ret < 0) { 2266 mlog_errno(ret); 2267 goto end; 2268 } 2269 2270 new_bh = sb_getblk(inode->i_sb, first_blkno); 2271 ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode), new_bh); 2272 2273 ret = ocfs2_journal_access_xb(handle, INODE_CACHE(inode), 2274 new_bh, 2275 OCFS2_JOURNAL_ACCESS_CREATE); 2276 if (ret < 0) { 2277 mlog_errno(ret); 2278 goto end; 2279 } 2280 2281 /* Initialize ocfs2_xattr_block */ 2282 xblk = (struct ocfs2_xattr_block *)new_bh->b_data; 2283 memset(xblk, 0, inode->i_sb->s_blocksize); 2284 strcpy((void *)xblk, OCFS2_XATTR_BLOCK_SIGNATURE); 2285 xblk->xb_suballoc_slot = cpu_to_le16(osb->slot_num); 2286 xblk->xb_suballoc_bit = cpu_to_le16(suballoc_bit_start); 2287 xblk->xb_fs_generation = cpu_to_le32(osb->fs_generation); 2288 xblk->xb_blkno = cpu_to_le64(first_blkno); 2289 2290 if (indexed) { 2291 struct ocfs2_xattr_tree_root *xr = &xblk->xb_attrs.xb_root; 2292 xr->xt_clusters = cpu_to_le32(1); 2293 xr->xt_last_eb_blk = 0; 2294 xr->xt_list.l_tree_depth = 0; 2295 xr->xt_list.l_count = cpu_to_le16( 2296 ocfs2_xattr_recs_per_xb(inode->i_sb)); 2297 xr->xt_list.l_next_free_rec = cpu_to_le16(1); 2298 xblk->xb_flags = cpu_to_le16(OCFS2_XATTR_INDEXED); 2299 } 2300 2301 ret = ocfs2_journal_dirty(handle, new_bh); 2302 if (ret < 0) { 2303 mlog_errno(ret); 2304 goto end; 2305 } 2306 di->i_xattr_loc = cpu_to_le64(first_blkno); 2307 ocfs2_journal_dirty(handle, inode_bh); 2308 2309 *ret_bh = new_bh; 2310 new_bh = NULL; 2311 2312 end: 2313 brelse(new_bh); 2314 return ret; 2315 } 2316 2317 /* 2318 * ocfs2_xattr_block_set() 2319 * 2320 * Set, replace or remove an extended attribute into external block. 2321 * 2322 */ 2323 static int ocfs2_xattr_block_set(struct inode *inode, 2324 struct ocfs2_xattr_info *xi, 2325 struct ocfs2_xattr_search *xs, 2326 struct ocfs2_xattr_set_ctxt *ctxt) 2327 { 2328 struct buffer_head *new_bh = NULL; 2329 handle_t *handle = ctxt->handle; 2330 struct ocfs2_xattr_block *xblk = NULL; 2331 int ret; 2332 2333 if (!xs->xattr_bh) { 2334 ret = ocfs2_create_xattr_block(handle, inode, xs->inode_bh, 2335 ctxt->meta_ac, &new_bh, 0); 2336 if (ret) { 2337 mlog_errno(ret); 2338 goto end; 2339 } 2340 2341 xs->xattr_bh = new_bh; 2342 xblk = (struct ocfs2_xattr_block *)xs->xattr_bh->b_data; 2343 xs->header = &xblk->xb_attrs.xb_header; 2344 xs->base = (void *)xs->header; 2345 xs->end = (void *)xblk + inode->i_sb->s_blocksize; 2346 xs->here = xs->header->xh_entries; 2347 } else 2348 xblk = (struct ocfs2_xattr_block *)xs->xattr_bh->b_data; 2349 2350 if (!(le16_to_cpu(xblk->xb_flags) & OCFS2_XATTR_INDEXED)) { 2351 /* Set extended attribute into external block */ 2352 ret = ocfs2_xattr_set_entry(inode, xi, xs, ctxt, 2353 OCFS2_HAS_XATTR_FL); 2354 if (!ret || ret != -ENOSPC) 2355 goto end; 2356 2357 ret = ocfs2_xattr_create_index_block(inode, xs, ctxt); 2358 if (ret) 2359 goto end; 2360 } 2361 2362 ret = ocfs2_xattr_set_entry_index_block(inode, xi, xs, ctxt); 2363 2364 end: 2365 2366 return ret; 2367 } 2368 2369 /* Check whether the new xattr can be inserted into the inode. */ 2370 static int ocfs2_xattr_can_be_in_inode(struct inode *inode, 2371 struct ocfs2_xattr_info *xi, 2372 struct ocfs2_xattr_search *xs) 2373 { 2374 u64 value_size; 2375 struct ocfs2_xattr_entry *last; 2376 int free, i; 2377 size_t min_offs = xs->end - xs->base; 2378 2379 if (!xs->header) 2380 return 0; 2381 2382 last = xs->header->xh_entries; 2383 2384 for (i = 0; i < le16_to_cpu(xs->header->xh_count); i++) { 2385 size_t offs = le16_to_cpu(last->xe_name_offset); 2386 if (offs < min_offs) 2387 min_offs = offs; 2388 last += 1; 2389 } 2390 2391 free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP; 2392 if (free < 0) 2393 return 0; 2394 2395 BUG_ON(!xs->not_found); 2396 2397 if (xi->value_len > OCFS2_XATTR_INLINE_SIZE) 2398 value_size = OCFS2_XATTR_ROOT_SIZE; 2399 else 2400 value_size = OCFS2_XATTR_SIZE(xi->value_len); 2401 2402 if (free >= sizeof(struct ocfs2_xattr_entry) + 2403 OCFS2_XATTR_SIZE(strlen(xi->name)) + value_size) 2404 return 1; 2405 2406 return 0; 2407 } 2408 2409 static int ocfs2_calc_xattr_set_need(struct inode *inode, 2410 struct ocfs2_dinode *di, 2411 struct ocfs2_xattr_info *xi, 2412 struct ocfs2_xattr_search *xis, 2413 struct ocfs2_xattr_search *xbs, 2414 int *clusters_need, 2415 int *meta_need, 2416 int *credits_need) 2417 { 2418 int ret = 0, old_in_xb = 0; 2419 int clusters_add = 0, meta_add = 0, credits = 0; 2420 struct buffer_head *bh = NULL; 2421 struct ocfs2_xattr_block *xb = NULL; 2422 struct ocfs2_xattr_entry *xe = NULL; 2423 struct ocfs2_xattr_value_root *xv = NULL; 2424 char *base = NULL; 2425 int name_offset, name_len = 0; 2426 u32 new_clusters = ocfs2_clusters_for_bytes(inode->i_sb, 2427 xi->value_len); 2428 u64 value_size; 2429 2430 /* 2431 * Calculate the clusters we need to write. 2432 * No matter whether we replace an old one or add a new one, 2433 * we need this for writing. 2434 */ 2435 if (xi->value_len > OCFS2_XATTR_INLINE_SIZE) 2436 credits += new_clusters * 2437 ocfs2_clusters_to_blocks(inode->i_sb, 1); 2438 2439 if (xis->not_found && xbs->not_found) { 2440 credits += ocfs2_blocks_per_xattr_bucket(inode->i_sb); 2441 2442 if (xi->value_len > OCFS2_XATTR_INLINE_SIZE) { 2443 clusters_add += new_clusters; 2444 credits += ocfs2_calc_extend_credits(inode->i_sb, 2445 &def_xv.xv.xr_list, 2446 new_clusters); 2447 } 2448 2449 goto meta_guess; 2450 } 2451 2452 if (!xis->not_found) { 2453 xe = xis->here; 2454 name_offset = le16_to_cpu(xe->xe_name_offset); 2455 name_len = OCFS2_XATTR_SIZE(xe->xe_name_len); 2456 base = xis->base; 2457 credits += OCFS2_INODE_UPDATE_CREDITS; 2458 } else { 2459 int i, block_off = 0; 2460 xb = (struct ocfs2_xattr_block *)xbs->xattr_bh->b_data; 2461 xe = xbs->here; 2462 name_offset = le16_to_cpu(xe->xe_name_offset); 2463 name_len = OCFS2_XATTR_SIZE(xe->xe_name_len); 2464 i = xbs->here - xbs->header->xh_entries; 2465 old_in_xb = 1; 2466 2467 if (le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED) { 2468 ret = ocfs2_xattr_bucket_get_name_value(inode->i_sb, 2469 bucket_xh(xbs->bucket), 2470 i, &block_off, 2471 &name_offset); 2472 base = bucket_block(xbs->bucket, block_off); 2473 credits += ocfs2_blocks_per_xattr_bucket(inode->i_sb); 2474 } else { 2475 base = xbs->base; 2476 credits += OCFS2_XATTR_BLOCK_UPDATE_CREDITS; 2477 } 2478 } 2479 2480 /* 2481 * delete a xattr doesn't need metadata and cluster allocation. 2482 * so just calculate the credits and return. 2483 * 2484 * The credits for removing the value tree will be extended 2485 * by ocfs2_remove_extent itself. 2486 */ 2487 if (!xi->value) { 2488 if (!ocfs2_xattr_is_local(xe)) 2489 credits += ocfs2_remove_extent_credits(inode->i_sb); 2490 2491 goto out; 2492 } 2493 2494 /* do cluster allocation guess first. */ 2495 value_size = le64_to_cpu(xe->xe_value_size); 2496 2497 if (old_in_xb) { 2498 /* 2499 * In xattr set, we always try to set the xe in inode first, 2500 * so if it can be inserted into inode successfully, the old 2501 * one will be removed from the xattr block, and this xattr 2502 * will be inserted into inode as a new xattr in inode. 2503 */ 2504 if (ocfs2_xattr_can_be_in_inode(inode, xi, xis)) { 2505 clusters_add += new_clusters; 2506 credits += ocfs2_remove_extent_credits(inode->i_sb) + 2507 OCFS2_INODE_UPDATE_CREDITS; 2508 if (!ocfs2_xattr_is_local(xe)) 2509 credits += ocfs2_calc_extend_credits( 2510 inode->i_sb, 2511 &def_xv.xv.xr_list, 2512 new_clusters); 2513 goto out; 2514 } 2515 } 2516 2517 if (xi->value_len > OCFS2_XATTR_INLINE_SIZE) { 2518 /* the new values will be stored outside. */ 2519 u32 old_clusters = 0; 2520 2521 if (!ocfs2_xattr_is_local(xe)) { 2522 old_clusters = ocfs2_clusters_for_bytes(inode->i_sb, 2523 value_size); 2524 xv = (struct ocfs2_xattr_value_root *) 2525 (base + name_offset + name_len); 2526 value_size = OCFS2_XATTR_ROOT_SIZE; 2527 } else 2528 xv = &def_xv.xv; 2529 2530 if (old_clusters >= new_clusters) { 2531 credits += ocfs2_remove_extent_credits(inode->i_sb); 2532 goto out; 2533 } else { 2534 meta_add += ocfs2_extend_meta_needed(&xv->xr_list); 2535 clusters_add += new_clusters - old_clusters; 2536 credits += ocfs2_calc_extend_credits(inode->i_sb, 2537 &xv->xr_list, 2538 new_clusters - 2539 old_clusters); 2540 if (value_size >= OCFS2_XATTR_ROOT_SIZE) 2541 goto out; 2542 } 2543 } else { 2544 /* 2545 * Now the new value will be stored inside. So if the new 2546 * value is smaller than the size of value root or the old 2547 * value, we don't need any allocation, otherwise we have 2548 * to guess metadata allocation. 2549 */ 2550 if ((ocfs2_xattr_is_local(xe) && value_size >= xi->value_len) || 2551 (!ocfs2_xattr_is_local(xe) && 2552 OCFS2_XATTR_ROOT_SIZE >= xi->value_len)) 2553 goto out; 2554 } 2555 2556 meta_guess: 2557 /* calculate metadata allocation. */ 2558 if (di->i_xattr_loc) { 2559 if (!xbs->xattr_bh) { 2560 ret = ocfs2_read_xattr_block(inode, 2561 le64_to_cpu(di->i_xattr_loc), 2562 &bh); 2563 if (ret) { 2564 mlog_errno(ret); 2565 goto out; 2566 } 2567 2568 xb = (struct ocfs2_xattr_block *)bh->b_data; 2569 } else 2570 xb = (struct ocfs2_xattr_block *)xbs->xattr_bh->b_data; 2571 2572 /* 2573 * If there is already an xattr tree, good, we can calculate 2574 * like other b-trees. Otherwise we may have the chance of 2575 * create a tree, the credit calculation is borrowed from 2576 * ocfs2_calc_extend_credits with root_el = NULL. And the 2577 * new tree will be cluster based, so no meta is needed. 2578 */ 2579 if (le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED) { 2580 struct ocfs2_extent_list *el = 2581 &xb->xb_attrs.xb_root.xt_list; 2582 meta_add += ocfs2_extend_meta_needed(el); 2583 credits += ocfs2_calc_extend_credits(inode->i_sb, 2584 el, 1); 2585 } else 2586 credits += OCFS2_SUBALLOC_ALLOC + 1; 2587 2588 /* 2589 * This cluster will be used either for new bucket or for 2590 * new xattr block. 2591 * If the cluster size is the same as the bucket size, one 2592 * more is needed since we may need to extend the bucket 2593 * also. 2594 */ 2595 clusters_add += 1; 2596 credits += ocfs2_blocks_per_xattr_bucket(inode->i_sb); 2597 if (OCFS2_XATTR_BUCKET_SIZE == 2598 OCFS2_SB(inode->i_sb)->s_clustersize) { 2599 credits += ocfs2_blocks_per_xattr_bucket(inode->i_sb); 2600 clusters_add += 1; 2601 } 2602 } else { 2603 meta_add += 1; 2604 credits += OCFS2_XATTR_BLOCK_CREATE_CREDITS; 2605 } 2606 out: 2607 if (clusters_need) 2608 *clusters_need = clusters_add; 2609 if (meta_need) 2610 *meta_need = meta_add; 2611 if (credits_need) 2612 *credits_need = credits; 2613 brelse(bh); 2614 return ret; 2615 } 2616 2617 static int ocfs2_init_xattr_set_ctxt(struct inode *inode, 2618 struct ocfs2_dinode *di, 2619 struct ocfs2_xattr_info *xi, 2620 struct ocfs2_xattr_search *xis, 2621 struct ocfs2_xattr_search *xbs, 2622 struct ocfs2_xattr_set_ctxt *ctxt, 2623 int extra_meta, 2624 int *credits) 2625 { 2626 int clusters_add, meta_add, ret; 2627 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 2628 2629 memset(ctxt, 0, sizeof(struct ocfs2_xattr_set_ctxt)); 2630 2631 ocfs2_init_dealloc_ctxt(&ctxt->dealloc); 2632 2633 ret = ocfs2_calc_xattr_set_need(inode, di, xi, xis, xbs, 2634 &clusters_add, &meta_add, credits); 2635 if (ret) { 2636 mlog_errno(ret); 2637 return ret; 2638 } 2639 2640 meta_add += extra_meta; 2641 mlog(0, "Set xattr %s, reserve meta blocks = %d, clusters = %d, " 2642 "credits = %d\n", xi->name, meta_add, clusters_add, *credits); 2643 2644 if (meta_add) { 2645 ret = ocfs2_reserve_new_metadata_blocks(osb, meta_add, 2646 &ctxt->meta_ac); 2647 if (ret) { 2648 mlog_errno(ret); 2649 goto out; 2650 } 2651 } 2652 2653 if (clusters_add) { 2654 ret = ocfs2_reserve_clusters(osb, clusters_add, &ctxt->data_ac); 2655 if (ret) 2656 mlog_errno(ret); 2657 } 2658 out: 2659 if (ret) { 2660 if (ctxt->meta_ac) { 2661 ocfs2_free_alloc_context(ctxt->meta_ac); 2662 ctxt->meta_ac = NULL; 2663 } 2664 2665 /* 2666 * We cannot have an error and a non null ctxt->data_ac. 2667 */ 2668 } 2669 2670 return ret; 2671 } 2672 2673 static int __ocfs2_xattr_set_handle(struct inode *inode, 2674 struct ocfs2_dinode *di, 2675 struct ocfs2_xattr_info *xi, 2676 struct ocfs2_xattr_search *xis, 2677 struct ocfs2_xattr_search *xbs, 2678 struct ocfs2_xattr_set_ctxt *ctxt) 2679 { 2680 int ret = 0, credits, old_found; 2681 2682 if (!xi->value) { 2683 /* Remove existing extended attribute */ 2684 if (!xis->not_found) 2685 ret = ocfs2_xattr_ibody_set(inode, xi, xis, ctxt); 2686 else if (!xbs->not_found) 2687 ret = ocfs2_xattr_block_set(inode, xi, xbs, ctxt); 2688 } else { 2689 /* We always try to set extended attribute into inode first*/ 2690 ret = ocfs2_xattr_ibody_set(inode, xi, xis, ctxt); 2691 if (!ret && !xbs->not_found) { 2692 /* 2693 * If succeed and that extended attribute existing in 2694 * external block, then we will remove it. 2695 */ 2696 xi->value = NULL; 2697 xi->value_len = 0; 2698 2699 old_found = xis->not_found; 2700 xis->not_found = -ENODATA; 2701 ret = ocfs2_calc_xattr_set_need(inode, 2702 di, 2703 xi, 2704 xis, 2705 xbs, 2706 NULL, 2707 NULL, 2708 &credits); 2709 xis->not_found = old_found; 2710 if (ret) { 2711 mlog_errno(ret); 2712 goto out; 2713 } 2714 2715 ret = ocfs2_extend_trans(ctxt->handle, credits + 2716 ctxt->handle->h_buffer_credits); 2717 if (ret) { 2718 mlog_errno(ret); 2719 goto out; 2720 } 2721 ret = ocfs2_xattr_block_set(inode, xi, xbs, ctxt); 2722 } else if (ret == -ENOSPC) { 2723 if (di->i_xattr_loc && !xbs->xattr_bh) { 2724 ret = ocfs2_xattr_block_find(inode, 2725 xi->name_index, 2726 xi->name, xbs); 2727 if (ret) 2728 goto out; 2729 2730 old_found = xis->not_found; 2731 xis->not_found = -ENODATA; 2732 ret = ocfs2_calc_xattr_set_need(inode, 2733 di, 2734 xi, 2735 xis, 2736 xbs, 2737 NULL, 2738 NULL, 2739 &credits); 2740 xis->not_found = old_found; 2741 if (ret) { 2742 mlog_errno(ret); 2743 goto out; 2744 } 2745 2746 ret = ocfs2_extend_trans(ctxt->handle, credits + 2747 ctxt->handle->h_buffer_credits); 2748 if (ret) { 2749 mlog_errno(ret); 2750 goto out; 2751 } 2752 } 2753 /* 2754 * If no space in inode, we will set extended attribute 2755 * into external block. 2756 */ 2757 ret = ocfs2_xattr_block_set(inode, xi, xbs, ctxt); 2758 if (ret) 2759 goto out; 2760 if (!xis->not_found) { 2761 /* 2762 * If succeed and that extended attribute 2763 * existing in inode, we will remove it. 2764 */ 2765 xi->value = NULL; 2766 xi->value_len = 0; 2767 xbs->not_found = -ENODATA; 2768 ret = ocfs2_calc_xattr_set_need(inode, 2769 di, 2770 xi, 2771 xis, 2772 xbs, 2773 NULL, 2774 NULL, 2775 &credits); 2776 if (ret) { 2777 mlog_errno(ret); 2778 goto out; 2779 } 2780 2781 ret = ocfs2_extend_trans(ctxt->handle, credits + 2782 ctxt->handle->h_buffer_credits); 2783 if (ret) { 2784 mlog_errno(ret); 2785 goto out; 2786 } 2787 ret = ocfs2_xattr_ibody_set(inode, xi, 2788 xis, ctxt); 2789 } 2790 } 2791 } 2792 2793 if (!ret) { 2794 /* Update inode ctime. */ 2795 ret = ocfs2_journal_access_di(ctxt->handle, INODE_CACHE(inode), 2796 xis->inode_bh, 2797 OCFS2_JOURNAL_ACCESS_WRITE); 2798 if (ret) { 2799 mlog_errno(ret); 2800 goto out; 2801 } 2802 2803 inode->i_ctime = CURRENT_TIME; 2804 di->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); 2805 di->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); 2806 ocfs2_journal_dirty(ctxt->handle, xis->inode_bh); 2807 } 2808 out: 2809 return ret; 2810 } 2811 2812 /* 2813 * This function only called duing creating inode 2814 * for init security/acl xattrs of the new inode. 2815 * All transanction credits have been reserved in mknod. 2816 */ 2817 int ocfs2_xattr_set_handle(handle_t *handle, 2818 struct inode *inode, 2819 struct buffer_head *di_bh, 2820 int name_index, 2821 const char *name, 2822 const void *value, 2823 size_t value_len, 2824 int flags, 2825 struct ocfs2_alloc_context *meta_ac, 2826 struct ocfs2_alloc_context *data_ac) 2827 { 2828 struct ocfs2_dinode *di; 2829 int ret; 2830 2831 struct ocfs2_xattr_info xi = { 2832 .name_index = name_index, 2833 .name = name, 2834 .value = value, 2835 .value_len = value_len, 2836 }; 2837 2838 struct ocfs2_xattr_search xis = { 2839 .not_found = -ENODATA, 2840 }; 2841 2842 struct ocfs2_xattr_search xbs = { 2843 .not_found = -ENODATA, 2844 }; 2845 2846 struct ocfs2_xattr_set_ctxt ctxt = { 2847 .handle = handle, 2848 .meta_ac = meta_ac, 2849 .data_ac = data_ac, 2850 }; 2851 2852 if (!ocfs2_supports_xattr(OCFS2_SB(inode->i_sb))) 2853 return -EOPNOTSUPP; 2854 2855 /* 2856 * In extreme situation, may need xattr bucket when 2857 * block size is too small. And we have already reserved 2858 * the credits for bucket in mknod. 2859 */ 2860 if (inode->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE) { 2861 xbs.bucket = ocfs2_xattr_bucket_new(inode); 2862 if (!xbs.bucket) { 2863 mlog_errno(-ENOMEM); 2864 return -ENOMEM; 2865 } 2866 } 2867 2868 xis.inode_bh = xbs.inode_bh = di_bh; 2869 di = (struct ocfs2_dinode *)di_bh->b_data; 2870 2871 down_write(&OCFS2_I(inode)->ip_xattr_sem); 2872 2873 ret = ocfs2_xattr_ibody_find(inode, name_index, name, &xis); 2874 if (ret) 2875 goto cleanup; 2876 if (xis.not_found) { 2877 ret = ocfs2_xattr_block_find(inode, name_index, name, &xbs); 2878 if (ret) 2879 goto cleanup; 2880 } 2881 2882 ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt); 2883 2884 cleanup: 2885 up_write(&OCFS2_I(inode)->ip_xattr_sem); 2886 brelse(xbs.xattr_bh); 2887 ocfs2_xattr_bucket_free(xbs.bucket); 2888 2889 return ret; 2890 } 2891 2892 /* 2893 * ocfs2_xattr_set() 2894 * 2895 * Set, replace or remove an extended attribute for this inode. 2896 * value is NULL to remove an existing extended attribute, else either 2897 * create or replace an extended attribute. 2898 */ 2899 int ocfs2_xattr_set(struct inode *inode, 2900 int name_index, 2901 const char *name, 2902 const void *value, 2903 size_t value_len, 2904 int flags) 2905 { 2906 struct buffer_head *di_bh = NULL; 2907 struct ocfs2_dinode *di; 2908 int ret, credits, ref_meta = 0, ref_credits = 0; 2909 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 2910 struct inode *tl_inode = osb->osb_tl_inode; 2911 struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, }; 2912 struct ocfs2_refcount_tree *ref_tree = NULL; 2913 2914 struct ocfs2_xattr_info xi = { 2915 .name_index = name_index, 2916 .name = name, 2917 .value = value, 2918 .value_len = value_len, 2919 }; 2920 2921 struct ocfs2_xattr_search xis = { 2922 .not_found = -ENODATA, 2923 }; 2924 2925 struct ocfs2_xattr_search xbs = { 2926 .not_found = -ENODATA, 2927 }; 2928 2929 if (!ocfs2_supports_xattr(OCFS2_SB(inode->i_sb))) 2930 return -EOPNOTSUPP; 2931 2932 /* 2933 * Only xbs will be used on indexed trees. xis doesn't need a 2934 * bucket. 2935 */ 2936 xbs.bucket = ocfs2_xattr_bucket_new(inode); 2937 if (!xbs.bucket) { 2938 mlog_errno(-ENOMEM); 2939 return -ENOMEM; 2940 } 2941 2942 ret = ocfs2_inode_lock(inode, &di_bh, 1); 2943 if (ret < 0) { 2944 mlog_errno(ret); 2945 goto cleanup_nolock; 2946 } 2947 xis.inode_bh = xbs.inode_bh = di_bh; 2948 di = (struct ocfs2_dinode *)di_bh->b_data; 2949 2950 down_write(&OCFS2_I(inode)->ip_xattr_sem); 2951 /* 2952 * Scan inode and external block to find the same name 2953 * extended attribute and collect search infomation. 2954 */ 2955 ret = ocfs2_xattr_ibody_find(inode, name_index, name, &xis); 2956 if (ret) 2957 goto cleanup; 2958 if (xis.not_found) { 2959 ret = ocfs2_xattr_block_find(inode, name_index, name, &xbs); 2960 if (ret) 2961 goto cleanup; 2962 } 2963 2964 if (xis.not_found && xbs.not_found) { 2965 ret = -ENODATA; 2966 if (flags & XATTR_REPLACE) 2967 goto cleanup; 2968 ret = 0; 2969 if (!value) 2970 goto cleanup; 2971 } else { 2972 ret = -EEXIST; 2973 if (flags & XATTR_CREATE) 2974 goto cleanup; 2975 } 2976 2977 /* Check whether the value is refcounted and do some prepartion. */ 2978 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL && 2979 (!xis.not_found || !xbs.not_found)) { 2980 ret = ocfs2_prepare_refcount_xattr(inode, di, &xi, 2981 &xis, &xbs, &ref_tree, 2982 &ref_meta, &ref_credits); 2983 if (ret) { 2984 mlog_errno(ret); 2985 goto cleanup; 2986 } 2987 } 2988 2989 mutex_lock(&tl_inode->i_mutex); 2990 2991 if (ocfs2_truncate_log_needs_flush(osb)) { 2992 ret = __ocfs2_flush_truncate_log(osb); 2993 if (ret < 0) { 2994 mutex_unlock(&tl_inode->i_mutex); 2995 mlog_errno(ret); 2996 goto cleanup; 2997 } 2998 } 2999 mutex_unlock(&tl_inode->i_mutex); 3000 3001 ret = ocfs2_init_xattr_set_ctxt(inode, di, &xi, &xis, 3002 &xbs, &ctxt, ref_meta, &credits); 3003 if (ret) { 3004 mlog_errno(ret); 3005 goto cleanup; 3006 } 3007 3008 /* we need to update inode's ctime field, so add credit for it. */ 3009 credits += OCFS2_INODE_UPDATE_CREDITS; 3010 ctxt.handle = ocfs2_start_trans(osb, credits + ref_credits); 3011 if (IS_ERR(ctxt.handle)) { 3012 ret = PTR_ERR(ctxt.handle); 3013 mlog_errno(ret); 3014 goto cleanup; 3015 } 3016 3017 ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt); 3018 3019 ocfs2_commit_trans(osb, ctxt.handle); 3020 3021 if (ctxt.data_ac) 3022 ocfs2_free_alloc_context(ctxt.data_ac); 3023 if (ctxt.meta_ac) 3024 ocfs2_free_alloc_context(ctxt.meta_ac); 3025 if (ocfs2_dealloc_has_cluster(&ctxt.dealloc)) 3026 ocfs2_schedule_truncate_log_flush(osb, 1); 3027 ocfs2_run_deallocs(osb, &ctxt.dealloc); 3028 3029 cleanup: 3030 if (ref_tree) 3031 ocfs2_unlock_refcount_tree(osb, ref_tree, 1); 3032 up_write(&OCFS2_I(inode)->ip_xattr_sem); 3033 if (!value && !ret) { 3034 ret = ocfs2_try_remove_refcount_tree(inode, di_bh); 3035 if (ret) 3036 mlog_errno(ret); 3037 } 3038 ocfs2_inode_unlock(inode, 1); 3039 cleanup_nolock: 3040 brelse(di_bh); 3041 brelse(xbs.xattr_bh); 3042 ocfs2_xattr_bucket_free(xbs.bucket); 3043 3044 return ret; 3045 } 3046 3047 /* 3048 * Find the xattr extent rec which may contains name_hash. 3049 * e_cpos will be the first name hash of the xattr rec. 3050 * el must be the ocfs2_xattr_header.xb_attrs.xb_root.xt_list. 3051 */ 3052 static int ocfs2_xattr_get_rec(struct inode *inode, 3053 u32 name_hash, 3054 u64 *p_blkno, 3055 u32 *e_cpos, 3056 u32 *num_clusters, 3057 struct ocfs2_extent_list *el) 3058 { 3059 int ret = 0, i; 3060 struct buffer_head *eb_bh = NULL; 3061 struct ocfs2_extent_block *eb; 3062 struct ocfs2_extent_rec *rec = NULL; 3063 u64 e_blkno = 0; 3064 3065 if (el->l_tree_depth) { 3066 ret = ocfs2_find_leaf(INODE_CACHE(inode), el, name_hash, 3067 &eb_bh); 3068 if (ret) { 3069 mlog_errno(ret); 3070 goto out; 3071 } 3072 3073 eb = (struct ocfs2_extent_block *) eb_bh->b_data; 3074 el = &eb->h_list; 3075 3076 if (el->l_tree_depth) { 3077 ocfs2_error(inode->i_sb, 3078 "Inode %lu has non zero tree depth in " 3079 "xattr tree block %llu\n", inode->i_ino, 3080 (unsigned long long)eb_bh->b_blocknr); 3081 ret = -EROFS; 3082 goto out; 3083 } 3084 } 3085 3086 for (i = le16_to_cpu(el->l_next_free_rec) - 1; i >= 0; i--) { 3087 rec = &el->l_recs[i]; 3088 3089 if (le32_to_cpu(rec->e_cpos) <= name_hash) { 3090 e_blkno = le64_to_cpu(rec->e_blkno); 3091 break; 3092 } 3093 } 3094 3095 if (!e_blkno) { 3096 ocfs2_error(inode->i_sb, "Inode %lu has bad extent " 3097 "record (%u, %u, 0) in xattr", inode->i_ino, 3098 le32_to_cpu(rec->e_cpos), 3099 ocfs2_rec_clusters(el, rec)); 3100 ret = -EROFS; 3101 goto out; 3102 } 3103 3104 *p_blkno = le64_to_cpu(rec->e_blkno); 3105 *num_clusters = le16_to_cpu(rec->e_leaf_clusters); 3106 if (e_cpos) 3107 *e_cpos = le32_to_cpu(rec->e_cpos); 3108 out: 3109 brelse(eb_bh); 3110 return ret; 3111 } 3112 3113 typedef int (xattr_bucket_func)(struct inode *inode, 3114 struct ocfs2_xattr_bucket *bucket, 3115 void *para); 3116 3117 static int ocfs2_find_xe_in_bucket(struct inode *inode, 3118 struct ocfs2_xattr_bucket *bucket, 3119 int name_index, 3120 const char *name, 3121 u32 name_hash, 3122 u16 *xe_index, 3123 int *found) 3124 { 3125 int i, ret = 0, cmp = 1, block_off, new_offset; 3126 struct ocfs2_xattr_header *xh = bucket_xh(bucket); 3127 size_t name_len = strlen(name); 3128 struct ocfs2_xattr_entry *xe = NULL; 3129 char *xe_name; 3130 3131 /* 3132 * We don't use binary search in the bucket because there 3133 * may be multiple entries with the same name hash. 3134 */ 3135 for (i = 0; i < le16_to_cpu(xh->xh_count); i++) { 3136 xe = &xh->xh_entries[i]; 3137 3138 if (name_hash > le32_to_cpu(xe->xe_name_hash)) 3139 continue; 3140 else if (name_hash < le32_to_cpu(xe->xe_name_hash)) 3141 break; 3142 3143 cmp = name_index - ocfs2_xattr_get_type(xe); 3144 if (!cmp) 3145 cmp = name_len - xe->xe_name_len; 3146 if (cmp) 3147 continue; 3148 3149 ret = ocfs2_xattr_bucket_get_name_value(inode->i_sb, 3150 xh, 3151 i, 3152 &block_off, 3153 &new_offset); 3154 if (ret) { 3155 mlog_errno(ret); 3156 break; 3157 } 3158 3159 3160 xe_name = bucket_block(bucket, block_off) + new_offset; 3161 if (!memcmp(name, xe_name, name_len)) { 3162 *xe_index = i; 3163 *found = 1; 3164 ret = 0; 3165 break; 3166 } 3167 } 3168 3169 return ret; 3170 } 3171 3172 /* 3173 * Find the specified xattr entry in a series of buckets. 3174 * This series start from p_blkno and last for num_clusters. 3175 * The ocfs2_xattr_header.xh_num_buckets of the first bucket contains 3176 * the num of the valid buckets. 3177 * 3178 * Return the buffer_head this xattr should reside in. And if the xattr's 3179 * hash is in the gap of 2 buckets, return the lower bucket. 3180 */ 3181 static int ocfs2_xattr_bucket_find(struct inode *inode, 3182 int name_index, 3183 const char *name, 3184 u32 name_hash, 3185 u64 p_blkno, 3186 u32 first_hash, 3187 u32 num_clusters, 3188 struct ocfs2_xattr_search *xs) 3189 { 3190 int ret, found = 0; 3191 struct ocfs2_xattr_header *xh = NULL; 3192 struct ocfs2_xattr_entry *xe = NULL; 3193 u16 index = 0; 3194 u16 blk_per_bucket = ocfs2_blocks_per_xattr_bucket(inode->i_sb); 3195 int low_bucket = 0, bucket, high_bucket; 3196 struct ocfs2_xattr_bucket *search; 3197 u32 last_hash; 3198 u64 blkno, lower_blkno = 0; 3199 3200 search = ocfs2_xattr_bucket_new(inode); 3201 if (!search) { 3202 ret = -ENOMEM; 3203 mlog_errno(ret); 3204 goto out; 3205 } 3206 3207 ret = ocfs2_read_xattr_bucket(search, p_blkno); 3208 if (ret) { 3209 mlog_errno(ret); 3210 goto out; 3211 } 3212 3213 xh = bucket_xh(search); 3214 high_bucket = le16_to_cpu(xh->xh_num_buckets) - 1; 3215 while (low_bucket <= high_bucket) { 3216 ocfs2_xattr_bucket_relse(search); 3217 3218 bucket = (low_bucket + high_bucket) / 2; 3219 blkno = p_blkno + bucket * blk_per_bucket; 3220 ret = ocfs2_read_xattr_bucket(search, blkno); 3221 if (ret) { 3222 mlog_errno(ret); 3223 goto out; 3224 } 3225 3226 xh = bucket_xh(search); 3227 xe = &xh->xh_entries[0]; 3228 if (name_hash < le32_to_cpu(xe->xe_name_hash)) { 3229 high_bucket = bucket - 1; 3230 continue; 3231 } 3232 3233 /* 3234 * Check whether the hash of the last entry in our 3235 * bucket is larger than the search one. for an empty 3236 * bucket, the last one is also the first one. 3237 */ 3238 if (xh->xh_count) 3239 xe = &xh->xh_entries[le16_to_cpu(xh->xh_count) - 1]; 3240 3241 last_hash = le32_to_cpu(xe->xe_name_hash); 3242 3243 /* record lower_blkno which may be the insert place. */ 3244 lower_blkno = blkno; 3245 3246 if (name_hash > le32_to_cpu(xe->xe_name_hash)) { 3247 low_bucket = bucket + 1; 3248 continue; 3249 } 3250 3251 /* the searched xattr should reside in this bucket if exists. */ 3252 ret = ocfs2_find_xe_in_bucket(inode, search, 3253 name_index, name, name_hash, 3254 &index, &found); 3255 if (ret) { 3256 mlog_errno(ret); 3257 goto out; 3258 } 3259 break; 3260 } 3261 3262 /* 3263 * Record the bucket we have found. 3264 * When the xattr's hash value is in the gap of 2 buckets, we will 3265 * always set it to the previous bucket. 3266 */ 3267 if (!lower_blkno) 3268 lower_blkno = p_blkno; 3269 3270 /* This should be in cache - we just read it during the search */ 3271 ret = ocfs2_read_xattr_bucket(xs->bucket, lower_blkno); 3272 if (ret) { 3273 mlog_errno(ret); 3274 goto out; 3275 } 3276 3277 xs->header = bucket_xh(xs->bucket); 3278 xs->base = bucket_block(xs->bucket, 0); 3279 xs->end = xs->base + inode->i_sb->s_blocksize; 3280 3281 if (found) { 3282 xs->here = &xs->header->xh_entries[index]; 3283 mlog(0, "find xattr %s in bucket %llu, entry = %u\n", name, 3284 (unsigned long long)bucket_blkno(xs->bucket), index); 3285 } else 3286 ret = -ENODATA; 3287 3288 out: 3289 ocfs2_xattr_bucket_free(search); 3290 return ret; 3291 } 3292 3293 static int ocfs2_xattr_index_block_find(struct inode *inode, 3294 struct buffer_head *root_bh, 3295 int name_index, 3296 const char *name, 3297 struct ocfs2_xattr_search *xs) 3298 { 3299 int ret; 3300 struct ocfs2_xattr_block *xb = 3301 (struct ocfs2_xattr_block *)root_bh->b_data; 3302 struct ocfs2_xattr_tree_root *xb_root = &xb->xb_attrs.xb_root; 3303 struct ocfs2_extent_list *el = &xb_root->xt_list; 3304 u64 p_blkno = 0; 3305 u32 first_hash, num_clusters = 0; 3306 u32 name_hash = ocfs2_xattr_name_hash(inode, name, strlen(name)); 3307 3308 if (le16_to_cpu(el->l_next_free_rec) == 0) 3309 return -ENODATA; 3310 3311 mlog(0, "find xattr %s, hash = %u, index = %d in xattr tree\n", 3312 name, name_hash, name_index); 3313 3314 ret = ocfs2_xattr_get_rec(inode, name_hash, &p_blkno, &first_hash, 3315 &num_clusters, el); 3316 if (ret) { 3317 mlog_errno(ret); 3318 goto out; 3319 } 3320 3321 BUG_ON(p_blkno == 0 || num_clusters == 0 || first_hash > name_hash); 3322 3323 mlog(0, "find xattr extent rec %u clusters from %llu, the first hash " 3324 "in the rec is %u\n", num_clusters, (unsigned long long)p_blkno, 3325 first_hash); 3326 3327 ret = ocfs2_xattr_bucket_find(inode, name_index, name, name_hash, 3328 p_blkno, first_hash, num_clusters, xs); 3329 3330 out: 3331 return ret; 3332 } 3333 3334 static int ocfs2_iterate_xattr_buckets(struct inode *inode, 3335 u64 blkno, 3336 u32 clusters, 3337 xattr_bucket_func *func, 3338 void *para) 3339 { 3340 int i, ret = 0; 3341 u32 bpc = ocfs2_xattr_buckets_per_cluster(OCFS2_SB(inode->i_sb)); 3342 u32 num_buckets = clusters * bpc; 3343 struct ocfs2_xattr_bucket *bucket; 3344 3345 bucket = ocfs2_xattr_bucket_new(inode); 3346 if (!bucket) { 3347 mlog_errno(-ENOMEM); 3348 return -ENOMEM; 3349 } 3350 3351 mlog(0, "iterating xattr buckets in %u clusters starting from %llu\n", 3352 clusters, (unsigned long long)blkno); 3353 3354 for (i = 0; i < num_buckets; i++, blkno += bucket->bu_blocks) { 3355 ret = ocfs2_read_xattr_bucket(bucket, blkno); 3356 if (ret) { 3357 mlog_errno(ret); 3358 break; 3359 } 3360 3361 /* 3362 * The real bucket num in this series of blocks is stored 3363 * in the 1st bucket. 3364 */ 3365 if (i == 0) 3366 num_buckets = le16_to_cpu(bucket_xh(bucket)->xh_num_buckets); 3367 3368 mlog(0, "iterating xattr bucket %llu, first hash %u\n", 3369 (unsigned long long)blkno, 3370 le32_to_cpu(bucket_xh(bucket)->xh_entries[0].xe_name_hash)); 3371 if (func) { 3372 ret = func(inode, bucket, para); 3373 if (ret && ret != -ERANGE) 3374 mlog_errno(ret); 3375 /* Fall through to bucket_relse() */ 3376 } 3377 3378 ocfs2_xattr_bucket_relse(bucket); 3379 if (ret) 3380 break; 3381 } 3382 3383 ocfs2_xattr_bucket_free(bucket); 3384 return ret; 3385 } 3386 3387 struct ocfs2_xattr_tree_list { 3388 char *buffer; 3389 size_t buffer_size; 3390 size_t result; 3391 }; 3392 3393 static int ocfs2_xattr_bucket_get_name_value(struct super_block *sb, 3394 struct ocfs2_xattr_header *xh, 3395 int index, 3396 int *block_off, 3397 int *new_offset) 3398 { 3399 u16 name_offset; 3400 3401 if (index < 0 || index >= le16_to_cpu(xh->xh_count)) 3402 return -EINVAL; 3403 3404 name_offset = le16_to_cpu(xh->xh_entries[index].xe_name_offset); 3405 3406 *block_off = name_offset >> sb->s_blocksize_bits; 3407 *new_offset = name_offset % sb->s_blocksize; 3408 3409 return 0; 3410 } 3411 3412 static int ocfs2_list_xattr_bucket(struct inode *inode, 3413 struct ocfs2_xattr_bucket *bucket, 3414 void *para) 3415 { 3416 int ret = 0, type; 3417 struct ocfs2_xattr_tree_list *xl = (struct ocfs2_xattr_tree_list *)para; 3418 int i, block_off, new_offset; 3419 const char *prefix, *name; 3420 3421 for (i = 0 ; i < le16_to_cpu(bucket_xh(bucket)->xh_count); i++) { 3422 struct ocfs2_xattr_entry *entry = &bucket_xh(bucket)->xh_entries[i]; 3423 type = ocfs2_xattr_get_type(entry); 3424 prefix = ocfs2_xattr_prefix(type); 3425 3426 if (prefix) { 3427 ret = ocfs2_xattr_bucket_get_name_value(inode->i_sb, 3428 bucket_xh(bucket), 3429 i, 3430 &block_off, 3431 &new_offset); 3432 if (ret) 3433 break; 3434 3435 name = (const char *)bucket_block(bucket, block_off) + 3436 new_offset; 3437 ret = ocfs2_xattr_list_entry(xl->buffer, 3438 xl->buffer_size, 3439 &xl->result, 3440 prefix, name, 3441 entry->xe_name_len); 3442 if (ret) 3443 break; 3444 } 3445 } 3446 3447 return ret; 3448 } 3449 3450 static int ocfs2_iterate_xattr_index_block(struct inode *inode, 3451 struct buffer_head *blk_bh, 3452 xattr_tree_rec_func *rec_func, 3453 void *para) 3454 { 3455 struct ocfs2_xattr_block *xb = 3456 (struct ocfs2_xattr_block *)blk_bh->b_data; 3457 struct ocfs2_extent_list *el = &xb->xb_attrs.xb_root.xt_list; 3458 int ret = 0; 3459 u32 name_hash = UINT_MAX, e_cpos = 0, num_clusters = 0; 3460 u64 p_blkno = 0; 3461 3462 if (!el->l_next_free_rec || !rec_func) 3463 return 0; 3464 3465 while (name_hash > 0) { 3466 ret = ocfs2_xattr_get_rec(inode, name_hash, &p_blkno, 3467 &e_cpos, &num_clusters, el); 3468 if (ret) { 3469 mlog_errno(ret); 3470 break; 3471 } 3472 3473 ret = rec_func(inode, blk_bh, p_blkno, e_cpos, 3474 num_clusters, para); 3475 if (ret) { 3476 if (ret != -ERANGE) 3477 mlog_errno(ret); 3478 break; 3479 } 3480 3481 if (e_cpos == 0) 3482 break; 3483 3484 name_hash = e_cpos - 1; 3485 } 3486 3487 return ret; 3488 3489 } 3490 3491 static int ocfs2_list_xattr_tree_rec(struct inode *inode, 3492 struct buffer_head *root_bh, 3493 u64 blkno, u32 cpos, u32 len, void *para) 3494 { 3495 return ocfs2_iterate_xattr_buckets(inode, blkno, len, 3496 ocfs2_list_xattr_bucket, para); 3497 } 3498 3499 static int ocfs2_xattr_tree_list_index_block(struct inode *inode, 3500 struct buffer_head *blk_bh, 3501 char *buffer, 3502 size_t buffer_size) 3503 { 3504 int ret; 3505 struct ocfs2_xattr_tree_list xl = { 3506 .buffer = buffer, 3507 .buffer_size = buffer_size, 3508 .result = 0, 3509 }; 3510 3511 ret = ocfs2_iterate_xattr_index_block(inode, blk_bh, 3512 ocfs2_list_xattr_tree_rec, &xl); 3513 if (ret) { 3514 mlog_errno(ret); 3515 goto out; 3516 } 3517 3518 ret = xl.result; 3519 out: 3520 return ret; 3521 } 3522 3523 static int cmp_xe(const void *a, const void *b) 3524 { 3525 const struct ocfs2_xattr_entry *l = a, *r = b; 3526 u32 l_hash = le32_to_cpu(l->xe_name_hash); 3527 u32 r_hash = le32_to_cpu(r->xe_name_hash); 3528 3529 if (l_hash > r_hash) 3530 return 1; 3531 if (l_hash < r_hash) 3532 return -1; 3533 return 0; 3534 } 3535 3536 static void swap_xe(void *a, void *b, int size) 3537 { 3538 struct ocfs2_xattr_entry *l = a, *r = b, tmp; 3539 3540 tmp = *l; 3541 memcpy(l, r, sizeof(struct ocfs2_xattr_entry)); 3542 memcpy(r, &tmp, sizeof(struct ocfs2_xattr_entry)); 3543 } 3544 3545 /* 3546 * When the ocfs2_xattr_block is filled up, new bucket will be created 3547 * and all the xattr entries will be moved to the new bucket. 3548 * The header goes at the start of the bucket, and the names+values are 3549 * filled from the end. This is why *target starts as the last buffer. 3550 * Note: we need to sort the entries since they are not saved in order 3551 * in the ocfs2_xattr_block. 3552 */ 3553 static void ocfs2_cp_xattr_block_to_bucket(struct inode *inode, 3554 struct buffer_head *xb_bh, 3555 struct ocfs2_xattr_bucket *bucket) 3556 { 3557 int i, blocksize = inode->i_sb->s_blocksize; 3558 int blks = ocfs2_blocks_per_xattr_bucket(inode->i_sb); 3559 u16 offset, size, off_change; 3560 struct ocfs2_xattr_entry *xe; 3561 struct ocfs2_xattr_block *xb = 3562 (struct ocfs2_xattr_block *)xb_bh->b_data; 3563 struct ocfs2_xattr_header *xb_xh = &xb->xb_attrs.xb_header; 3564 struct ocfs2_xattr_header *xh = bucket_xh(bucket); 3565 u16 count = le16_to_cpu(xb_xh->xh_count); 3566 char *src = xb_bh->b_data; 3567 char *target = bucket_block(bucket, blks - 1); 3568 3569 mlog(0, "cp xattr from block %llu to bucket %llu\n", 3570 (unsigned long long)xb_bh->b_blocknr, 3571 (unsigned long long)bucket_blkno(bucket)); 3572 3573 for (i = 0; i < blks; i++) 3574 memset(bucket_block(bucket, i), 0, blocksize); 3575 3576 /* 3577 * Since the xe_name_offset is based on ocfs2_xattr_header, 3578 * there is a offset change corresponding to the change of 3579 * ocfs2_xattr_header's position. 3580 */ 3581 off_change = offsetof(struct ocfs2_xattr_block, xb_attrs.xb_header); 3582 xe = &xb_xh->xh_entries[count - 1]; 3583 offset = le16_to_cpu(xe->xe_name_offset) + off_change; 3584 size = blocksize - offset; 3585 3586 /* copy all the names and values. */ 3587 memcpy(target + offset, src + offset, size); 3588 3589 /* Init new header now. */ 3590 xh->xh_count = xb_xh->xh_count; 3591 xh->xh_num_buckets = cpu_to_le16(1); 3592 xh->xh_name_value_len = cpu_to_le16(size); 3593 xh->xh_free_start = cpu_to_le16(OCFS2_XATTR_BUCKET_SIZE - size); 3594 3595 /* copy all the entries. */ 3596 target = bucket_block(bucket, 0); 3597 offset = offsetof(struct ocfs2_xattr_header, xh_entries); 3598 size = count * sizeof(struct ocfs2_xattr_entry); 3599 memcpy(target + offset, (char *)xb_xh + offset, size); 3600 3601 /* Change the xe offset for all the xe because of the move. */ 3602 off_change = OCFS2_XATTR_BUCKET_SIZE - blocksize + 3603 offsetof(struct ocfs2_xattr_block, xb_attrs.xb_header); 3604 for (i = 0; i < count; i++) 3605 le16_add_cpu(&xh->xh_entries[i].xe_name_offset, off_change); 3606 3607 mlog(0, "copy entry: start = %u, size = %u, offset_change = %u\n", 3608 offset, size, off_change); 3609 3610 sort(target + offset, count, sizeof(struct ocfs2_xattr_entry), 3611 cmp_xe, swap_xe); 3612 } 3613 3614 /* 3615 * After we move xattr from block to index btree, we have to 3616 * update ocfs2_xattr_search to the new xe and base. 3617 * 3618 * When the entry is in xattr block, xattr_bh indicates the storage place. 3619 * While if the entry is in index b-tree, "bucket" indicates the 3620 * real place of the xattr. 3621 */ 3622 static void ocfs2_xattr_update_xattr_search(struct inode *inode, 3623 struct ocfs2_xattr_search *xs, 3624 struct buffer_head *old_bh) 3625 { 3626 char *buf = old_bh->b_data; 3627 struct ocfs2_xattr_block *old_xb = (struct ocfs2_xattr_block *)buf; 3628 struct ocfs2_xattr_header *old_xh = &old_xb->xb_attrs.xb_header; 3629 int i; 3630 3631 xs->header = bucket_xh(xs->bucket); 3632 xs->base = bucket_block(xs->bucket, 0); 3633 xs->end = xs->base + inode->i_sb->s_blocksize; 3634 3635 if (xs->not_found) 3636 return; 3637 3638 i = xs->here - old_xh->xh_entries; 3639 xs->here = &xs->header->xh_entries[i]; 3640 } 3641 3642 static int ocfs2_xattr_create_index_block(struct inode *inode, 3643 struct ocfs2_xattr_search *xs, 3644 struct ocfs2_xattr_set_ctxt *ctxt) 3645 { 3646 int ret; 3647 u32 bit_off, len; 3648 u64 blkno; 3649 handle_t *handle = ctxt->handle; 3650 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 3651 struct ocfs2_inode_info *oi = OCFS2_I(inode); 3652 struct buffer_head *xb_bh = xs->xattr_bh; 3653 struct ocfs2_xattr_block *xb = 3654 (struct ocfs2_xattr_block *)xb_bh->b_data; 3655 struct ocfs2_xattr_tree_root *xr; 3656 u16 xb_flags = le16_to_cpu(xb->xb_flags); 3657 3658 mlog(0, "create xattr index block for %llu\n", 3659 (unsigned long long)xb_bh->b_blocknr); 3660 3661 BUG_ON(xb_flags & OCFS2_XATTR_INDEXED); 3662 BUG_ON(!xs->bucket); 3663 3664 /* 3665 * XXX: 3666 * We can use this lock for now, and maybe move to a dedicated mutex 3667 * if performance becomes a problem later. 3668 */ 3669 down_write(&oi->ip_alloc_sem); 3670 3671 ret = ocfs2_journal_access_xb(handle, INODE_CACHE(inode), xb_bh, 3672 OCFS2_JOURNAL_ACCESS_WRITE); 3673 if (ret) { 3674 mlog_errno(ret); 3675 goto out; 3676 } 3677 3678 ret = __ocfs2_claim_clusters(osb, handle, ctxt->data_ac, 3679 1, 1, &bit_off, &len); 3680 if (ret) { 3681 mlog_errno(ret); 3682 goto out; 3683 } 3684 3685 /* 3686 * The bucket may spread in many blocks, and 3687 * we will only touch the 1st block and the last block 3688 * in the whole bucket(one for entry and one for data). 3689 */ 3690 blkno = ocfs2_clusters_to_blocks(inode->i_sb, bit_off); 3691 3692 mlog(0, "allocate 1 cluster from %llu to xattr block\n", 3693 (unsigned long long)blkno); 3694 3695 ret = ocfs2_init_xattr_bucket(xs->bucket, blkno); 3696 if (ret) { 3697 mlog_errno(ret); 3698 goto out; 3699 } 3700 3701 ret = ocfs2_xattr_bucket_journal_access(handle, xs->bucket, 3702 OCFS2_JOURNAL_ACCESS_CREATE); 3703 if (ret) { 3704 mlog_errno(ret); 3705 goto out; 3706 } 3707 3708 ocfs2_cp_xattr_block_to_bucket(inode, xb_bh, xs->bucket); 3709 ocfs2_xattr_bucket_journal_dirty(handle, xs->bucket); 3710 3711 ocfs2_xattr_update_xattr_search(inode, xs, xb_bh); 3712 3713 /* Change from ocfs2_xattr_header to ocfs2_xattr_tree_root */ 3714 memset(&xb->xb_attrs, 0, inode->i_sb->s_blocksize - 3715 offsetof(struct ocfs2_xattr_block, xb_attrs)); 3716 3717 xr = &xb->xb_attrs.xb_root; 3718 xr->xt_clusters = cpu_to_le32(1); 3719 xr->xt_last_eb_blk = 0; 3720 xr->xt_list.l_tree_depth = 0; 3721 xr->xt_list.l_count = cpu_to_le16(ocfs2_xattr_recs_per_xb(inode->i_sb)); 3722 xr->xt_list.l_next_free_rec = cpu_to_le16(1); 3723 3724 xr->xt_list.l_recs[0].e_cpos = 0; 3725 xr->xt_list.l_recs[0].e_blkno = cpu_to_le64(blkno); 3726 xr->xt_list.l_recs[0].e_leaf_clusters = cpu_to_le16(1); 3727 3728 xb->xb_flags = cpu_to_le16(xb_flags | OCFS2_XATTR_INDEXED); 3729 3730 ocfs2_journal_dirty(handle, xb_bh); 3731 3732 out: 3733 up_write(&oi->ip_alloc_sem); 3734 3735 return ret; 3736 } 3737 3738 static int cmp_xe_offset(const void *a, const void *b) 3739 { 3740 const struct ocfs2_xattr_entry *l = a, *r = b; 3741 u32 l_name_offset = le16_to_cpu(l->xe_name_offset); 3742 u32 r_name_offset = le16_to_cpu(r->xe_name_offset); 3743 3744 if (l_name_offset < r_name_offset) 3745 return 1; 3746 if (l_name_offset > r_name_offset) 3747 return -1; 3748 return 0; 3749 } 3750 3751 /* 3752 * defrag a xattr bucket if we find that the bucket has some 3753 * holes beteen name/value pairs. 3754 * We will move all the name/value pairs to the end of the bucket 3755 * so that we can spare some space for insertion. 3756 */ 3757 static int ocfs2_defrag_xattr_bucket(struct inode *inode, 3758 handle_t *handle, 3759 struct ocfs2_xattr_bucket *bucket) 3760 { 3761 int ret, i; 3762 size_t end, offset, len, value_len; 3763 struct ocfs2_xattr_header *xh; 3764 char *entries, *buf, *bucket_buf = NULL; 3765 u64 blkno = bucket_blkno(bucket); 3766 u16 xh_free_start; 3767 size_t blocksize = inode->i_sb->s_blocksize; 3768 struct ocfs2_xattr_entry *xe; 3769 3770 /* 3771 * In order to make the operation more efficient and generic, 3772 * we copy all the blocks into a contiguous memory and do the 3773 * defragment there, so if anything is error, we will not touch 3774 * the real block. 3775 */ 3776 bucket_buf = kmalloc(OCFS2_XATTR_BUCKET_SIZE, GFP_NOFS); 3777 if (!bucket_buf) { 3778 ret = -EIO; 3779 goto out; 3780 } 3781 3782 buf = bucket_buf; 3783 for (i = 0; i < bucket->bu_blocks; i++, buf += blocksize) 3784 memcpy(buf, bucket_block(bucket, i), blocksize); 3785 3786 ret = ocfs2_xattr_bucket_journal_access(handle, bucket, 3787 OCFS2_JOURNAL_ACCESS_WRITE); 3788 if (ret < 0) { 3789 mlog_errno(ret); 3790 goto out; 3791 } 3792 3793 xh = (struct ocfs2_xattr_header *)bucket_buf; 3794 entries = (char *)xh->xh_entries; 3795 xh_free_start = le16_to_cpu(xh->xh_free_start); 3796 3797 mlog(0, "adjust xattr bucket in %llu, count = %u, " 3798 "xh_free_start = %u, xh_name_value_len = %u.\n", 3799 (unsigned long long)blkno, le16_to_cpu(xh->xh_count), 3800 xh_free_start, le16_to_cpu(xh->xh_name_value_len)); 3801 3802 /* 3803 * sort all the entries by their offset. 3804 * the largest will be the first, so that we can 3805 * move them to the end one by one. 3806 */ 3807 sort(entries, le16_to_cpu(xh->xh_count), 3808 sizeof(struct ocfs2_xattr_entry), 3809 cmp_xe_offset, swap_xe); 3810 3811 /* Move all name/values to the end of the bucket. */ 3812 xe = xh->xh_entries; 3813 end = OCFS2_XATTR_BUCKET_SIZE; 3814 for (i = 0; i < le16_to_cpu(xh->xh_count); i++, xe++) { 3815 offset = le16_to_cpu(xe->xe_name_offset); 3816 if (ocfs2_xattr_is_local(xe)) 3817 value_len = OCFS2_XATTR_SIZE( 3818 le64_to_cpu(xe->xe_value_size)); 3819 else 3820 value_len = OCFS2_XATTR_ROOT_SIZE; 3821 len = OCFS2_XATTR_SIZE(xe->xe_name_len) + value_len; 3822 3823 /* 3824 * We must make sure that the name/value pair 3825 * exist in the same block. So adjust end to 3826 * the previous block end if needed. 3827 */ 3828 if (((end - len) / blocksize != 3829 (end - 1) / blocksize)) 3830 end = end - end % blocksize; 3831 3832 if (end > offset + len) { 3833 memmove(bucket_buf + end - len, 3834 bucket_buf + offset, len); 3835 xe->xe_name_offset = cpu_to_le16(end - len); 3836 } 3837 3838 mlog_bug_on_msg(end < offset + len, "Defrag check failed for " 3839 "bucket %llu\n", (unsigned long long)blkno); 3840 3841 end -= len; 3842 } 3843 3844 mlog_bug_on_msg(xh_free_start > end, "Defrag check failed for " 3845 "bucket %llu\n", (unsigned long long)blkno); 3846 3847 if (xh_free_start == end) 3848 goto out; 3849 3850 memset(bucket_buf + xh_free_start, 0, end - xh_free_start); 3851 xh->xh_free_start = cpu_to_le16(end); 3852 3853 /* sort the entries by their name_hash. */ 3854 sort(entries, le16_to_cpu(xh->xh_count), 3855 sizeof(struct ocfs2_xattr_entry), 3856 cmp_xe, swap_xe); 3857 3858 buf = bucket_buf; 3859 for (i = 0; i < bucket->bu_blocks; i++, buf += blocksize) 3860 memcpy(bucket_block(bucket, i), buf, blocksize); 3861 ocfs2_xattr_bucket_journal_dirty(handle, bucket); 3862 3863 out: 3864 kfree(bucket_buf); 3865 return ret; 3866 } 3867 3868 /* 3869 * prev_blkno points to the start of an existing extent. new_blkno 3870 * points to a newly allocated extent. Because we know each of our 3871 * clusters contains more than bucket, we can easily split one cluster 3872 * at a bucket boundary. So we take the last cluster of the existing 3873 * extent and split it down the middle. We move the last half of the 3874 * buckets in the last cluster of the existing extent over to the new 3875 * extent. 3876 * 3877 * first_bh is the buffer at prev_blkno so we can update the existing 3878 * extent's bucket count. header_bh is the bucket were we were hoping 3879 * to insert our xattr. If the bucket move places the target in the new 3880 * extent, we'll update first_bh and header_bh after modifying the old 3881 * extent. 3882 * 3883 * first_hash will be set as the 1st xe's name_hash in the new extent. 3884 */ 3885 static int ocfs2_mv_xattr_bucket_cross_cluster(struct inode *inode, 3886 handle_t *handle, 3887 struct ocfs2_xattr_bucket *first, 3888 struct ocfs2_xattr_bucket *target, 3889 u64 new_blkno, 3890 u32 num_clusters, 3891 u32 *first_hash) 3892 { 3893 int ret; 3894 struct super_block *sb = inode->i_sb; 3895 int blks_per_bucket = ocfs2_blocks_per_xattr_bucket(sb); 3896 int num_buckets = ocfs2_xattr_buckets_per_cluster(OCFS2_SB(sb)); 3897 int to_move = num_buckets / 2; 3898 u64 src_blkno; 3899 u64 last_cluster_blkno = bucket_blkno(first) + 3900 ((num_clusters - 1) * ocfs2_clusters_to_blocks(sb, 1)); 3901 3902 BUG_ON(le16_to_cpu(bucket_xh(first)->xh_num_buckets) < num_buckets); 3903 BUG_ON(OCFS2_XATTR_BUCKET_SIZE == OCFS2_SB(sb)->s_clustersize); 3904 3905 mlog(0, "move half of xattrs in cluster %llu to %llu\n", 3906 (unsigned long long)last_cluster_blkno, (unsigned long long)new_blkno); 3907 3908 ret = ocfs2_mv_xattr_buckets(inode, handle, bucket_blkno(first), 3909 last_cluster_blkno, new_blkno, 3910 to_move, first_hash); 3911 if (ret) { 3912 mlog_errno(ret); 3913 goto out; 3914 } 3915 3916 /* This is the first bucket that got moved */ 3917 src_blkno = last_cluster_blkno + (to_move * blks_per_bucket); 3918 3919 /* 3920 * If the target bucket was part of the moved buckets, we need to 3921 * update first and target. 3922 */ 3923 if (bucket_blkno(target) >= src_blkno) { 3924 /* Find the block for the new target bucket */ 3925 src_blkno = new_blkno + 3926 (bucket_blkno(target) - src_blkno); 3927 3928 ocfs2_xattr_bucket_relse(first); 3929 ocfs2_xattr_bucket_relse(target); 3930 3931 /* 3932 * These shouldn't fail - the buffers are in the 3933 * journal from ocfs2_cp_xattr_bucket(). 3934 */ 3935 ret = ocfs2_read_xattr_bucket(first, new_blkno); 3936 if (ret) { 3937 mlog_errno(ret); 3938 goto out; 3939 } 3940 ret = ocfs2_read_xattr_bucket(target, src_blkno); 3941 if (ret) 3942 mlog_errno(ret); 3943 3944 } 3945 3946 out: 3947 return ret; 3948 } 3949 3950 /* 3951 * Find the suitable pos when we divide a bucket into 2. 3952 * We have to make sure the xattrs with the same hash value exist 3953 * in the same bucket. 3954 * 3955 * If this ocfs2_xattr_header covers more than one hash value, find a 3956 * place where the hash value changes. Try to find the most even split. 3957 * The most common case is that all entries have different hash values, 3958 * and the first check we make will find a place to split. 3959 */ 3960 static int ocfs2_xattr_find_divide_pos(struct ocfs2_xattr_header *xh) 3961 { 3962 struct ocfs2_xattr_entry *entries = xh->xh_entries; 3963 int count = le16_to_cpu(xh->xh_count); 3964 int delta, middle = count / 2; 3965 3966 /* 3967 * We start at the middle. Each step gets farther away in both 3968 * directions. We therefore hit the change in hash value 3969 * nearest to the middle. Note that this loop does not execute for 3970 * count < 2. 3971 */ 3972 for (delta = 0; delta < middle; delta++) { 3973 /* Let's check delta earlier than middle */ 3974 if (cmp_xe(&entries[middle - delta - 1], 3975 &entries[middle - delta])) 3976 return middle - delta; 3977 3978 /* For even counts, don't walk off the end */ 3979 if ((middle + delta + 1) == count) 3980 continue; 3981 3982 /* Now try delta past middle */ 3983 if (cmp_xe(&entries[middle + delta], 3984 &entries[middle + delta + 1])) 3985 return middle + delta + 1; 3986 } 3987 3988 /* Every entry had the same hash */ 3989 return count; 3990 } 3991 3992 /* 3993 * Move some xattrs in old bucket(blk) to new bucket(new_blk). 3994 * first_hash will record the 1st hash of the new bucket. 3995 * 3996 * Normally half of the xattrs will be moved. But we have to make 3997 * sure that the xattrs with the same hash value are stored in the 3998 * same bucket. If all the xattrs in this bucket have the same hash 3999 * value, the new bucket will be initialized as an empty one and the 4000 * first_hash will be initialized as (hash_value+1). 4001 */ 4002 static int ocfs2_divide_xattr_bucket(struct inode *inode, 4003 handle_t *handle, 4004 u64 blk, 4005 u64 new_blk, 4006 u32 *first_hash, 4007 int new_bucket_head) 4008 { 4009 int ret, i; 4010 int count, start, len, name_value_len = 0, xe_len, name_offset = 0; 4011 struct ocfs2_xattr_bucket *s_bucket = NULL, *t_bucket = NULL; 4012 struct ocfs2_xattr_header *xh; 4013 struct ocfs2_xattr_entry *xe; 4014 int blocksize = inode->i_sb->s_blocksize; 4015 4016 mlog(0, "move some of xattrs from bucket %llu to %llu\n", 4017 (unsigned long long)blk, (unsigned long long)new_blk); 4018 4019 s_bucket = ocfs2_xattr_bucket_new(inode); 4020 t_bucket = ocfs2_xattr_bucket_new(inode); 4021 if (!s_bucket || !t_bucket) { 4022 ret = -ENOMEM; 4023 mlog_errno(ret); 4024 goto out; 4025 } 4026 4027 ret = ocfs2_read_xattr_bucket(s_bucket, blk); 4028 if (ret) { 4029 mlog_errno(ret); 4030 goto out; 4031 } 4032 4033 ret = ocfs2_xattr_bucket_journal_access(handle, s_bucket, 4034 OCFS2_JOURNAL_ACCESS_WRITE); 4035 if (ret) { 4036 mlog_errno(ret); 4037 goto out; 4038 } 4039 4040 /* 4041 * Even if !new_bucket_head, we're overwriting t_bucket. Thus, 4042 * there's no need to read it. 4043 */ 4044 ret = ocfs2_init_xattr_bucket(t_bucket, new_blk); 4045 if (ret) { 4046 mlog_errno(ret); 4047 goto out; 4048 } 4049 4050 /* 4051 * Hey, if we're overwriting t_bucket, what difference does 4052 * ACCESS_CREATE vs ACCESS_WRITE make? See the comment in the 4053 * same part of ocfs2_cp_xattr_bucket(). 4054 */ 4055 ret = ocfs2_xattr_bucket_journal_access(handle, t_bucket, 4056 new_bucket_head ? 4057 OCFS2_JOURNAL_ACCESS_CREATE : 4058 OCFS2_JOURNAL_ACCESS_WRITE); 4059 if (ret) { 4060 mlog_errno(ret); 4061 goto out; 4062 } 4063 4064 xh = bucket_xh(s_bucket); 4065 count = le16_to_cpu(xh->xh_count); 4066 start = ocfs2_xattr_find_divide_pos(xh); 4067 4068 if (start == count) { 4069 xe = &xh->xh_entries[start-1]; 4070 4071 /* 4072 * initialized a new empty bucket here. 4073 * The hash value is set as one larger than 4074 * that of the last entry in the previous bucket. 4075 */ 4076 for (i = 0; i < t_bucket->bu_blocks; i++) 4077 memset(bucket_block(t_bucket, i), 0, blocksize); 4078 4079 xh = bucket_xh(t_bucket); 4080 xh->xh_free_start = cpu_to_le16(blocksize); 4081 xh->xh_entries[0].xe_name_hash = xe->xe_name_hash; 4082 le32_add_cpu(&xh->xh_entries[0].xe_name_hash, 1); 4083 4084 goto set_num_buckets; 4085 } 4086 4087 /* copy the whole bucket to the new first. */ 4088 ocfs2_xattr_bucket_copy_data(t_bucket, s_bucket); 4089 4090 /* update the new bucket. */ 4091 xh = bucket_xh(t_bucket); 4092 4093 /* 4094 * Calculate the total name/value len and xh_free_start for 4095 * the old bucket first. 4096 */ 4097 name_offset = OCFS2_XATTR_BUCKET_SIZE; 4098 name_value_len = 0; 4099 for (i = 0; i < start; i++) { 4100 xe = &xh->xh_entries[i]; 4101 xe_len = OCFS2_XATTR_SIZE(xe->xe_name_len); 4102 if (ocfs2_xattr_is_local(xe)) 4103 xe_len += 4104 OCFS2_XATTR_SIZE(le64_to_cpu(xe->xe_value_size)); 4105 else 4106 xe_len += OCFS2_XATTR_ROOT_SIZE; 4107 name_value_len += xe_len; 4108 if (le16_to_cpu(xe->xe_name_offset) < name_offset) 4109 name_offset = le16_to_cpu(xe->xe_name_offset); 4110 } 4111 4112 /* 4113 * Now begin the modification to the new bucket. 4114 * 4115 * In the new bucket, We just move the xattr entry to the beginning 4116 * and don't touch the name/value. So there will be some holes in the 4117 * bucket, and they will be removed when ocfs2_defrag_xattr_bucket is 4118 * called. 4119 */ 4120 xe = &xh->xh_entries[start]; 4121 len = sizeof(struct ocfs2_xattr_entry) * (count - start); 4122 mlog(0, "mv xattr entry len %d from %d to %d\n", len, 4123 (int)((char *)xe - (char *)xh), 4124 (int)((char *)xh->xh_entries - (char *)xh)); 4125 memmove((char *)xh->xh_entries, (char *)xe, len); 4126 xe = &xh->xh_entries[count - start]; 4127 len = sizeof(struct ocfs2_xattr_entry) * start; 4128 memset((char *)xe, 0, len); 4129 4130 le16_add_cpu(&xh->xh_count, -start); 4131 le16_add_cpu(&xh->xh_name_value_len, -name_value_len); 4132 4133 /* Calculate xh_free_start for the new bucket. */ 4134 xh->xh_free_start = cpu_to_le16(OCFS2_XATTR_BUCKET_SIZE); 4135 for (i = 0; i < le16_to_cpu(xh->xh_count); i++) { 4136 xe = &xh->xh_entries[i]; 4137 xe_len = OCFS2_XATTR_SIZE(xe->xe_name_len); 4138 if (ocfs2_xattr_is_local(xe)) 4139 xe_len += 4140 OCFS2_XATTR_SIZE(le64_to_cpu(xe->xe_value_size)); 4141 else 4142 xe_len += OCFS2_XATTR_ROOT_SIZE; 4143 if (le16_to_cpu(xe->xe_name_offset) < 4144 le16_to_cpu(xh->xh_free_start)) 4145 xh->xh_free_start = xe->xe_name_offset; 4146 } 4147 4148 set_num_buckets: 4149 /* set xh->xh_num_buckets for the new xh. */ 4150 if (new_bucket_head) 4151 xh->xh_num_buckets = cpu_to_le16(1); 4152 else 4153 xh->xh_num_buckets = 0; 4154 4155 ocfs2_xattr_bucket_journal_dirty(handle, t_bucket); 4156 4157 /* store the first_hash of the new bucket. */ 4158 if (first_hash) 4159 *first_hash = le32_to_cpu(xh->xh_entries[0].xe_name_hash); 4160 4161 /* 4162 * Now only update the 1st block of the old bucket. If we 4163 * just added a new empty bucket, there is no need to modify 4164 * it. 4165 */ 4166 if (start == count) 4167 goto out; 4168 4169 xh = bucket_xh(s_bucket); 4170 memset(&xh->xh_entries[start], 0, 4171 sizeof(struct ocfs2_xattr_entry) * (count - start)); 4172 xh->xh_count = cpu_to_le16(start); 4173 xh->xh_free_start = cpu_to_le16(name_offset); 4174 xh->xh_name_value_len = cpu_to_le16(name_value_len); 4175 4176 ocfs2_xattr_bucket_journal_dirty(handle, s_bucket); 4177 4178 out: 4179 ocfs2_xattr_bucket_free(s_bucket); 4180 ocfs2_xattr_bucket_free(t_bucket); 4181 4182 return ret; 4183 } 4184 4185 /* 4186 * Copy xattr from one bucket to another bucket. 4187 * 4188 * The caller must make sure that the journal transaction 4189 * has enough space for journaling. 4190 */ 4191 static int ocfs2_cp_xattr_bucket(struct inode *inode, 4192 handle_t *handle, 4193 u64 s_blkno, 4194 u64 t_blkno, 4195 int t_is_new) 4196 { 4197 int ret; 4198 struct ocfs2_xattr_bucket *s_bucket = NULL, *t_bucket = NULL; 4199 4200 BUG_ON(s_blkno == t_blkno); 4201 4202 mlog(0, "cp bucket %llu to %llu, target is %d\n", 4203 (unsigned long long)s_blkno, (unsigned long long)t_blkno, 4204 t_is_new); 4205 4206 s_bucket = ocfs2_xattr_bucket_new(inode); 4207 t_bucket = ocfs2_xattr_bucket_new(inode); 4208 if (!s_bucket || !t_bucket) { 4209 ret = -ENOMEM; 4210 mlog_errno(ret); 4211 goto out; 4212 } 4213 4214 ret = ocfs2_read_xattr_bucket(s_bucket, s_blkno); 4215 if (ret) 4216 goto out; 4217 4218 /* 4219 * Even if !t_is_new, we're overwriting t_bucket. Thus, 4220 * there's no need to read it. 4221 */ 4222 ret = ocfs2_init_xattr_bucket(t_bucket, t_blkno); 4223 if (ret) 4224 goto out; 4225 4226 /* 4227 * Hey, if we're overwriting t_bucket, what difference does 4228 * ACCESS_CREATE vs ACCESS_WRITE make? Well, if we allocated a new 4229 * cluster to fill, we came here from 4230 * ocfs2_mv_xattr_buckets(), and it is really new - 4231 * ACCESS_CREATE is required. But we also might have moved data 4232 * out of t_bucket before extending back into it. 4233 * ocfs2_add_new_xattr_bucket() can do this - its call to 4234 * ocfs2_add_new_xattr_cluster() may have created a new extent 4235 * and copied out the end of the old extent. Then it re-extends 4236 * the old extent back to create space for new xattrs. That's 4237 * how we get here, and the bucket isn't really new. 4238 */ 4239 ret = ocfs2_xattr_bucket_journal_access(handle, t_bucket, 4240 t_is_new ? 4241 OCFS2_JOURNAL_ACCESS_CREATE : 4242 OCFS2_JOURNAL_ACCESS_WRITE); 4243 if (ret) 4244 goto out; 4245 4246 ocfs2_xattr_bucket_copy_data(t_bucket, s_bucket); 4247 ocfs2_xattr_bucket_journal_dirty(handle, t_bucket); 4248 4249 out: 4250 ocfs2_xattr_bucket_free(t_bucket); 4251 ocfs2_xattr_bucket_free(s_bucket); 4252 4253 return ret; 4254 } 4255 4256 /* 4257 * src_blk points to the start of an existing extent. last_blk points to 4258 * last cluster in that extent. to_blk points to a newly allocated 4259 * extent. We copy the buckets from the cluster at last_blk to the new 4260 * extent. If start_bucket is non-zero, we skip that many buckets before 4261 * we start copying. The new extent's xh_num_buckets gets set to the 4262 * number of buckets we copied. The old extent's xh_num_buckets shrinks 4263 * by the same amount. 4264 */ 4265 static int ocfs2_mv_xattr_buckets(struct inode *inode, handle_t *handle, 4266 u64 src_blk, u64 last_blk, u64 to_blk, 4267 unsigned int start_bucket, 4268 u32 *first_hash) 4269 { 4270 int i, ret, credits; 4271 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 4272 int blks_per_bucket = ocfs2_blocks_per_xattr_bucket(inode->i_sb); 4273 int num_buckets = ocfs2_xattr_buckets_per_cluster(osb); 4274 struct ocfs2_xattr_bucket *old_first, *new_first; 4275 4276 mlog(0, "mv xattrs from cluster %llu to %llu\n", 4277 (unsigned long long)last_blk, (unsigned long long)to_blk); 4278 4279 BUG_ON(start_bucket >= num_buckets); 4280 if (start_bucket) { 4281 num_buckets -= start_bucket; 4282 last_blk += (start_bucket * blks_per_bucket); 4283 } 4284 4285 /* The first bucket of the original extent */ 4286 old_first = ocfs2_xattr_bucket_new(inode); 4287 /* The first bucket of the new extent */ 4288 new_first = ocfs2_xattr_bucket_new(inode); 4289 if (!old_first || !new_first) { 4290 ret = -ENOMEM; 4291 mlog_errno(ret); 4292 goto out; 4293 } 4294 4295 ret = ocfs2_read_xattr_bucket(old_first, src_blk); 4296 if (ret) { 4297 mlog_errno(ret); 4298 goto out; 4299 } 4300 4301 /* 4302 * We need to update the first bucket of the old extent and all 4303 * the buckets going to the new extent. 4304 */ 4305 credits = ((num_buckets + 1) * blks_per_bucket) + 4306 handle->h_buffer_credits; 4307 ret = ocfs2_extend_trans(handle, credits); 4308 if (ret) { 4309 mlog_errno(ret); 4310 goto out; 4311 } 4312 4313 ret = ocfs2_xattr_bucket_journal_access(handle, old_first, 4314 OCFS2_JOURNAL_ACCESS_WRITE); 4315 if (ret) { 4316 mlog_errno(ret); 4317 goto out; 4318 } 4319 4320 for (i = 0; i < num_buckets; i++) { 4321 ret = ocfs2_cp_xattr_bucket(inode, handle, 4322 last_blk + (i * blks_per_bucket), 4323 to_blk + (i * blks_per_bucket), 4324 1); 4325 if (ret) { 4326 mlog_errno(ret); 4327 goto out; 4328 } 4329 } 4330 4331 /* 4332 * Get the new bucket ready before we dirty anything 4333 * (This actually shouldn't fail, because we already dirtied 4334 * it once in ocfs2_cp_xattr_bucket()). 4335 */ 4336 ret = ocfs2_read_xattr_bucket(new_first, to_blk); 4337 if (ret) { 4338 mlog_errno(ret); 4339 goto out; 4340 } 4341 ret = ocfs2_xattr_bucket_journal_access(handle, new_first, 4342 OCFS2_JOURNAL_ACCESS_WRITE); 4343 if (ret) { 4344 mlog_errno(ret); 4345 goto out; 4346 } 4347 4348 /* Now update the headers */ 4349 le16_add_cpu(&bucket_xh(old_first)->xh_num_buckets, -num_buckets); 4350 ocfs2_xattr_bucket_journal_dirty(handle, old_first); 4351 4352 bucket_xh(new_first)->xh_num_buckets = cpu_to_le16(num_buckets); 4353 ocfs2_xattr_bucket_journal_dirty(handle, new_first); 4354 4355 if (first_hash) 4356 *first_hash = le32_to_cpu(bucket_xh(new_first)->xh_entries[0].xe_name_hash); 4357 4358 out: 4359 ocfs2_xattr_bucket_free(new_first); 4360 ocfs2_xattr_bucket_free(old_first); 4361 return ret; 4362 } 4363 4364 /* 4365 * Move some xattrs in this cluster to the new cluster. 4366 * This function should only be called when bucket size == cluster size. 4367 * Otherwise ocfs2_mv_xattr_bucket_cross_cluster should be used instead. 4368 */ 4369 static int ocfs2_divide_xattr_cluster(struct inode *inode, 4370 handle_t *handle, 4371 u64 prev_blk, 4372 u64 new_blk, 4373 u32 *first_hash) 4374 { 4375 u16 blk_per_bucket = ocfs2_blocks_per_xattr_bucket(inode->i_sb); 4376 int ret, credits = 2 * blk_per_bucket + handle->h_buffer_credits; 4377 4378 BUG_ON(OCFS2_XATTR_BUCKET_SIZE < OCFS2_SB(inode->i_sb)->s_clustersize); 4379 4380 ret = ocfs2_extend_trans(handle, credits); 4381 if (ret) { 4382 mlog_errno(ret); 4383 return ret; 4384 } 4385 4386 /* Move half of the xattr in start_blk to the next bucket. */ 4387 return ocfs2_divide_xattr_bucket(inode, handle, prev_blk, 4388 new_blk, first_hash, 1); 4389 } 4390 4391 /* 4392 * Move some xattrs from the old cluster to the new one since they are not 4393 * contiguous in ocfs2 xattr tree. 4394 * 4395 * new_blk starts a new separate cluster, and we will move some xattrs from 4396 * prev_blk to it. v_start will be set as the first name hash value in this 4397 * new cluster so that it can be used as e_cpos during tree insertion and 4398 * don't collide with our original b-tree operations. first_bh and header_bh 4399 * will also be updated since they will be used in ocfs2_extend_xattr_bucket 4400 * to extend the insert bucket. 4401 * 4402 * The problem is how much xattr should we move to the new one and when should 4403 * we update first_bh and header_bh? 4404 * 1. If cluster size > bucket size, that means the previous cluster has more 4405 * than 1 bucket, so just move half nums of bucket into the new cluster and 4406 * update the first_bh and header_bh if the insert bucket has been moved 4407 * to the new cluster. 4408 * 2. If cluster_size == bucket_size: 4409 * a) If the previous extent rec has more than one cluster and the insert 4410 * place isn't in the last cluster, copy the entire last cluster to the 4411 * new one. This time, we don't need to upate the first_bh and header_bh 4412 * since they will not be moved into the new cluster. 4413 * b) Otherwise, move the bottom half of the xattrs in the last cluster into 4414 * the new one. And we set the extend flag to zero if the insert place is 4415 * moved into the new allocated cluster since no extend is needed. 4416 */ 4417 static int ocfs2_adjust_xattr_cross_cluster(struct inode *inode, 4418 handle_t *handle, 4419 struct ocfs2_xattr_bucket *first, 4420 struct ocfs2_xattr_bucket *target, 4421 u64 new_blk, 4422 u32 prev_clusters, 4423 u32 *v_start, 4424 int *extend) 4425 { 4426 int ret; 4427 4428 mlog(0, "adjust xattrs from cluster %llu len %u to %llu\n", 4429 (unsigned long long)bucket_blkno(first), prev_clusters, 4430 (unsigned long long)new_blk); 4431 4432 if (ocfs2_xattr_buckets_per_cluster(OCFS2_SB(inode->i_sb)) > 1) { 4433 ret = ocfs2_mv_xattr_bucket_cross_cluster(inode, 4434 handle, 4435 first, target, 4436 new_blk, 4437 prev_clusters, 4438 v_start); 4439 if (ret) 4440 mlog_errno(ret); 4441 } else { 4442 /* The start of the last cluster in the first extent */ 4443 u64 last_blk = bucket_blkno(first) + 4444 ((prev_clusters - 1) * 4445 ocfs2_clusters_to_blocks(inode->i_sb, 1)); 4446 4447 if (prev_clusters > 1 && bucket_blkno(target) != last_blk) { 4448 ret = ocfs2_mv_xattr_buckets(inode, handle, 4449 bucket_blkno(first), 4450 last_blk, new_blk, 0, 4451 v_start); 4452 if (ret) 4453 mlog_errno(ret); 4454 } else { 4455 ret = ocfs2_divide_xattr_cluster(inode, handle, 4456 last_blk, new_blk, 4457 v_start); 4458 if (ret) 4459 mlog_errno(ret); 4460 4461 if ((bucket_blkno(target) == last_blk) && extend) 4462 *extend = 0; 4463 } 4464 } 4465 4466 return ret; 4467 } 4468 4469 /* 4470 * Add a new cluster for xattr storage. 4471 * 4472 * If the new cluster is contiguous with the previous one, it will be 4473 * appended to the same extent record, and num_clusters will be updated. 4474 * If not, we will insert a new extent for it and move some xattrs in 4475 * the last cluster into the new allocated one. 4476 * We also need to limit the maximum size of a btree leaf, otherwise we'll 4477 * lose the benefits of hashing because we'll have to search large leaves. 4478 * So now the maximum size is OCFS2_MAX_XATTR_TREE_LEAF_SIZE(or clustersize, 4479 * if it's bigger). 4480 * 4481 * first_bh is the first block of the previous extent rec and header_bh 4482 * indicates the bucket we will insert the new xattrs. They will be updated 4483 * when the header_bh is moved into the new cluster. 4484 */ 4485 static int ocfs2_add_new_xattr_cluster(struct inode *inode, 4486 struct buffer_head *root_bh, 4487 struct ocfs2_xattr_bucket *first, 4488 struct ocfs2_xattr_bucket *target, 4489 u32 *num_clusters, 4490 u32 prev_cpos, 4491 int *extend, 4492 struct ocfs2_xattr_set_ctxt *ctxt) 4493 { 4494 int ret; 4495 u16 bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1); 4496 u32 prev_clusters = *num_clusters; 4497 u32 clusters_to_add = 1, bit_off, num_bits, v_start = 0; 4498 u64 block; 4499 handle_t *handle = ctxt->handle; 4500 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 4501 struct ocfs2_extent_tree et; 4502 4503 mlog(0, "Add new xattr cluster for %llu, previous xattr hash = %u, " 4504 "previous xattr blkno = %llu\n", 4505 (unsigned long long)OCFS2_I(inode)->ip_blkno, 4506 prev_cpos, (unsigned long long)bucket_blkno(first)); 4507 4508 ocfs2_init_xattr_tree_extent_tree(&et, INODE_CACHE(inode), root_bh); 4509 4510 ret = ocfs2_journal_access_xb(handle, INODE_CACHE(inode), root_bh, 4511 OCFS2_JOURNAL_ACCESS_WRITE); 4512 if (ret < 0) { 4513 mlog_errno(ret); 4514 goto leave; 4515 } 4516 4517 ret = __ocfs2_claim_clusters(osb, handle, ctxt->data_ac, 1, 4518 clusters_to_add, &bit_off, &num_bits); 4519 if (ret < 0) { 4520 if (ret != -ENOSPC) 4521 mlog_errno(ret); 4522 goto leave; 4523 } 4524 4525 BUG_ON(num_bits > clusters_to_add); 4526 4527 block = ocfs2_clusters_to_blocks(osb->sb, bit_off); 4528 mlog(0, "Allocating %u clusters at block %u for xattr in inode %llu\n", 4529 num_bits, bit_off, (unsigned long long)OCFS2_I(inode)->ip_blkno); 4530 4531 if (bucket_blkno(first) + (prev_clusters * bpc) == block && 4532 (prev_clusters + num_bits) << osb->s_clustersize_bits <= 4533 OCFS2_MAX_XATTR_TREE_LEAF_SIZE) { 4534 /* 4535 * If this cluster is contiguous with the old one and 4536 * adding this new cluster, we don't surpass the limit of 4537 * OCFS2_MAX_XATTR_TREE_LEAF_SIZE, cool. We will let it be 4538 * initialized and used like other buckets in the previous 4539 * cluster. 4540 * So add it as a contiguous one. The caller will handle 4541 * its init process. 4542 */ 4543 v_start = prev_cpos + prev_clusters; 4544 *num_clusters = prev_clusters + num_bits; 4545 mlog(0, "Add contiguous %u clusters to previous extent rec.\n", 4546 num_bits); 4547 } else { 4548 ret = ocfs2_adjust_xattr_cross_cluster(inode, 4549 handle, 4550 first, 4551 target, 4552 block, 4553 prev_clusters, 4554 &v_start, 4555 extend); 4556 if (ret) { 4557 mlog_errno(ret); 4558 goto leave; 4559 } 4560 } 4561 4562 mlog(0, "Insert %u clusters at block %llu for xattr at %u\n", 4563 num_bits, (unsigned long long)block, v_start); 4564 ret = ocfs2_insert_extent(handle, &et, v_start, block, 4565 num_bits, 0, ctxt->meta_ac); 4566 if (ret < 0) { 4567 mlog_errno(ret); 4568 goto leave; 4569 } 4570 4571 ret = ocfs2_journal_dirty(handle, root_bh); 4572 if (ret < 0) 4573 mlog_errno(ret); 4574 4575 leave: 4576 return ret; 4577 } 4578 4579 /* 4580 * We are given an extent. 'first' is the bucket at the very front of 4581 * the extent. The extent has space for an additional bucket past 4582 * bucket_xh(first)->xh_num_buckets. 'target_blkno' is the block number 4583 * of the target bucket. We wish to shift every bucket past the target 4584 * down one, filling in that additional space. When we get back to the 4585 * target, we split the target between itself and the now-empty bucket 4586 * at target+1 (aka, target_blkno + blks_per_bucket). 4587 */ 4588 static int ocfs2_extend_xattr_bucket(struct inode *inode, 4589 handle_t *handle, 4590 struct ocfs2_xattr_bucket *first, 4591 u64 target_blk, 4592 u32 num_clusters) 4593 { 4594 int ret, credits; 4595 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 4596 u16 blk_per_bucket = ocfs2_blocks_per_xattr_bucket(inode->i_sb); 4597 u64 end_blk; 4598 u16 new_bucket = le16_to_cpu(bucket_xh(first)->xh_num_buckets); 4599 4600 mlog(0, "extend xattr bucket in %llu, xattr extend rec starting " 4601 "from %llu, len = %u\n", (unsigned long long)target_blk, 4602 (unsigned long long)bucket_blkno(first), num_clusters); 4603 4604 /* The extent must have room for an additional bucket */ 4605 BUG_ON(new_bucket >= 4606 (num_clusters * ocfs2_xattr_buckets_per_cluster(osb))); 4607 4608 /* end_blk points to the last existing bucket */ 4609 end_blk = bucket_blkno(first) + ((new_bucket - 1) * blk_per_bucket); 4610 4611 /* 4612 * end_blk is the start of the last existing bucket. 4613 * Thus, (end_blk - target_blk) covers the target bucket and 4614 * every bucket after it up to, but not including, the last 4615 * existing bucket. Then we add the last existing bucket, the 4616 * new bucket, and the first bucket (3 * blk_per_bucket). 4617 */ 4618 credits = (end_blk - target_blk) + (3 * blk_per_bucket) + 4619 handle->h_buffer_credits; 4620 ret = ocfs2_extend_trans(handle, credits); 4621 if (ret) { 4622 mlog_errno(ret); 4623 goto out; 4624 } 4625 4626 ret = ocfs2_xattr_bucket_journal_access(handle, first, 4627 OCFS2_JOURNAL_ACCESS_WRITE); 4628 if (ret) { 4629 mlog_errno(ret); 4630 goto out; 4631 } 4632 4633 while (end_blk != target_blk) { 4634 ret = ocfs2_cp_xattr_bucket(inode, handle, end_blk, 4635 end_blk + blk_per_bucket, 0); 4636 if (ret) 4637 goto out; 4638 end_blk -= blk_per_bucket; 4639 } 4640 4641 /* Move half of the xattr in target_blkno to the next bucket. */ 4642 ret = ocfs2_divide_xattr_bucket(inode, handle, target_blk, 4643 target_blk + blk_per_bucket, NULL, 0); 4644 4645 le16_add_cpu(&bucket_xh(first)->xh_num_buckets, 1); 4646 ocfs2_xattr_bucket_journal_dirty(handle, first); 4647 4648 out: 4649 return ret; 4650 } 4651 4652 /* 4653 * Add new xattr bucket in an extent record and adjust the buckets 4654 * accordingly. xb_bh is the ocfs2_xattr_block, and target is the 4655 * bucket we want to insert into. 4656 * 4657 * In the easy case, we will move all the buckets after target down by 4658 * one. Half of target's xattrs will be moved to the next bucket. 4659 * 4660 * If current cluster is full, we'll allocate a new one. This may not 4661 * be contiguous. The underlying calls will make sure that there is 4662 * space for the insert, shifting buckets around if necessary. 4663 * 'target' may be moved by those calls. 4664 */ 4665 static int ocfs2_add_new_xattr_bucket(struct inode *inode, 4666 struct buffer_head *xb_bh, 4667 struct ocfs2_xattr_bucket *target, 4668 struct ocfs2_xattr_set_ctxt *ctxt) 4669 { 4670 struct ocfs2_xattr_block *xb = 4671 (struct ocfs2_xattr_block *)xb_bh->b_data; 4672 struct ocfs2_xattr_tree_root *xb_root = &xb->xb_attrs.xb_root; 4673 struct ocfs2_extent_list *el = &xb_root->xt_list; 4674 u32 name_hash = 4675 le32_to_cpu(bucket_xh(target)->xh_entries[0].xe_name_hash); 4676 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 4677 int ret, num_buckets, extend = 1; 4678 u64 p_blkno; 4679 u32 e_cpos, num_clusters; 4680 /* The bucket at the front of the extent */ 4681 struct ocfs2_xattr_bucket *first; 4682 4683 mlog(0, "Add new xattr bucket starting from %llu\n", 4684 (unsigned long long)bucket_blkno(target)); 4685 4686 /* The first bucket of the original extent */ 4687 first = ocfs2_xattr_bucket_new(inode); 4688 if (!first) { 4689 ret = -ENOMEM; 4690 mlog_errno(ret); 4691 goto out; 4692 } 4693 4694 ret = ocfs2_xattr_get_rec(inode, name_hash, &p_blkno, &e_cpos, 4695 &num_clusters, el); 4696 if (ret) { 4697 mlog_errno(ret); 4698 goto out; 4699 } 4700 4701 ret = ocfs2_read_xattr_bucket(first, p_blkno); 4702 if (ret) { 4703 mlog_errno(ret); 4704 goto out; 4705 } 4706 4707 num_buckets = ocfs2_xattr_buckets_per_cluster(osb) * num_clusters; 4708 if (num_buckets == le16_to_cpu(bucket_xh(first)->xh_num_buckets)) { 4709 /* 4710 * This can move first+target if the target bucket moves 4711 * to the new extent. 4712 */ 4713 ret = ocfs2_add_new_xattr_cluster(inode, 4714 xb_bh, 4715 first, 4716 target, 4717 &num_clusters, 4718 e_cpos, 4719 &extend, 4720 ctxt); 4721 if (ret) { 4722 mlog_errno(ret); 4723 goto out; 4724 } 4725 } 4726 4727 if (extend) { 4728 ret = ocfs2_extend_xattr_bucket(inode, 4729 ctxt->handle, 4730 first, 4731 bucket_blkno(target), 4732 num_clusters); 4733 if (ret) 4734 mlog_errno(ret); 4735 } 4736 4737 out: 4738 ocfs2_xattr_bucket_free(first); 4739 4740 return ret; 4741 } 4742 4743 static inline char *ocfs2_xattr_bucket_get_val(struct inode *inode, 4744 struct ocfs2_xattr_bucket *bucket, 4745 int offs) 4746 { 4747 int block_off = offs >> inode->i_sb->s_blocksize_bits; 4748 4749 offs = offs % inode->i_sb->s_blocksize; 4750 return bucket_block(bucket, block_off) + offs; 4751 } 4752 4753 /* 4754 * Handle the normal xattr set, including replace, delete and new. 4755 * 4756 * Note: "local" indicates the real data's locality. So we can't 4757 * just its bucket locality by its length. 4758 */ 4759 static void ocfs2_xattr_set_entry_normal(struct inode *inode, 4760 struct ocfs2_xattr_info *xi, 4761 struct ocfs2_xattr_search *xs, 4762 u32 name_hash, 4763 int local) 4764 { 4765 struct ocfs2_xattr_entry *last, *xe; 4766 int name_len = strlen(xi->name); 4767 struct ocfs2_xattr_header *xh = xs->header; 4768 u16 count = le16_to_cpu(xh->xh_count), start; 4769 size_t blocksize = inode->i_sb->s_blocksize; 4770 char *val; 4771 size_t offs, size, new_size; 4772 4773 last = &xh->xh_entries[count]; 4774 if (!xs->not_found) { 4775 xe = xs->here; 4776 offs = le16_to_cpu(xe->xe_name_offset); 4777 if (ocfs2_xattr_is_local(xe)) 4778 size = OCFS2_XATTR_SIZE(name_len) + 4779 OCFS2_XATTR_SIZE(le64_to_cpu(xe->xe_value_size)); 4780 else 4781 size = OCFS2_XATTR_SIZE(name_len) + 4782 OCFS2_XATTR_SIZE(OCFS2_XATTR_ROOT_SIZE); 4783 4784 /* 4785 * If the new value will be stored outside, xi->value has been 4786 * initalized as an empty ocfs2_xattr_value_root, and the same 4787 * goes with xi->value_len, so we can set new_size safely here. 4788 * See ocfs2_xattr_set_in_bucket. 4789 */ 4790 new_size = OCFS2_XATTR_SIZE(name_len) + 4791 OCFS2_XATTR_SIZE(xi->value_len); 4792 4793 le16_add_cpu(&xh->xh_name_value_len, -size); 4794 if (xi->value) { 4795 if (new_size > size) 4796 goto set_new_name_value; 4797 4798 /* Now replace the old value with new one. */ 4799 if (local) 4800 xe->xe_value_size = cpu_to_le64(xi->value_len); 4801 else 4802 xe->xe_value_size = 0; 4803 4804 val = ocfs2_xattr_bucket_get_val(inode, 4805 xs->bucket, offs); 4806 memset(val + OCFS2_XATTR_SIZE(name_len), 0, 4807 size - OCFS2_XATTR_SIZE(name_len)); 4808 if (OCFS2_XATTR_SIZE(xi->value_len) > 0) 4809 memcpy(val + OCFS2_XATTR_SIZE(name_len), 4810 xi->value, xi->value_len); 4811 4812 le16_add_cpu(&xh->xh_name_value_len, new_size); 4813 ocfs2_xattr_set_local(xe, local); 4814 return; 4815 } else { 4816 /* 4817 * Remove the old entry if there is more than one. 4818 * We don't remove the last entry so that we can 4819 * use it to indicate the hash value of the empty 4820 * bucket. 4821 */ 4822 last -= 1; 4823 le16_add_cpu(&xh->xh_count, -1); 4824 if (xh->xh_count) { 4825 memmove(xe, xe + 1, 4826 (void *)last - (void *)xe); 4827 memset(last, 0, 4828 sizeof(struct ocfs2_xattr_entry)); 4829 } else 4830 xh->xh_free_start = 4831 cpu_to_le16(OCFS2_XATTR_BUCKET_SIZE); 4832 4833 return; 4834 } 4835 } else { 4836 /* find a new entry for insert. */ 4837 int low = 0, high = count - 1, tmp; 4838 struct ocfs2_xattr_entry *tmp_xe; 4839 4840 while (low <= high && count) { 4841 tmp = (low + high) / 2; 4842 tmp_xe = &xh->xh_entries[tmp]; 4843 4844 if (name_hash > le32_to_cpu(tmp_xe->xe_name_hash)) 4845 low = tmp + 1; 4846 else if (name_hash < 4847 le32_to_cpu(tmp_xe->xe_name_hash)) 4848 high = tmp - 1; 4849 else { 4850 low = tmp; 4851 break; 4852 } 4853 } 4854 4855 xe = &xh->xh_entries[low]; 4856 if (low != count) 4857 memmove(xe + 1, xe, (void *)last - (void *)xe); 4858 4859 le16_add_cpu(&xh->xh_count, 1); 4860 memset(xe, 0, sizeof(struct ocfs2_xattr_entry)); 4861 xe->xe_name_hash = cpu_to_le32(name_hash); 4862 xe->xe_name_len = name_len; 4863 ocfs2_xattr_set_type(xe, xi->name_index); 4864 } 4865 4866 set_new_name_value: 4867 /* Insert the new name+value. */ 4868 size = OCFS2_XATTR_SIZE(name_len) + OCFS2_XATTR_SIZE(xi->value_len); 4869 4870 /* 4871 * We must make sure that the name/value pair 4872 * exists in the same block. 4873 */ 4874 offs = le16_to_cpu(xh->xh_free_start); 4875 start = offs - size; 4876 4877 if (start >> inode->i_sb->s_blocksize_bits != 4878 (offs - 1) >> inode->i_sb->s_blocksize_bits) { 4879 offs = offs - offs % blocksize; 4880 xh->xh_free_start = cpu_to_le16(offs); 4881 } 4882 4883 val = ocfs2_xattr_bucket_get_val(inode, xs->bucket, offs - size); 4884 xe->xe_name_offset = cpu_to_le16(offs - size); 4885 4886 memset(val, 0, size); 4887 memcpy(val, xi->name, name_len); 4888 memcpy(val + OCFS2_XATTR_SIZE(name_len), xi->value, xi->value_len); 4889 4890 xe->xe_value_size = cpu_to_le64(xi->value_len); 4891 ocfs2_xattr_set_local(xe, local); 4892 xs->here = xe; 4893 le16_add_cpu(&xh->xh_free_start, -size); 4894 le16_add_cpu(&xh->xh_name_value_len, size); 4895 4896 return; 4897 } 4898 4899 /* 4900 * Set the xattr entry in the specified bucket. 4901 * The bucket is indicated by xs->bucket and it should have the enough 4902 * space for the xattr insertion. 4903 */ 4904 static int ocfs2_xattr_set_entry_in_bucket(struct inode *inode, 4905 handle_t *handle, 4906 struct ocfs2_xattr_info *xi, 4907 struct ocfs2_xattr_search *xs, 4908 u32 name_hash, 4909 int local) 4910 { 4911 int ret; 4912 u64 blkno; 4913 4914 mlog(0, "Set xattr entry len = %lu index = %d in bucket %llu\n", 4915 (unsigned long)xi->value_len, xi->name_index, 4916 (unsigned long long)bucket_blkno(xs->bucket)); 4917 4918 if (!xs->bucket->bu_bhs[1]) { 4919 blkno = bucket_blkno(xs->bucket); 4920 ocfs2_xattr_bucket_relse(xs->bucket); 4921 ret = ocfs2_read_xattr_bucket(xs->bucket, blkno); 4922 if (ret) { 4923 mlog_errno(ret); 4924 goto out; 4925 } 4926 } 4927 4928 ret = ocfs2_xattr_bucket_journal_access(handle, xs->bucket, 4929 OCFS2_JOURNAL_ACCESS_WRITE); 4930 if (ret < 0) { 4931 mlog_errno(ret); 4932 goto out; 4933 } 4934 4935 ocfs2_xattr_set_entry_normal(inode, xi, xs, name_hash, local); 4936 ocfs2_xattr_bucket_journal_dirty(handle, xs->bucket); 4937 4938 out: 4939 return ret; 4940 } 4941 4942 /* 4943 * Truncate the specified xe_off entry in xattr bucket. 4944 * bucket is indicated by header_bh and len is the new length. 4945 * Both the ocfs2_xattr_value_root and the entry will be updated here. 4946 * 4947 * Copy the new updated xe and xe_value_root to new_xe and new_xv if needed. 4948 */ 4949 static int ocfs2_xattr_bucket_value_truncate(struct inode *inode, 4950 struct ocfs2_xattr_bucket *bucket, 4951 int xe_off, 4952 int len, 4953 struct ocfs2_xattr_set_ctxt *ctxt) 4954 { 4955 int ret, offset; 4956 u64 value_blk; 4957 struct ocfs2_xattr_entry *xe; 4958 struct ocfs2_xattr_header *xh = bucket_xh(bucket); 4959 size_t blocksize = inode->i_sb->s_blocksize; 4960 struct ocfs2_xattr_value_buf vb = { 4961 .vb_access = ocfs2_journal_access, 4962 }; 4963 4964 xe = &xh->xh_entries[xe_off]; 4965 4966 BUG_ON(!xe || ocfs2_xattr_is_local(xe)); 4967 4968 offset = le16_to_cpu(xe->xe_name_offset) + 4969 OCFS2_XATTR_SIZE(xe->xe_name_len); 4970 4971 value_blk = offset / blocksize; 4972 4973 /* We don't allow ocfs2_xattr_value to be stored in different block. */ 4974 BUG_ON(value_blk != (offset + OCFS2_XATTR_ROOT_SIZE - 1) / blocksize); 4975 4976 vb.vb_bh = bucket->bu_bhs[value_blk]; 4977 BUG_ON(!vb.vb_bh); 4978 4979 vb.vb_xv = (struct ocfs2_xattr_value_root *) 4980 (vb.vb_bh->b_data + offset % blocksize); 4981 4982 /* 4983 * From here on out we have to dirty the bucket. The generic 4984 * value calls only modify one of the bucket's bhs, but we need 4985 * to send the bucket at once. So if they error, they *could* have 4986 * modified something. We have to assume they did, and dirty 4987 * the whole bucket. This leaves us in a consistent state. 4988 */ 4989 mlog(0, "truncate %u in xattr bucket %llu to %d bytes.\n", 4990 xe_off, (unsigned long long)bucket_blkno(bucket), len); 4991 ret = ocfs2_xattr_value_truncate(inode, &vb, len, ctxt); 4992 if (ret) { 4993 mlog_errno(ret); 4994 goto out; 4995 } 4996 4997 ret = ocfs2_xattr_bucket_journal_access(ctxt->handle, bucket, 4998 OCFS2_JOURNAL_ACCESS_WRITE); 4999 if (ret) { 5000 mlog_errno(ret); 5001 goto out; 5002 } 5003 5004 xe->xe_value_size = cpu_to_le64(len); 5005 5006 ocfs2_xattr_bucket_journal_dirty(ctxt->handle, bucket); 5007 5008 out: 5009 return ret; 5010 } 5011 5012 static int ocfs2_xattr_bucket_value_truncate_xs(struct inode *inode, 5013 struct ocfs2_xattr_search *xs, 5014 int len, 5015 struct ocfs2_xattr_set_ctxt *ctxt) 5016 { 5017 int ret, offset; 5018 struct ocfs2_xattr_entry *xe = xs->here; 5019 struct ocfs2_xattr_header *xh = (struct ocfs2_xattr_header *)xs->base; 5020 5021 BUG_ON(!xs->bucket->bu_bhs[0] || !xe || ocfs2_xattr_is_local(xe)); 5022 5023 offset = xe - xh->xh_entries; 5024 ret = ocfs2_xattr_bucket_value_truncate(inode, xs->bucket, 5025 offset, len, ctxt); 5026 if (ret) 5027 mlog_errno(ret); 5028 5029 return ret; 5030 } 5031 5032 static int ocfs2_xattr_bucket_set_value_outside(struct inode *inode, 5033 handle_t *handle, 5034 struct ocfs2_xattr_search *xs, 5035 char *val, 5036 int value_len) 5037 { 5038 int ret, offset, block_off; 5039 struct ocfs2_xattr_value_root *xv; 5040 struct ocfs2_xattr_entry *xe = xs->here; 5041 struct ocfs2_xattr_header *xh = bucket_xh(xs->bucket); 5042 void *base; 5043 struct ocfs2_xattr_value_buf vb = { 5044 .vb_access = ocfs2_journal_access, 5045 }; 5046 5047 BUG_ON(!xs->base || !xe || ocfs2_xattr_is_local(xe)); 5048 5049 ret = ocfs2_xattr_bucket_get_name_value(inode->i_sb, xh, 5050 xe - xh->xh_entries, 5051 &block_off, 5052 &offset); 5053 if (ret) { 5054 mlog_errno(ret); 5055 goto out; 5056 } 5057 5058 base = bucket_block(xs->bucket, block_off); 5059 xv = (struct ocfs2_xattr_value_root *)(base + offset + 5060 OCFS2_XATTR_SIZE(xe->xe_name_len)); 5061 5062 vb.vb_xv = xv; 5063 vb.vb_bh = xs->bucket->bu_bhs[block_off]; 5064 ret = __ocfs2_xattr_set_value_outside(inode, handle, 5065 &vb, val, value_len); 5066 if (ret) 5067 mlog_errno(ret); 5068 out: 5069 return ret; 5070 } 5071 5072 static int ocfs2_rm_xattr_cluster(struct inode *inode, 5073 struct buffer_head *root_bh, 5074 u64 blkno, 5075 u32 cpos, 5076 u32 len, 5077 void *para) 5078 { 5079 int ret; 5080 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 5081 struct inode *tl_inode = osb->osb_tl_inode; 5082 handle_t *handle; 5083 struct ocfs2_xattr_block *xb = 5084 (struct ocfs2_xattr_block *)root_bh->b_data; 5085 struct ocfs2_alloc_context *meta_ac = NULL; 5086 struct ocfs2_cached_dealloc_ctxt dealloc; 5087 struct ocfs2_extent_tree et; 5088 5089 ret = ocfs2_iterate_xattr_buckets(inode, blkno, len, 5090 ocfs2_delete_xattr_in_bucket, para); 5091 if (ret) { 5092 mlog_errno(ret); 5093 return ret; 5094 } 5095 5096 ocfs2_init_xattr_tree_extent_tree(&et, INODE_CACHE(inode), root_bh); 5097 5098 ocfs2_init_dealloc_ctxt(&dealloc); 5099 5100 mlog(0, "rm xattr extent rec at %u len = %u, start from %llu\n", 5101 cpos, len, (unsigned long long)blkno); 5102 5103 ocfs2_remove_xattr_clusters_from_cache(INODE_CACHE(inode), blkno, 5104 len); 5105 5106 ret = ocfs2_lock_allocators(inode, &et, 0, 1, NULL, &meta_ac); 5107 if (ret) { 5108 mlog_errno(ret); 5109 return ret; 5110 } 5111 5112 mutex_lock(&tl_inode->i_mutex); 5113 5114 if (ocfs2_truncate_log_needs_flush(osb)) { 5115 ret = __ocfs2_flush_truncate_log(osb); 5116 if (ret < 0) { 5117 mlog_errno(ret); 5118 goto out; 5119 } 5120 } 5121 5122 handle = ocfs2_start_trans(osb, ocfs2_remove_extent_credits(osb->sb)); 5123 if (IS_ERR(handle)) { 5124 ret = -ENOMEM; 5125 mlog_errno(ret); 5126 goto out; 5127 } 5128 5129 ret = ocfs2_journal_access_xb(handle, INODE_CACHE(inode), root_bh, 5130 OCFS2_JOURNAL_ACCESS_WRITE); 5131 if (ret) { 5132 mlog_errno(ret); 5133 goto out_commit; 5134 } 5135 5136 ret = ocfs2_remove_extent(handle, &et, cpos, len, meta_ac, 5137 &dealloc); 5138 if (ret) { 5139 mlog_errno(ret); 5140 goto out_commit; 5141 } 5142 5143 le32_add_cpu(&xb->xb_attrs.xb_root.xt_clusters, -len); 5144 5145 ret = ocfs2_journal_dirty(handle, root_bh); 5146 if (ret) { 5147 mlog_errno(ret); 5148 goto out_commit; 5149 } 5150 5151 ret = ocfs2_truncate_log_append(osb, handle, blkno, len); 5152 if (ret) 5153 mlog_errno(ret); 5154 5155 out_commit: 5156 ocfs2_commit_trans(osb, handle); 5157 out: 5158 ocfs2_schedule_truncate_log_flush(osb, 1); 5159 5160 mutex_unlock(&tl_inode->i_mutex); 5161 5162 if (meta_ac) 5163 ocfs2_free_alloc_context(meta_ac); 5164 5165 ocfs2_run_deallocs(osb, &dealloc); 5166 5167 return ret; 5168 } 5169 5170 static void ocfs2_xattr_bucket_remove_xs(struct inode *inode, 5171 handle_t *handle, 5172 struct ocfs2_xattr_search *xs) 5173 { 5174 struct ocfs2_xattr_header *xh = bucket_xh(xs->bucket); 5175 struct ocfs2_xattr_entry *last = &xh->xh_entries[ 5176 le16_to_cpu(xh->xh_count) - 1]; 5177 int ret = 0; 5178 5179 ret = ocfs2_xattr_bucket_journal_access(handle, xs->bucket, 5180 OCFS2_JOURNAL_ACCESS_WRITE); 5181 if (ret) { 5182 mlog_errno(ret); 5183 return; 5184 } 5185 5186 /* Remove the old entry. */ 5187 memmove(xs->here, xs->here + 1, 5188 (void *)last - (void *)xs->here); 5189 memset(last, 0, sizeof(struct ocfs2_xattr_entry)); 5190 le16_add_cpu(&xh->xh_count, -1); 5191 5192 ocfs2_xattr_bucket_journal_dirty(handle, xs->bucket); 5193 } 5194 5195 /* 5196 * Set the xattr name/value in the bucket specified in xs. 5197 * 5198 * As the new value in xi may be stored in the bucket or in an outside cluster, 5199 * we divide the whole process into 3 steps: 5200 * 1. insert name/value in the bucket(ocfs2_xattr_set_entry_in_bucket) 5201 * 2. truncate of the outside cluster(ocfs2_xattr_bucket_value_truncate_xs) 5202 * 3. Set the value to the outside cluster(ocfs2_xattr_bucket_set_value_outside) 5203 * 4. If the clusters for the new outside value can't be allocated, we need 5204 * to free the xattr we allocated in set. 5205 */ 5206 static int ocfs2_xattr_set_in_bucket(struct inode *inode, 5207 struct ocfs2_xattr_info *xi, 5208 struct ocfs2_xattr_search *xs, 5209 struct ocfs2_xattr_set_ctxt *ctxt) 5210 { 5211 int ret, local = 1; 5212 size_t value_len; 5213 char *val = (char *)xi->value; 5214 struct ocfs2_xattr_entry *xe = xs->here; 5215 u32 name_hash = ocfs2_xattr_name_hash(inode, xi->name, 5216 strlen(xi->name)); 5217 5218 if (!xs->not_found && !ocfs2_xattr_is_local(xe)) { 5219 /* 5220 * We need to truncate the xattr storage first. 5221 * 5222 * If both the old and new value are stored to 5223 * outside block, we only need to truncate 5224 * the storage and then set the value outside. 5225 * 5226 * If the new value should be stored within block, 5227 * we should free all the outside block first and 5228 * the modification to the xattr block will be done 5229 * by following steps. 5230 */ 5231 if (xi->value_len > OCFS2_XATTR_INLINE_SIZE) 5232 value_len = xi->value_len; 5233 else 5234 value_len = 0; 5235 5236 ret = ocfs2_xattr_bucket_value_truncate_xs(inode, xs, 5237 value_len, 5238 ctxt); 5239 if (ret) 5240 goto out; 5241 5242 if (value_len) 5243 goto set_value_outside; 5244 } 5245 5246 value_len = xi->value_len; 5247 /* So we have to handle the inside block change now. */ 5248 if (value_len > OCFS2_XATTR_INLINE_SIZE) { 5249 /* 5250 * If the new value will be stored outside of block, 5251 * initalize a new empty value root and insert it first. 5252 */ 5253 local = 0; 5254 xi->value = &def_xv; 5255 xi->value_len = OCFS2_XATTR_ROOT_SIZE; 5256 } 5257 5258 ret = ocfs2_xattr_set_entry_in_bucket(inode, ctxt->handle, xi, xs, 5259 name_hash, local); 5260 if (ret) { 5261 mlog_errno(ret); 5262 goto out; 5263 } 5264 5265 if (value_len <= OCFS2_XATTR_INLINE_SIZE) 5266 goto out; 5267 5268 /* allocate the space now for the outside block storage. */ 5269 ret = ocfs2_xattr_bucket_value_truncate_xs(inode, xs, 5270 value_len, ctxt); 5271 if (ret) { 5272 mlog_errno(ret); 5273 5274 if (xs->not_found) { 5275 /* 5276 * We can't allocate enough clusters for outside 5277 * storage and we have allocated xattr already, 5278 * so need to remove it. 5279 */ 5280 ocfs2_xattr_bucket_remove_xs(inode, ctxt->handle, xs); 5281 } 5282 goto out; 5283 } 5284 5285 set_value_outside: 5286 ret = ocfs2_xattr_bucket_set_value_outside(inode, ctxt->handle, 5287 xs, val, value_len); 5288 out: 5289 return ret; 5290 } 5291 5292 /* 5293 * check whether the xattr bucket is filled up with the same hash value. 5294 * If we want to insert the xattr with the same hash, return -ENOSPC. 5295 * If we want to insert a xattr with different hash value, go ahead 5296 * and ocfs2_divide_xattr_bucket will handle this. 5297 */ 5298 static int ocfs2_check_xattr_bucket_collision(struct inode *inode, 5299 struct ocfs2_xattr_bucket *bucket, 5300 const char *name) 5301 { 5302 struct ocfs2_xattr_header *xh = bucket_xh(bucket); 5303 u32 name_hash = ocfs2_xattr_name_hash(inode, name, strlen(name)); 5304 5305 if (name_hash != le32_to_cpu(xh->xh_entries[0].xe_name_hash)) 5306 return 0; 5307 5308 if (xh->xh_entries[le16_to_cpu(xh->xh_count) - 1].xe_name_hash == 5309 xh->xh_entries[0].xe_name_hash) { 5310 mlog(ML_ERROR, "Too much hash collision in xattr bucket %llu, " 5311 "hash = %u\n", 5312 (unsigned long long)bucket_blkno(bucket), 5313 le32_to_cpu(xh->xh_entries[0].xe_name_hash)); 5314 return -ENOSPC; 5315 } 5316 5317 return 0; 5318 } 5319 5320 static int ocfs2_xattr_set_entry_index_block(struct inode *inode, 5321 struct ocfs2_xattr_info *xi, 5322 struct ocfs2_xattr_search *xs, 5323 struct ocfs2_xattr_set_ctxt *ctxt) 5324 { 5325 struct ocfs2_xattr_header *xh; 5326 struct ocfs2_xattr_entry *xe; 5327 u16 count, header_size, xh_free_start; 5328 int free, max_free, need, old; 5329 size_t value_size = 0, name_len = strlen(xi->name); 5330 size_t blocksize = inode->i_sb->s_blocksize; 5331 int ret, allocation = 0; 5332 5333 mlog_entry("Set xattr %s in xattr index block\n", xi->name); 5334 5335 try_again: 5336 xh = xs->header; 5337 count = le16_to_cpu(xh->xh_count); 5338 xh_free_start = le16_to_cpu(xh->xh_free_start); 5339 header_size = sizeof(struct ocfs2_xattr_header) + 5340 count * sizeof(struct ocfs2_xattr_entry); 5341 max_free = OCFS2_XATTR_BUCKET_SIZE - header_size - 5342 le16_to_cpu(xh->xh_name_value_len) - OCFS2_XATTR_HEADER_GAP; 5343 5344 mlog_bug_on_msg(header_size > blocksize, "bucket %llu has header size " 5345 "of %u which exceed block size\n", 5346 (unsigned long long)bucket_blkno(xs->bucket), 5347 header_size); 5348 5349 if (xi->value && xi->value_len > OCFS2_XATTR_INLINE_SIZE) 5350 value_size = OCFS2_XATTR_ROOT_SIZE; 5351 else if (xi->value) 5352 value_size = OCFS2_XATTR_SIZE(xi->value_len); 5353 5354 if (xs->not_found) 5355 need = sizeof(struct ocfs2_xattr_entry) + 5356 OCFS2_XATTR_SIZE(name_len) + value_size; 5357 else { 5358 need = value_size + OCFS2_XATTR_SIZE(name_len); 5359 5360 /* 5361 * We only replace the old value if the new length is smaller 5362 * than the old one. Otherwise we will allocate new space in the 5363 * bucket to store it. 5364 */ 5365 xe = xs->here; 5366 if (ocfs2_xattr_is_local(xe)) 5367 old = OCFS2_XATTR_SIZE(le64_to_cpu(xe->xe_value_size)); 5368 else 5369 old = OCFS2_XATTR_SIZE(OCFS2_XATTR_ROOT_SIZE); 5370 5371 if (old >= value_size) 5372 need = 0; 5373 } 5374 5375 free = xh_free_start - header_size - OCFS2_XATTR_HEADER_GAP; 5376 /* 5377 * We need to make sure the new name/value pair 5378 * can exist in the same block. 5379 */ 5380 if (xh_free_start % blocksize < need) 5381 free -= xh_free_start % blocksize; 5382 5383 mlog(0, "xs->not_found = %d, in xattr bucket %llu: free = %d, " 5384 "need = %d, max_free = %d, xh_free_start = %u, xh_name_value_len =" 5385 " %u\n", xs->not_found, 5386 (unsigned long long)bucket_blkno(xs->bucket), 5387 free, need, max_free, le16_to_cpu(xh->xh_free_start), 5388 le16_to_cpu(xh->xh_name_value_len)); 5389 5390 if (free < need || 5391 (xs->not_found && 5392 count == ocfs2_xattr_max_xe_in_bucket(inode->i_sb))) { 5393 if (need <= max_free && 5394 count < ocfs2_xattr_max_xe_in_bucket(inode->i_sb)) { 5395 /* 5396 * We can create the space by defragment. Since only the 5397 * name/value will be moved, the xe shouldn't be changed 5398 * in xs. 5399 */ 5400 ret = ocfs2_defrag_xattr_bucket(inode, ctxt->handle, 5401 xs->bucket); 5402 if (ret) { 5403 mlog_errno(ret); 5404 goto out; 5405 } 5406 5407 xh_free_start = le16_to_cpu(xh->xh_free_start); 5408 free = xh_free_start - header_size 5409 - OCFS2_XATTR_HEADER_GAP; 5410 if (xh_free_start % blocksize < need) 5411 free -= xh_free_start % blocksize; 5412 5413 if (free >= need) 5414 goto xattr_set; 5415 5416 mlog(0, "Can't get enough space for xattr insert by " 5417 "defragment. Need %u bytes, but we have %d, so " 5418 "allocate new bucket for it.\n", need, free); 5419 } 5420 5421 /* 5422 * We have to add new buckets or clusters and one 5423 * allocation should leave us enough space for insert. 5424 */ 5425 BUG_ON(allocation); 5426 5427 /* 5428 * We do not allow for overlapping ranges between buckets. And 5429 * the maximum number of collisions we will allow for then is 5430 * one bucket's worth, so check it here whether we need to 5431 * add a new bucket for the insert. 5432 */ 5433 ret = ocfs2_check_xattr_bucket_collision(inode, 5434 xs->bucket, 5435 xi->name); 5436 if (ret) { 5437 mlog_errno(ret); 5438 goto out; 5439 } 5440 5441 ret = ocfs2_add_new_xattr_bucket(inode, 5442 xs->xattr_bh, 5443 xs->bucket, 5444 ctxt); 5445 if (ret) { 5446 mlog_errno(ret); 5447 goto out; 5448 } 5449 5450 /* 5451 * ocfs2_add_new_xattr_bucket() will have updated 5452 * xs->bucket if it moved, but it will not have updated 5453 * any of the other search fields. Thus, we drop it and 5454 * re-search. Everything should be cached, so it'll be 5455 * quick. 5456 */ 5457 ocfs2_xattr_bucket_relse(xs->bucket); 5458 ret = ocfs2_xattr_index_block_find(inode, xs->xattr_bh, 5459 xi->name_index, 5460 xi->name, xs); 5461 if (ret && ret != -ENODATA) 5462 goto out; 5463 xs->not_found = ret; 5464 allocation = 1; 5465 goto try_again; 5466 } 5467 5468 xattr_set: 5469 ret = ocfs2_xattr_set_in_bucket(inode, xi, xs, ctxt); 5470 out: 5471 mlog_exit(ret); 5472 return ret; 5473 } 5474 5475 static int ocfs2_delete_xattr_in_bucket(struct inode *inode, 5476 struct ocfs2_xattr_bucket *bucket, 5477 void *para) 5478 { 5479 int ret = 0, ref_credits; 5480 struct ocfs2_xattr_header *xh = bucket_xh(bucket); 5481 u16 i; 5482 struct ocfs2_xattr_entry *xe; 5483 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 5484 struct ocfs2_xattr_set_ctxt ctxt = {NULL, NULL,}; 5485 int credits = ocfs2_remove_extent_credits(osb->sb) + 5486 ocfs2_blocks_per_xattr_bucket(inode->i_sb); 5487 struct ocfs2_xattr_value_root *xv; 5488 struct ocfs2_rm_xattr_bucket_para *args = 5489 (struct ocfs2_rm_xattr_bucket_para *)para; 5490 5491 ocfs2_init_dealloc_ctxt(&ctxt.dealloc); 5492 5493 for (i = 0; i < le16_to_cpu(xh->xh_count); i++) { 5494 xe = &xh->xh_entries[i]; 5495 if (ocfs2_xattr_is_local(xe)) 5496 continue; 5497 5498 ret = ocfs2_get_xattr_tree_value_root(inode->i_sb, bucket, 5499 i, &xv, NULL); 5500 5501 ret = ocfs2_lock_xattr_remove_allocators(inode, xv, 5502 args->ref_ci, 5503 args->ref_root_bh, 5504 &ctxt.meta_ac, 5505 &ref_credits); 5506 5507 ctxt.handle = ocfs2_start_trans(osb, credits + ref_credits); 5508 if (IS_ERR(ctxt.handle)) { 5509 ret = PTR_ERR(ctxt.handle); 5510 mlog_errno(ret); 5511 break; 5512 } 5513 5514 ret = ocfs2_xattr_bucket_value_truncate(inode, bucket, 5515 i, 0, &ctxt); 5516 5517 ocfs2_commit_trans(osb, ctxt.handle); 5518 if (ctxt.meta_ac) { 5519 ocfs2_free_alloc_context(ctxt.meta_ac); 5520 ctxt.meta_ac = NULL; 5521 } 5522 if (ret) { 5523 mlog_errno(ret); 5524 break; 5525 } 5526 } 5527 5528 if (ctxt.meta_ac) 5529 ocfs2_free_alloc_context(ctxt.meta_ac); 5530 ocfs2_schedule_truncate_log_flush(osb, 1); 5531 ocfs2_run_deallocs(osb, &ctxt.dealloc); 5532 return ret; 5533 } 5534 5535 /* 5536 * Whenever we modify a xattr value root in the bucket(e.g, CoW 5537 * or change the extent record flag), we need to recalculate 5538 * the metaecc for the whole bucket. So it is done here. 5539 * 5540 * Note: 5541 * We have to give the extra credits for the caller. 5542 */ 5543 static int ocfs2_xattr_bucket_post_refcount(struct inode *inode, 5544 handle_t *handle, 5545 void *para) 5546 { 5547 int ret; 5548 struct ocfs2_xattr_bucket *bucket = 5549 (struct ocfs2_xattr_bucket *)para; 5550 5551 ret = ocfs2_xattr_bucket_journal_access(handle, bucket, 5552 OCFS2_JOURNAL_ACCESS_WRITE); 5553 if (ret) { 5554 mlog_errno(ret); 5555 return ret; 5556 } 5557 5558 ocfs2_xattr_bucket_journal_dirty(handle, bucket); 5559 5560 return 0; 5561 } 5562 5563 /* 5564 * Special action we need if the xattr value is refcounted. 5565 * 5566 * 1. If the xattr is refcounted, lock the tree. 5567 * 2. CoW the xattr if we are setting the new value and the value 5568 * will be stored outside. 5569 * 3. In other case, decrease_refcount will work for us, so just 5570 * lock the refcount tree, calculate the meta and credits is OK. 5571 * 5572 * We have to do CoW before ocfs2_init_xattr_set_ctxt since 5573 * currently CoW is a completed transaction, while this function 5574 * will also lock the allocators and let us deadlock. So we will 5575 * CoW the whole xattr value. 5576 */ 5577 static int ocfs2_prepare_refcount_xattr(struct inode *inode, 5578 struct ocfs2_dinode *di, 5579 struct ocfs2_xattr_info *xi, 5580 struct ocfs2_xattr_search *xis, 5581 struct ocfs2_xattr_search *xbs, 5582 struct ocfs2_refcount_tree **ref_tree, 5583 int *meta_add, 5584 int *credits) 5585 { 5586 int ret = 0; 5587 struct ocfs2_xattr_block *xb; 5588 struct ocfs2_xattr_entry *xe; 5589 char *base; 5590 u32 p_cluster, num_clusters; 5591 unsigned int ext_flags; 5592 int name_offset, name_len; 5593 struct ocfs2_xattr_value_buf vb; 5594 struct ocfs2_xattr_bucket *bucket = NULL; 5595 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 5596 struct ocfs2_post_refcount refcount; 5597 struct ocfs2_post_refcount *p = NULL; 5598 struct buffer_head *ref_root_bh = NULL; 5599 5600 if (!xis->not_found) { 5601 xe = xis->here; 5602 name_offset = le16_to_cpu(xe->xe_name_offset); 5603 name_len = OCFS2_XATTR_SIZE(xe->xe_name_len); 5604 base = xis->base; 5605 vb.vb_bh = xis->inode_bh; 5606 vb.vb_access = ocfs2_journal_access_di; 5607 } else { 5608 int i, block_off = 0; 5609 xb = (struct ocfs2_xattr_block *)xbs->xattr_bh->b_data; 5610 xe = xbs->here; 5611 name_offset = le16_to_cpu(xe->xe_name_offset); 5612 name_len = OCFS2_XATTR_SIZE(xe->xe_name_len); 5613 i = xbs->here - xbs->header->xh_entries; 5614 5615 if (le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED) { 5616 ret = ocfs2_xattr_bucket_get_name_value(inode->i_sb, 5617 bucket_xh(xbs->bucket), 5618 i, &block_off, 5619 &name_offset); 5620 if (ret) { 5621 mlog_errno(ret); 5622 goto out; 5623 } 5624 base = bucket_block(xbs->bucket, block_off); 5625 vb.vb_bh = xbs->bucket->bu_bhs[block_off]; 5626 vb.vb_access = ocfs2_journal_access; 5627 5628 if (ocfs2_meta_ecc(osb)) { 5629 /*create parameters for ocfs2_post_refcount. */ 5630 bucket = xbs->bucket; 5631 refcount.credits = bucket->bu_blocks; 5632 refcount.para = bucket; 5633 refcount.func = 5634 ocfs2_xattr_bucket_post_refcount; 5635 p = &refcount; 5636 } 5637 } else { 5638 base = xbs->base; 5639 vb.vb_bh = xbs->xattr_bh; 5640 vb.vb_access = ocfs2_journal_access_xb; 5641 } 5642 } 5643 5644 if (ocfs2_xattr_is_local(xe)) 5645 goto out; 5646 5647 vb.vb_xv = (struct ocfs2_xattr_value_root *) 5648 (base + name_offset + name_len); 5649 5650 ret = ocfs2_xattr_get_clusters(inode, 0, &p_cluster, 5651 &num_clusters, &vb.vb_xv->xr_list, 5652 &ext_flags); 5653 if (ret) { 5654 mlog_errno(ret); 5655 goto out; 5656 } 5657 5658 /* 5659 * We just need to check the 1st extent record, since we always 5660 * CoW the whole xattr. So there shouldn't be a xattr with 5661 * some REFCOUNT extent recs after the 1st one. 5662 */ 5663 if (!(ext_flags & OCFS2_EXT_REFCOUNTED)) 5664 goto out; 5665 5666 ret = ocfs2_lock_refcount_tree(osb, le64_to_cpu(di->i_refcount_loc), 5667 1, ref_tree, &ref_root_bh); 5668 if (ret) { 5669 mlog_errno(ret); 5670 goto out; 5671 } 5672 5673 /* 5674 * If we are deleting the xattr or the new size will be stored inside, 5675 * cool, leave it there, the xattr truncate process will remove them 5676 * for us(it still needs the refcount tree lock and the meta, credits). 5677 * And the worse case is that every cluster truncate will split the 5678 * refcount tree, and make the original extent become 3. So we will need 5679 * 2 * cluster more extent recs at most. 5680 */ 5681 if (!xi->value || xi->value_len <= OCFS2_XATTR_INLINE_SIZE) { 5682 5683 ret = ocfs2_refcounted_xattr_delete_need(inode, 5684 &(*ref_tree)->rf_ci, 5685 ref_root_bh, vb.vb_xv, 5686 meta_add, credits); 5687 if (ret) 5688 mlog_errno(ret); 5689 goto out; 5690 } 5691 5692 ret = ocfs2_refcount_cow_xattr(inode, di, &vb, 5693 *ref_tree, ref_root_bh, 0, 5694 le32_to_cpu(vb.vb_xv->xr_clusters), p); 5695 if (ret) 5696 mlog_errno(ret); 5697 5698 out: 5699 brelse(ref_root_bh); 5700 return ret; 5701 } 5702 5703 /* 5704 * Add the REFCOUNTED flags for all the extent rec in ocfs2_xattr_value_root. 5705 * The physical clusters will be added to refcount tree. 5706 */ 5707 static int ocfs2_xattr_value_attach_refcount(struct inode *inode, 5708 struct ocfs2_xattr_value_root *xv, 5709 struct ocfs2_extent_tree *value_et, 5710 struct ocfs2_caching_info *ref_ci, 5711 struct buffer_head *ref_root_bh, 5712 struct ocfs2_cached_dealloc_ctxt *dealloc, 5713 struct ocfs2_post_refcount *refcount) 5714 { 5715 int ret = 0; 5716 u32 clusters = le32_to_cpu(xv->xr_clusters); 5717 u32 cpos, p_cluster, num_clusters; 5718 struct ocfs2_extent_list *el = &xv->xr_list; 5719 unsigned int ext_flags; 5720 5721 cpos = 0; 5722 while (cpos < clusters) { 5723 ret = ocfs2_xattr_get_clusters(inode, cpos, &p_cluster, 5724 &num_clusters, el, &ext_flags); 5725 5726 cpos += num_clusters; 5727 if ((ext_flags & OCFS2_EXT_REFCOUNTED)) 5728 continue; 5729 5730 BUG_ON(!p_cluster); 5731 5732 ret = ocfs2_add_refcount_flag(inode, value_et, 5733 ref_ci, ref_root_bh, 5734 cpos - num_clusters, 5735 p_cluster, num_clusters, 5736 dealloc, refcount); 5737 if (ret) { 5738 mlog_errno(ret); 5739 break; 5740 } 5741 } 5742 5743 return ret; 5744 } 5745 5746 /* 5747 * Given a normal ocfs2_xattr_header, refcount all the entries which 5748 * have value stored outside. 5749 * Used for xattrs stored in inode and ocfs2_xattr_block. 5750 */ 5751 static int ocfs2_xattr_attach_refcount_normal(struct inode *inode, 5752 struct ocfs2_xattr_value_buf *vb, 5753 struct ocfs2_xattr_header *header, 5754 struct ocfs2_caching_info *ref_ci, 5755 struct buffer_head *ref_root_bh, 5756 struct ocfs2_cached_dealloc_ctxt *dealloc) 5757 { 5758 5759 struct ocfs2_xattr_entry *xe; 5760 struct ocfs2_xattr_value_root *xv; 5761 struct ocfs2_extent_tree et; 5762 int i, ret = 0; 5763 5764 for (i = 0; i < le16_to_cpu(header->xh_count); i++) { 5765 xe = &header->xh_entries[i]; 5766 5767 if (ocfs2_xattr_is_local(xe)) 5768 continue; 5769 5770 xv = (struct ocfs2_xattr_value_root *)((void *)header + 5771 le16_to_cpu(xe->xe_name_offset) + 5772 OCFS2_XATTR_SIZE(xe->xe_name_len)); 5773 5774 vb->vb_xv = xv; 5775 ocfs2_init_xattr_value_extent_tree(&et, INODE_CACHE(inode), vb); 5776 5777 ret = ocfs2_xattr_value_attach_refcount(inode, xv, &et, 5778 ref_ci, ref_root_bh, 5779 dealloc, NULL); 5780 if (ret) { 5781 mlog_errno(ret); 5782 break; 5783 } 5784 } 5785 5786 return ret; 5787 } 5788 5789 static int ocfs2_xattr_inline_attach_refcount(struct inode *inode, 5790 struct buffer_head *fe_bh, 5791 struct ocfs2_caching_info *ref_ci, 5792 struct buffer_head *ref_root_bh, 5793 struct ocfs2_cached_dealloc_ctxt *dealloc) 5794 { 5795 struct ocfs2_dinode *di = (struct ocfs2_dinode *)fe_bh->b_data; 5796 struct ocfs2_xattr_header *header = (struct ocfs2_xattr_header *) 5797 (fe_bh->b_data + inode->i_sb->s_blocksize - 5798 le16_to_cpu(di->i_xattr_inline_size)); 5799 struct ocfs2_xattr_value_buf vb = { 5800 .vb_bh = fe_bh, 5801 .vb_access = ocfs2_journal_access_di, 5802 }; 5803 5804 return ocfs2_xattr_attach_refcount_normal(inode, &vb, header, 5805 ref_ci, ref_root_bh, dealloc); 5806 } 5807 5808 struct ocfs2_xattr_tree_value_refcount_para { 5809 struct ocfs2_caching_info *ref_ci; 5810 struct buffer_head *ref_root_bh; 5811 struct ocfs2_cached_dealloc_ctxt *dealloc; 5812 }; 5813 5814 static int ocfs2_get_xattr_tree_value_root(struct super_block *sb, 5815 struct ocfs2_xattr_bucket *bucket, 5816 int offset, 5817 struct ocfs2_xattr_value_root **xv, 5818 struct buffer_head **bh) 5819 { 5820 int ret, block_off, name_offset; 5821 struct ocfs2_xattr_header *xh = bucket_xh(bucket); 5822 struct ocfs2_xattr_entry *xe = &xh->xh_entries[offset]; 5823 void *base; 5824 5825 ret = ocfs2_xattr_bucket_get_name_value(sb, 5826 bucket_xh(bucket), 5827 offset, 5828 &block_off, 5829 &name_offset); 5830 if (ret) { 5831 mlog_errno(ret); 5832 goto out; 5833 } 5834 5835 base = bucket_block(bucket, block_off); 5836 5837 *xv = (struct ocfs2_xattr_value_root *)(base + name_offset + 5838 OCFS2_XATTR_SIZE(xe->xe_name_len)); 5839 5840 if (bh) 5841 *bh = bucket->bu_bhs[block_off]; 5842 out: 5843 return ret; 5844 } 5845 5846 /* 5847 * For a given xattr bucket, refcount all the entries which 5848 * have value stored outside. 5849 */ 5850 static int ocfs2_xattr_bucket_value_refcount(struct inode *inode, 5851 struct ocfs2_xattr_bucket *bucket, 5852 void *para) 5853 { 5854 int i, ret = 0; 5855 struct ocfs2_extent_tree et; 5856 struct ocfs2_xattr_tree_value_refcount_para *ref = 5857 (struct ocfs2_xattr_tree_value_refcount_para *)para; 5858 struct ocfs2_xattr_header *xh = 5859 (struct ocfs2_xattr_header *)bucket->bu_bhs[0]->b_data; 5860 struct ocfs2_xattr_entry *xe; 5861 struct ocfs2_xattr_value_buf vb = { 5862 .vb_access = ocfs2_journal_access, 5863 }; 5864 struct ocfs2_post_refcount refcount = { 5865 .credits = bucket->bu_blocks, 5866 .para = bucket, 5867 .func = ocfs2_xattr_bucket_post_refcount, 5868 }; 5869 struct ocfs2_post_refcount *p = NULL; 5870 5871 /* We only need post_refcount if we support metaecc. */ 5872 if (ocfs2_meta_ecc(OCFS2_SB(inode->i_sb))) 5873 p = &refcount; 5874 5875 mlog(0, "refcount bucket %llu, count = %u\n", 5876 (unsigned long long)bucket_blkno(bucket), 5877 le16_to_cpu(xh->xh_count)); 5878 for (i = 0; i < le16_to_cpu(xh->xh_count); i++) { 5879 xe = &xh->xh_entries[i]; 5880 5881 if (ocfs2_xattr_is_local(xe)) 5882 continue; 5883 5884 ret = ocfs2_get_xattr_tree_value_root(inode->i_sb, bucket, i, 5885 &vb.vb_xv, &vb.vb_bh); 5886 if (ret) { 5887 mlog_errno(ret); 5888 break; 5889 } 5890 5891 ocfs2_init_xattr_value_extent_tree(&et, 5892 INODE_CACHE(inode), &vb); 5893 5894 ret = ocfs2_xattr_value_attach_refcount(inode, vb.vb_xv, 5895 &et, ref->ref_ci, 5896 ref->ref_root_bh, 5897 ref->dealloc, p); 5898 if (ret) { 5899 mlog_errno(ret); 5900 break; 5901 } 5902 } 5903 5904 return ret; 5905 5906 } 5907 5908 static int ocfs2_refcount_xattr_tree_rec(struct inode *inode, 5909 struct buffer_head *root_bh, 5910 u64 blkno, u32 cpos, u32 len, void *para) 5911 { 5912 return ocfs2_iterate_xattr_buckets(inode, blkno, len, 5913 ocfs2_xattr_bucket_value_refcount, 5914 para); 5915 } 5916 5917 static int ocfs2_xattr_block_attach_refcount(struct inode *inode, 5918 struct buffer_head *blk_bh, 5919 struct ocfs2_caching_info *ref_ci, 5920 struct buffer_head *ref_root_bh, 5921 struct ocfs2_cached_dealloc_ctxt *dealloc) 5922 { 5923 int ret = 0; 5924 struct ocfs2_xattr_block *xb = 5925 (struct ocfs2_xattr_block *)blk_bh->b_data; 5926 5927 if (!(le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED)) { 5928 struct ocfs2_xattr_header *header = &xb->xb_attrs.xb_header; 5929 struct ocfs2_xattr_value_buf vb = { 5930 .vb_bh = blk_bh, 5931 .vb_access = ocfs2_journal_access_xb, 5932 }; 5933 5934 ret = ocfs2_xattr_attach_refcount_normal(inode, &vb, header, 5935 ref_ci, ref_root_bh, 5936 dealloc); 5937 } else { 5938 struct ocfs2_xattr_tree_value_refcount_para para = { 5939 .ref_ci = ref_ci, 5940 .ref_root_bh = ref_root_bh, 5941 .dealloc = dealloc, 5942 }; 5943 5944 ret = ocfs2_iterate_xattr_index_block(inode, blk_bh, 5945 ocfs2_refcount_xattr_tree_rec, 5946 ¶); 5947 } 5948 5949 return ret; 5950 } 5951 5952 int ocfs2_xattr_attach_refcount_tree(struct inode *inode, 5953 struct buffer_head *fe_bh, 5954 struct ocfs2_caching_info *ref_ci, 5955 struct buffer_head *ref_root_bh, 5956 struct ocfs2_cached_dealloc_ctxt *dealloc) 5957 { 5958 int ret = 0; 5959 struct ocfs2_inode_info *oi = OCFS2_I(inode); 5960 struct ocfs2_dinode *di = (struct ocfs2_dinode *)fe_bh->b_data; 5961 struct buffer_head *blk_bh = NULL; 5962 5963 if (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL) { 5964 ret = ocfs2_xattr_inline_attach_refcount(inode, fe_bh, 5965 ref_ci, ref_root_bh, 5966 dealloc); 5967 if (ret) { 5968 mlog_errno(ret); 5969 goto out; 5970 } 5971 } 5972 5973 if (!di->i_xattr_loc) 5974 goto out; 5975 5976 ret = ocfs2_read_xattr_block(inode, le64_to_cpu(di->i_xattr_loc), 5977 &blk_bh); 5978 if (ret < 0) { 5979 mlog_errno(ret); 5980 goto out; 5981 } 5982 5983 ret = ocfs2_xattr_block_attach_refcount(inode, blk_bh, ref_ci, 5984 ref_root_bh, dealloc); 5985 if (ret) 5986 mlog_errno(ret); 5987 5988 brelse(blk_bh); 5989 out: 5990 5991 return ret; 5992 } 5993 5994 typedef int (should_xattr_reflinked)(struct ocfs2_xattr_entry *xe); 5995 /* 5996 * Store the information we need in xattr reflink. 5997 * old_bh and new_bh are inode bh for the old and new inode. 5998 */ 5999 struct ocfs2_xattr_reflink { 6000 struct inode *old_inode; 6001 struct inode *new_inode; 6002 struct buffer_head *old_bh; 6003 struct buffer_head *new_bh; 6004 struct ocfs2_caching_info *ref_ci; 6005 struct buffer_head *ref_root_bh; 6006 struct ocfs2_cached_dealloc_ctxt *dealloc; 6007 should_xattr_reflinked *xattr_reflinked; 6008 }; 6009 6010 /* 6011 * Given a xattr header and xe offset, 6012 * return the proper xv and the corresponding bh. 6013 * xattr in inode, block and xattr tree have different implementaions. 6014 */ 6015 typedef int (get_xattr_value_root)(struct super_block *sb, 6016 struct buffer_head *bh, 6017 struct ocfs2_xattr_header *xh, 6018 int offset, 6019 struct ocfs2_xattr_value_root **xv, 6020 struct buffer_head **ret_bh, 6021 void *para); 6022 6023 /* 6024 * Calculate all the xattr value root metadata stored in this xattr header and 6025 * credits we need if we create them from the scratch. 6026 * We use get_xattr_value_root so that all types of xattr container can use it. 6027 */ 6028 static int ocfs2_value_metas_in_xattr_header(struct super_block *sb, 6029 struct buffer_head *bh, 6030 struct ocfs2_xattr_header *xh, 6031 int *metas, int *credits, 6032 int *num_recs, 6033 get_xattr_value_root *func, 6034 void *para) 6035 { 6036 int i, ret = 0; 6037 struct ocfs2_xattr_value_root *xv; 6038 struct ocfs2_xattr_entry *xe; 6039 6040 for (i = 0; i < le16_to_cpu(xh->xh_count); i++) { 6041 xe = &xh->xh_entries[i]; 6042 if (ocfs2_xattr_is_local(xe)) 6043 continue; 6044 6045 ret = func(sb, bh, xh, i, &xv, NULL, para); 6046 if (ret) { 6047 mlog_errno(ret); 6048 break; 6049 } 6050 6051 *metas += le16_to_cpu(xv->xr_list.l_tree_depth) * 6052 le16_to_cpu(xv->xr_list.l_next_free_rec); 6053 6054 *credits += ocfs2_calc_extend_credits(sb, 6055 &def_xv.xv.xr_list, 6056 le32_to_cpu(xv->xr_clusters)); 6057 6058 /* 6059 * If the value is a tree with depth > 1, We don't go deep 6060 * to the extent block, so just calculate a maximum record num. 6061 */ 6062 if (!xv->xr_list.l_tree_depth) 6063 *num_recs += le16_to_cpu(xv->xr_list.l_next_free_rec); 6064 else 6065 *num_recs += ocfs2_clusters_for_bytes(sb, 6066 XATTR_SIZE_MAX); 6067 } 6068 6069 return ret; 6070 } 6071 6072 /* Used by xattr inode and block to return the right xv and buffer_head. */ 6073 static int ocfs2_get_xattr_value_root(struct super_block *sb, 6074 struct buffer_head *bh, 6075 struct ocfs2_xattr_header *xh, 6076 int offset, 6077 struct ocfs2_xattr_value_root **xv, 6078 struct buffer_head **ret_bh, 6079 void *para) 6080 { 6081 struct ocfs2_xattr_entry *xe = &xh->xh_entries[offset]; 6082 6083 *xv = (struct ocfs2_xattr_value_root *)((void *)xh + 6084 le16_to_cpu(xe->xe_name_offset) + 6085 OCFS2_XATTR_SIZE(xe->xe_name_len)); 6086 6087 if (ret_bh) 6088 *ret_bh = bh; 6089 6090 return 0; 6091 } 6092 6093 /* 6094 * Lock the meta_ac and caculate how much credits we need for reflink xattrs. 6095 * It is only used for inline xattr and xattr block. 6096 */ 6097 static int ocfs2_reflink_lock_xattr_allocators(struct ocfs2_super *osb, 6098 struct ocfs2_xattr_header *xh, 6099 struct buffer_head *ref_root_bh, 6100 int *credits, 6101 struct ocfs2_alloc_context **meta_ac) 6102 { 6103 int ret, meta_add = 0, num_recs = 0; 6104 struct ocfs2_refcount_block *rb = 6105 (struct ocfs2_refcount_block *)ref_root_bh->b_data; 6106 6107 *credits = 0; 6108 6109 ret = ocfs2_value_metas_in_xattr_header(osb->sb, NULL, xh, 6110 &meta_add, credits, &num_recs, 6111 ocfs2_get_xattr_value_root, 6112 NULL); 6113 if (ret) { 6114 mlog_errno(ret); 6115 goto out; 6116 } 6117 6118 /* 6119 * We need to add/modify num_recs in refcount tree, so just calculate 6120 * an approximate number we need for refcount tree change. 6121 * Sometimes we need to split the tree, and after split, half recs 6122 * will be moved to the new block, and a new block can only provide 6123 * half number of recs. So we multiple new blocks by 2. 6124 */ 6125 num_recs = num_recs / ocfs2_refcount_recs_per_rb(osb->sb) * 2; 6126 meta_add += num_recs; 6127 *credits += num_recs + num_recs * OCFS2_EXPAND_REFCOUNT_TREE_CREDITS; 6128 if (le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL) 6129 *credits += le16_to_cpu(rb->rf_list.l_tree_depth) * 6130 le16_to_cpu(rb->rf_list.l_next_free_rec) + 1; 6131 else 6132 *credits += 1; 6133 6134 ret = ocfs2_reserve_new_metadata_blocks(osb, meta_add, meta_ac); 6135 if (ret) 6136 mlog_errno(ret); 6137 6138 out: 6139 return ret; 6140 } 6141 6142 /* 6143 * Given a xattr header, reflink all the xattrs in this container. 6144 * It can be used for inode, block and bucket. 6145 * 6146 * NOTE: 6147 * Before we call this function, the caller has memcpy the xattr in 6148 * old_xh to the new_xh. 6149 * 6150 * If args.xattr_reflinked is set, call it to decide whether the xe should 6151 * be reflinked or not. If not, remove it from the new xattr header. 6152 */ 6153 static int ocfs2_reflink_xattr_header(handle_t *handle, 6154 struct ocfs2_xattr_reflink *args, 6155 struct buffer_head *old_bh, 6156 struct ocfs2_xattr_header *xh, 6157 struct buffer_head *new_bh, 6158 struct ocfs2_xattr_header *new_xh, 6159 struct ocfs2_xattr_value_buf *vb, 6160 struct ocfs2_alloc_context *meta_ac, 6161 get_xattr_value_root *func, 6162 void *para) 6163 { 6164 int ret = 0, i, j; 6165 struct super_block *sb = args->old_inode->i_sb; 6166 struct buffer_head *value_bh; 6167 struct ocfs2_xattr_entry *xe, *last; 6168 struct ocfs2_xattr_value_root *xv, *new_xv; 6169 struct ocfs2_extent_tree data_et; 6170 u32 clusters, cpos, p_cluster, num_clusters; 6171 unsigned int ext_flags = 0; 6172 6173 mlog(0, "reflink xattr in container %llu, count = %u\n", 6174 (unsigned long long)old_bh->b_blocknr, le16_to_cpu(xh->xh_count)); 6175 6176 last = &new_xh->xh_entries[le16_to_cpu(new_xh->xh_count)]; 6177 for (i = 0, j = 0; i < le16_to_cpu(xh->xh_count); i++, j++) { 6178 xe = &xh->xh_entries[i]; 6179 6180 if (args->xattr_reflinked && !args->xattr_reflinked(xe)) { 6181 xe = &new_xh->xh_entries[j]; 6182 6183 le16_add_cpu(&new_xh->xh_count, -1); 6184 if (new_xh->xh_count) { 6185 memmove(xe, xe + 1, 6186 (void *)last - (void *)xe); 6187 memset(last, 0, 6188 sizeof(struct ocfs2_xattr_entry)); 6189 } 6190 6191 /* 6192 * We don't want j to increase in the next round since 6193 * it is already moved ahead. 6194 */ 6195 j--; 6196 continue; 6197 } 6198 6199 if (ocfs2_xattr_is_local(xe)) 6200 continue; 6201 6202 ret = func(sb, old_bh, xh, i, &xv, NULL, para); 6203 if (ret) { 6204 mlog_errno(ret); 6205 break; 6206 } 6207 6208 ret = func(sb, new_bh, new_xh, j, &new_xv, &value_bh, para); 6209 if (ret) { 6210 mlog_errno(ret); 6211 break; 6212 } 6213 6214 /* 6215 * For the xattr which has l_tree_depth = 0, all the extent 6216 * recs have already be copied to the new xh with the 6217 * propriate OCFS2_EXT_REFCOUNTED flag we just need to 6218 * increase the refount count int the refcount tree. 6219 * 6220 * For the xattr which has l_tree_depth > 0, we need 6221 * to initialize it to the empty default value root, 6222 * and then insert the extents one by one. 6223 */ 6224 if (xv->xr_list.l_tree_depth) { 6225 memcpy(new_xv, &def_xv, sizeof(def_xv)); 6226 vb->vb_xv = new_xv; 6227 vb->vb_bh = value_bh; 6228 ocfs2_init_xattr_value_extent_tree(&data_et, 6229 INODE_CACHE(args->new_inode), vb); 6230 } 6231 6232 clusters = le32_to_cpu(xv->xr_clusters); 6233 cpos = 0; 6234 while (cpos < clusters) { 6235 ret = ocfs2_xattr_get_clusters(args->old_inode, 6236 cpos, 6237 &p_cluster, 6238 &num_clusters, 6239 &xv->xr_list, 6240 &ext_flags); 6241 if (ret) { 6242 mlog_errno(ret); 6243 goto out; 6244 } 6245 6246 BUG_ON(!p_cluster); 6247 6248 if (xv->xr_list.l_tree_depth) { 6249 ret = ocfs2_insert_extent(handle, 6250 &data_et, cpos, 6251 ocfs2_clusters_to_blocks( 6252 args->old_inode->i_sb, 6253 p_cluster), 6254 num_clusters, ext_flags, 6255 meta_ac); 6256 if (ret) { 6257 mlog_errno(ret); 6258 goto out; 6259 } 6260 } 6261 6262 ret = ocfs2_increase_refcount(handle, args->ref_ci, 6263 args->ref_root_bh, 6264 p_cluster, num_clusters, 6265 meta_ac, args->dealloc); 6266 if (ret) { 6267 mlog_errno(ret); 6268 goto out; 6269 } 6270 6271 cpos += num_clusters; 6272 } 6273 } 6274 6275 out: 6276 return ret; 6277 } 6278 6279 static int ocfs2_reflink_xattr_inline(struct ocfs2_xattr_reflink *args) 6280 { 6281 int ret = 0, credits = 0; 6282 handle_t *handle; 6283 struct ocfs2_super *osb = OCFS2_SB(args->old_inode->i_sb); 6284 struct ocfs2_dinode *di = (struct ocfs2_dinode *)args->old_bh->b_data; 6285 int inline_size = le16_to_cpu(di->i_xattr_inline_size); 6286 int header_off = osb->sb->s_blocksize - inline_size; 6287 struct ocfs2_xattr_header *xh = (struct ocfs2_xattr_header *) 6288 (args->old_bh->b_data + header_off); 6289 struct ocfs2_xattr_header *new_xh = (struct ocfs2_xattr_header *) 6290 (args->new_bh->b_data + header_off); 6291 struct ocfs2_alloc_context *meta_ac = NULL; 6292 struct ocfs2_inode_info *new_oi; 6293 struct ocfs2_dinode *new_di; 6294 struct ocfs2_xattr_value_buf vb = { 6295 .vb_bh = args->new_bh, 6296 .vb_access = ocfs2_journal_access_di, 6297 }; 6298 6299 ret = ocfs2_reflink_lock_xattr_allocators(osb, xh, args->ref_root_bh, 6300 &credits, &meta_ac); 6301 if (ret) { 6302 mlog_errno(ret); 6303 goto out; 6304 } 6305 6306 handle = ocfs2_start_trans(osb, credits); 6307 if (IS_ERR(handle)) { 6308 ret = PTR_ERR(handle); 6309 mlog_errno(ret); 6310 goto out; 6311 } 6312 6313 ret = ocfs2_journal_access_di(handle, INODE_CACHE(args->new_inode), 6314 args->new_bh, OCFS2_JOURNAL_ACCESS_WRITE); 6315 if (ret) { 6316 mlog_errno(ret); 6317 goto out_commit; 6318 } 6319 6320 memcpy(args->new_bh->b_data + header_off, 6321 args->old_bh->b_data + header_off, inline_size); 6322 6323 new_di = (struct ocfs2_dinode *)args->new_bh->b_data; 6324 new_di->i_xattr_inline_size = cpu_to_le16(inline_size); 6325 6326 ret = ocfs2_reflink_xattr_header(handle, args, args->old_bh, xh, 6327 args->new_bh, new_xh, &vb, meta_ac, 6328 ocfs2_get_xattr_value_root, NULL); 6329 if (ret) { 6330 mlog_errno(ret); 6331 goto out_commit; 6332 } 6333 6334 new_oi = OCFS2_I(args->new_inode); 6335 spin_lock(&new_oi->ip_lock); 6336 new_oi->ip_dyn_features |= OCFS2_HAS_XATTR_FL | OCFS2_INLINE_XATTR_FL; 6337 new_di->i_dyn_features = cpu_to_le16(new_oi->ip_dyn_features); 6338 spin_unlock(&new_oi->ip_lock); 6339 6340 ocfs2_journal_dirty(handle, args->new_bh); 6341 6342 out_commit: 6343 ocfs2_commit_trans(osb, handle); 6344 6345 out: 6346 if (meta_ac) 6347 ocfs2_free_alloc_context(meta_ac); 6348 return ret; 6349 } 6350 6351 static int ocfs2_create_empty_xattr_block(struct inode *inode, 6352 struct buffer_head *fe_bh, 6353 struct buffer_head **ret_bh, 6354 int indexed) 6355 { 6356 int ret; 6357 handle_t *handle; 6358 struct ocfs2_alloc_context *meta_ac; 6359 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 6360 6361 ret = ocfs2_reserve_new_metadata_blocks(osb, 1, &meta_ac); 6362 if (ret < 0) { 6363 mlog_errno(ret); 6364 return ret; 6365 } 6366 6367 handle = ocfs2_start_trans(osb, OCFS2_XATTR_BLOCK_CREATE_CREDITS); 6368 if (IS_ERR(handle)) { 6369 ret = PTR_ERR(handle); 6370 mlog_errno(ret); 6371 goto out; 6372 } 6373 6374 mlog(0, "create new xattr block for inode %llu, index = %d\n", 6375 (unsigned long long)fe_bh->b_blocknr, indexed); 6376 ret = ocfs2_create_xattr_block(handle, inode, fe_bh, 6377 meta_ac, ret_bh, indexed); 6378 if (ret) 6379 mlog_errno(ret); 6380 6381 ocfs2_commit_trans(osb, handle); 6382 out: 6383 ocfs2_free_alloc_context(meta_ac); 6384 return ret; 6385 } 6386 6387 static int ocfs2_reflink_xattr_block(struct ocfs2_xattr_reflink *args, 6388 struct buffer_head *blk_bh, 6389 struct buffer_head *new_blk_bh) 6390 { 6391 int ret = 0, credits = 0; 6392 handle_t *handle; 6393 struct ocfs2_inode_info *new_oi = OCFS2_I(args->new_inode); 6394 struct ocfs2_dinode *new_di; 6395 struct ocfs2_super *osb = OCFS2_SB(args->new_inode->i_sb); 6396 int header_off = offsetof(struct ocfs2_xattr_block, xb_attrs.xb_header); 6397 struct ocfs2_xattr_block *xb = 6398 (struct ocfs2_xattr_block *)blk_bh->b_data; 6399 struct ocfs2_xattr_header *xh = &xb->xb_attrs.xb_header; 6400 struct ocfs2_xattr_block *new_xb = 6401 (struct ocfs2_xattr_block *)new_blk_bh->b_data; 6402 struct ocfs2_xattr_header *new_xh = &new_xb->xb_attrs.xb_header; 6403 struct ocfs2_alloc_context *meta_ac; 6404 struct ocfs2_xattr_value_buf vb = { 6405 .vb_bh = new_blk_bh, 6406 .vb_access = ocfs2_journal_access_xb, 6407 }; 6408 6409 ret = ocfs2_reflink_lock_xattr_allocators(osb, xh, args->ref_root_bh, 6410 &credits, &meta_ac); 6411 if (ret) { 6412 mlog_errno(ret); 6413 return ret; 6414 } 6415 6416 /* One more credits in case we need to add xattr flags in new inode. */ 6417 handle = ocfs2_start_trans(osb, credits + 1); 6418 if (IS_ERR(handle)) { 6419 ret = PTR_ERR(handle); 6420 mlog_errno(ret); 6421 goto out; 6422 } 6423 6424 if (!(new_oi->ip_dyn_features & OCFS2_HAS_XATTR_FL)) { 6425 ret = ocfs2_journal_access_di(handle, 6426 INODE_CACHE(args->new_inode), 6427 args->new_bh, 6428 OCFS2_JOURNAL_ACCESS_WRITE); 6429 if (ret) { 6430 mlog_errno(ret); 6431 goto out_commit; 6432 } 6433 } 6434 6435 ret = ocfs2_journal_access_xb(handle, INODE_CACHE(args->new_inode), 6436 new_blk_bh, OCFS2_JOURNAL_ACCESS_WRITE); 6437 if (ret) { 6438 mlog_errno(ret); 6439 goto out_commit; 6440 } 6441 6442 memcpy(new_blk_bh->b_data + header_off, blk_bh->b_data + header_off, 6443 osb->sb->s_blocksize - header_off); 6444 6445 ret = ocfs2_reflink_xattr_header(handle, args, blk_bh, xh, 6446 new_blk_bh, new_xh, &vb, meta_ac, 6447 ocfs2_get_xattr_value_root, NULL); 6448 if (ret) { 6449 mlog_errno(ret); 6450 goto out_commit; 6451 } 6452 6453 ocfs2_journal_dirty(handle, new_blk_bh); 6454 6455 if (!(new_oi->ip_dyn_features & OCFS2_HAS_XATTR_FL)) { 6456 new_di = (struct ocfs2_dinode *)args->new_bh->b_data; 6457 spin_lock(&new_oi->ip_lock); 6458 new_oi->ip_dyn_features |= OCFS2_HAS_XATTR_FL; 6459 new_di->i_dyn_features = cpu_to_le16(new_oi->ip_dyn_features); 6460 spin_unlock(&new_oi->ip_lock); 6461 6462 ocfs2_journal_dirty(handle, args->new_bh); 6463 } 6464 6465 out_commit: 6466 ocfs2_commit_trans(osb, handle); 6467 6468 out: 6469 ocfs2_free_alloc_context(meta_ac); 6470 return ret; 6471 } 6472 6473 struct ocfs2_reflink_xattr_tree_args { 6474 struct ocfs2_xattr_reflink *reflink; 6475 struct buffer_head *old_blk_bh; 6476 struct buffer_head *new_blk_bh; 6477 struct ocfs2_xattr_bucket *old_bucket; 6478 struct ocfs2_xattr_bucket *new_bucket; 6479 }; 6480 6481 /* 6482 * NOTE: 6483 * We have to handle the case that both old bucket and new bucket 6484 * will call this function to get the right ret_bh. 6485 * So The caller must give us the right bh. 6486 */ 6487 static int ocfs2_get_reflink_xattr_value_root(struct super_block *sb, 6488 struct buffer_head *bh, 6489 struct ocfs2_xattr_header *xh, 6490 int offset, 6491 struct ocfs2_xattr_value_root **xv, 6492 struct buffer_head **ret_bh, 6493 void *para) 6494 { 6495 struct ocfs2_reflink_xattr_tree_args *args = 6496 (struct ocfs2_reflink_xattr_tree_args *)para; 6497 struct ocfs2_xattr_bucket *bucket; 6498 6499 if (bh == args->old_bucket->bu_bhs[0]) 6500 bucket = args->old_bucket; 6501 else 6502 bucket = args->new_bucket; 6503 6504 return ocfs2_get_xattr_tree_value_root(sb, bucket, offset, 6505 xv, ret_bh); 6506 } 6507 6508 struct ocfs2_value_tree_metas { 6509 int num_metas; 6510 int credits; 6511 int num_recs; 6512 }; 6513 6514 static int ocfs2_value_tree_metas_in_bucket(struct super_block *sb, 6515 struct buffer_head *bh, 6516 struct ocfs2_xattr_header *xh, 6517 int offset, 6518 struct ocfs2_xattr_value_root **xv, 6519 struct buffer_head **ret_bh, 6520 void *para) 6521 { 6522 struct ocfs2_xattr_bucket *bucket = 6523 (struct ocfs2_xattr_bucket *)para; 6524 6525 return ocfs2_get_xattr_tree_value_root(sb, bucket, offset, 6526 xv, ret_bh); 6527 } 6528 6529 static int ocfs2_calc_value_tree_metas(struct inode *inode, 6530 struct ocfs2_xattr_bucket *bucket, 6531 void *para) 6532 { 6533 struct ocfs2_value_tree_metas *metas = 6534 (struct ocfs2_value_tree_metas *)para; 6535 struct ocfs2_xattr_header *xh = 6536 (struct ocfs2_xattr_header *)bucket->bu_bhs[0]->b_data; 6537 6538 /* Add the credits for this bucket first. */ 6539 metas->credits += bucket->bu_blocks; 6540 return ocfs2_value_metas_in_xattr_header(inode->i_sb, bucket->bu_bhs[0], 6541 xh, &metas->num_metas, 6542 &metas->credits, &metas->num_recs, 6543 ocfs2_value_tree_metas_in_bucket, 6544 bucket); 6545 } 6546 6547 /* 6548 * Given a xattr extent rec starting from blkno and having len clusters, 6549 * iterate all the buckets calculate how much metadata we need for reflinking 6550 * all the ocfs2_xattr_value_root and lock the allocators accordingly. 6551 */ 6552 static int ocfs2_lock_reflink_xattr_rec_allocators( 6553 struct ocfs2_reflink_xattr_tree_args *args, 6554 struct ocfs2_extent_tree *xt_et, 6555 u64 blkno, u32 len, int *credits, 6556 struct ocfs2_alloc_context **meta_ac, 6557 struct ocfs2_alloc_context **data_ac) 6558 { 6559 int ret, num_free_extents; 6560 struct ocfs2_value_tree_metas metas; 6561 struct ocfs2_super *osb = OCFS2_SB(args->reflink->old_inode->i_sb); 6562 struct ocfs2_refcount_block *rb; 6563 6564 memset(&metas, 0, sizeof(metas)); 6565 6566 ret = ocfs2_iterate_xattr_buckets(args->reflink->old_inode, blkno, len, 6567 ocfs2_calc_value_tree_metas, &metas); 6568 if (ret) { 6569 mlog_errno(ret); 6570 goto out; 6571 } 6572 6573 *credits = metas.credits; 6574 6575 /* 6576 * Calculate we need for refcount tree change. 6577 * 6578 * We need to add/modify num_recs in refcount tree, so just calculate 6579 * an approximate number we need for refcount tree change. 6580 * Sometimes we need to split the tree, and after split, half recs 6581 * will be moved to the new block, and a new block can only provide 6582 * half number of recs. So we multiple new blocks by 2. 6583 * In the end, we have to add credits for modifying the already 6584 * existed refcount block. 6585 */ 6586 rb = (struct ocfs2_refcount_block *)args->reflink->ref_root_bh->b_data; 6587 metas.num_recs = 6588 (metas.num_recs + ocfs2_refcount_recs_per_rb(osb->sb) - 1) / 6589 ocfs2_refcount_recs_per_rb(osb->sb) * 2; 6590 metas.num_metas += metas.num_recs; 6591 *credits += metas.num_recs + 6592 metas.num_recs * OCFS2_EXPAND_REFCOUNT_TREE_CREDITS; 6593 if (le32_to_cpu(rb->rf_flags) & OCFS2_REFCOUNT_TREE_FL) 6594 *credits += le16_to_cpu(rb->rf_list.l_tree_depth) * 6595 le16_to_cpu(rb->rf_list.l_next_free_rec) + 1; 6596 else 6597 *credits += 1; 6598 6599 /* count in the xattr tree change. */ 6600 num_free_extents = ocfs2_num_free_extents(osb, xt_et); 6601 if (num_free_extents < 0) { 6602 ret = num_free_extents; 6603 mlog_errno(ret); 6604 goto out; 6605 } 6606 6607 if (num_free_extents < len) 6608 metas.num_metas += ocfs2_extend_meta_needed(xt_et->et_root_el); 6609 6610 *credits += ocfs2_calc_extend_credits(osb->sb, 6611 xt_et->et_root_el, len); 6612 6613 if (metas.num_metas) { 6614 ret = ocfs2_reserve_new_metadata_blocks(osb, metas.num_metas, 6615 meta_ac); 6616 if (ret) { 6617 mlog_errno(ret); 6618 goto out; 6619 } 6620 } 6621 6622 if (len) { 6623 ret = ocfs2_reserve_clusters(osb, len, data_ac); 6624 if (ret) 6625 mlog_errno(ret); 6626 } 6627 out: 6628 if (ret) { 6629 if (*meta_ac) { 6630 ocfs2_free_alloc_context(*meta_ac); 6631 meta_ac = NULL; 6632 } 6633 } 6634 6635 return ret; 6636 } 6637 6638 static int ocfs2_reflink_xattr_buckets(handle_t *handle, 6639 u64 blkno, u64 new_blkno, u32 clusters, 6640 struct ocfs2_alloc_context *meta_ac, 6641 struct ocfs2_alloc_context *data_ac, 6642 struct ocfs2_reflink_xattr_tree_args *args) 6643 { 6644 int i, j, ret = 0; 6645 struct super_block *sb = args->reflink->old_inode->i_sb; 6646 u32 bpc = ocfs2_xattr_buckets_per_cluster(OCFS2_SB(sb)); 6647 u32 num_buckets = clusters * bpc; 6648 int bpb = args->old_bucket->bu_blocks; 6649 struct ocfs2_xattr_value_buf vb = { 6650 .vb_access = ocfs2_journal_access, 6651 }; 6652 6653 for (i = 0; i < num_buckets; i++, blkno += bpb, new_blkno += bpb) { 6654 ret = ocfs2_read_xattr_bucket(args->old_bucket, blkno); 6655 if (ret) { 6656 mlog_errno(ret); 6657 break; 6658 } 6659 6660 ret = ocfs2_init_xattr_bucket(args->new_bucket, new_blkno); 6661 if (ret) { 6662 mlog_errno(ret); 6663 break; 6664 } 6665 6666 /* 6667 * The real bucket num in this series of blocks is stored 6668 * in the 1st bucket. 6669 */ 6670 if (i == 0) 6671 num_buckets = le16_to_cpu( 6672 bucket_xh(args->old_bucket)->xh_num_buckets); 6673 6674 ret = ocfs2_xattr_bucket_journal_access(handle, 6675 args->new_bucket, 6676 OCFS2_JOURNAL_ACCESS_CREATE); 6677 if (ret) { 6678 mlog_errno(ret); 6679 break; 6680 } 6681 6682 for (j = 0; j < bpb; j++) 6683 memcpy(bucket_block(args->new_bucket, j), 6684 bucket_block(args->old_bucket, j), 6685 sb->s_blocksize); 6686 6687 ocfs2_xattr_bucket_journal_dirty(handle, args->new_bucket); 6688 6689 ret = ocfs2_reflink_xattr_header(handle, args->reflink, 6690 args->old_bucket->bu_bhs[0], 6691 bucket_xh(args->old_bucket), 6692 args->new_bucket->bu_bhs[0], 6693 bucket_xh(args->new_bucket), 6694 &vb, meta_ac, 6695 ocfs2_get_reflink_xattr_value_root, 6696 args); 6697 if (ret) { 6698 mlog_errno(ret); 6699 break; 6700 } 6701 6702 /* 6703 * Re-access and dirty the bucket to calculate metaecc. 6704 * Because we may extend the transaction in reflink_xattr_header 6705 * which will let the already accessed block gone. 6706 */ 6707 ret = ocfs2_xattr_bucket_journal_access(handle, 6708 args->new_bucket, 6709 OCFS2_JOURNAL_ACCESS_WRITE); 6710 if (ret) { 6711 mlog_errno(ret); 6712 break; 6713 } 6714 6715 ocfs2_xattr_bucket_journal_dirty(handle, args->new_bucket); 6716 ocfs2_xattr_bucket_relse(args->old_bucket); 6717 ocfs2_xattr_bucket_relse(args->new_bucket); 6718 } 6719 6720 ocfs2_xattr_bucket_relse(args->old_bucket); 6721 ocfs2_xattr_bucket_relse(args->new_bucket); 6722 return ret; 6723 } 6724 /* 6725 * Create the same xattr extent record in the new inode's xattr tree. 6726 */ 6727 static int ocfs2_reflink_xattr_rec(struct inode *inode, 6728 struct buffer_head *root_bh, 6729 u64 blkno, 6730 u32 cpos, 6731 u32 len, 6732 void *para) 6733 { 6734 int ret, credits = 0; 6735 u32 p_cluster, num_clusters; 6736 u64 new_blkno; 6737 handle_t *handle; 6738 struct ocfs2_reflink_xattr_tree_args *args = 6739 (struct ocfs2_reflink_xattr_tree_args *)para; 6740 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 6741 struct ocfs2_alloc_context *meta_ac = NULL; 6742 struct ocfs2_alloc_context *data_ac = NULL; 6743 struct ocfs2_extent_tree et; 6744 6745 ocfs2_init_xattr_tree_extent_tree(&et, 6746 INODE_CACHE(args->reflink->new_inode), 6747 args->new_blk_bh); 6748 6749 ret = ocfs2_lock_reflink_xattr_rec_allocators(args, &et, blkno, 6750 len, &credits, 6751 &meta_ac, &data_ac); 6752 if (ret) { 6753 mlog_errno(ret); 6754 goto out; 6755 } 6756 6757 handle = ocfs2_start_trans(osb, credits); 6758 if (IS_ERR(handle)) { 6759 ret = PTR_ERR(handle); 6760 mlog_errno(ret); 6761 goto out; 6762 } 6763 6764 ret = ocfs2_claim_clusters(osb, handle, data_ac, 6765 len, &p_cluster, &num_clusters); 6766 if (ret) { 6767 mlog_errno(ret); 6768 goto out_commit; 6769 } 6770 6771 new_blkno = ocfs2_clusters_to_blocks(osb->sb, p_cluster); 6772 6773 mlog(0, "reflink xattr buckets %llu to %llu, len %u\n", 6774 (unsigned long long)blkno, (unsigned long long)new_blkno, len); 6775 ret = ocfs2_reflink_xattr_buckets(handle, blkno, new_blkno, len, 6776 meta_ac, data_ac, args); 6777 if (ret) { 6778 mlog_errno(ret); 6779 goto out_commit; 6780 } 6781 6782 mlog(0, "insert new xattr extent rec start %llu len %u to %u\n", 6783 (unsigned long long)new_blkno, len, cpos); 6784 ret = ocfs2_insert_extent(handle, &et, cpos, new_blkno, 6785 len, 0, meta_ac); 6786 if (ret) 6787 mlog_errno(ret); 6788 6789 out_commit: 6790 ocfs2_commit_trans(osb, handle); 6791 6792 out: 6793 if (meta_ac) 6794 ocfs2_free_alloc_context(meta_ac); 6795 if (data_ac) 6796 ocfs2_free_alloc_context(data_ac); 6797 return ret; 6798 } 6799 6800 /* 6801 * Create reflinked xattr buckets. 6802 * We will add bucket one by one, and refcount all the xattrs in the bucket 6803 * if they are stored outside. 6804 */ 6805 static int ocfs2_reflink_xattr_tree(struct ocfs2_xattr_reflink *args, 6806 struct buffer_head *blk_bh, 6807 struct buffer_head *new_blk_bh) 6808 { 6809 int ret; 6810 struct ocfs2_reflink_xattr_tree_args para; 6811 6812 memset(¶, 0, sizeof(para)); 6813 para.reflink = args; 6814 para.old_blk_bh = blk_bh; 6815 para.new_blk_bh = new_blk_bh; 6816 6817 para.old_bucket = ocfs2_xattr_bucket_new(args->old_inode); 6818 if (!para.old_bucket) { 6819 mlog_errno(-ENOMEM); 6820 return -ENOMEM; 6821 } 6822 6823 para.new_bucket = ocfs2_xattr_bucket_new(args->new_inode); 6824 if (!para.new_bucket) { 6825 ret = -ENOMEM; 6826 mlog_errno(ret); 6827 goto out; 6828 } 6829 6830 ret = ocfs2_iterate_xattr_index_block(args->old_inode, blk_bh, 6831 ocfs2_reflink_xattr_rec, 6832 ¶); 6833 if (ret) 6834 mlog_errno(ret); 6835 6836 out: 6837 ocfs2_xattr_bucket_free(para.old_bucket); 6838 ocfs2_xattr_bucket_free(para.new_bucket); 6839 return ret; 6840 } 6841 6842 static int ocfs2_reflink_xattr_in_block(struct ocfs2_xattr_reflink *args, 6843 struct buffer_head *blk_bh) 6844 { 6845 int ret, indexed = 0; 6846 struct buffer_head *new_blk_bh = NULL; 6847 struct ocfs2_xattr_block *xb = 6848 (struct ocfs2_xattr_block *)blk_bh->b_data; 6849 6850 6851 if (le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED) 6852 indexed = 1; 6853 6854 ret = ocfs2_create_empty_xattr_block(args->new_inode, args->new_bh, 6855 &new_blk_bh, indexed); 6856 if (ret) { 6857 mlog_errno(ret); 6858 goto out; 6859 } 6860 6861 if (!(le16_to_cpu(xb->xb_flags) & OCFS2_XATTR_INDEXED)) 6862 ret = ocfs2_reflink_xattr_block(args, blk_bh, new_blk_bh); 6863 else 6864 ret = ocfs2_reflink_xattr_tree(args, blk_bh, new_blk_bh); 6865 if (ret) 6866 mlog_errno(ret); 6867 6868 out: 6869 brelse(new_blk_bh); 6870 return ret; 6871 } 6872 6873 static int ocfs2_reflink_xattr_no_security(struct ocfs2_xattr_entry *xe) 6874 { 6875 int type = ocfs2_xattr_get_type(xe); 6876 6877 return type != OCFS2_XATTR_INDEX_SECURITY && 6878 type != OCFS2_XATTR_INDEX_POSIX_ACL_ACCESS && 6879 type != OCFS2_XATTR_INDEX_POSIX_ACL_DEFAULT; 6880 } 6881 6882 int ocfs2_reflink_xattrs(struct inode *old_inode, 6883 struct buffer_head *old_bh, 6884 struct inode *new_inode, 6885 struct buffer_head *new_bh, 6886 bool preserve_security) 6887 { 6888 int ret; 6889 struct ocfs2_xattr_reflink args; 6890 struct ocfs2_inode_info *oi = OCFS2_I(old_inode); 6891 struct ocfs2_dinode *di = (struct ocfs2_dinode *)old_bh->b_data; 6892 struct buffer_head *blk_bh = NULL; 6893 struct ocfs2_cached_dealloc_ctxt dealloc; 6894 struct ocfs2_refcount_tree *ref_tree; 6895 struct buffer_head *ref_root_bh = NULL; 6896 6897 ret = ocfs2_lock_refcount_tree(OCFS2_SB(old_inode->i_sb), 6898 le64_to_cpu(di->i_refcount_loc), 6899 1, &ref_tree, &ref_root_bh); 6900 if (ret) { 6901 mlog_errno(ret); 6902 goto out; 6903 } 6904 6905 ocfs2_init_dealloc_ctxt(&dealloc); 6906 6907 args.old_inode = old_inode; 6908 args.new_inode = new_inode; 6909 args.old_bh = old_bh; 6910 args.new_bh = new_bh; 6911 args.ref_ci = &ref_tree->rf_ci; 6912 args.ref_root_bh = ref_root_bh; 6913 args.dealloc = &dealloc; 6914 if (preserve_security) 6915 args.xattr_reflinked = NULL; 6916 else 6917 args.xattr_reflinked = ocfs2_reflink_xattr_no_security; 6918 6919 if (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL) { 6920 ret = ocfs2_reflink_xattr_inline(&args); 6921 if (ret) { 6922 mlog_errno(ret); 6923 goto out_unlock; 6924 } 6925 } 6926 6927 if (!di->i_xattr_loc) 6928 goto out_unlock; 6929 6930 ret = ocfs2_read_xattr_block(old_inode, le64_to_cpu(di->i_xattr_loc), 6931 &blk_bh); 6932 if (ret < 0) { 6933 mlog_errno(ret); 6934 goto out_unlock; 6935 } 6936 6937 ret = ocfs2_reflink_xattr_in_block(&args, blk_bh); 6938 if (ret) 6939 mlog_errno(ret); 6940 6941 brelse(blk_bh); 6942 6943 out_unlock: 6944 ocfs2_unlock_refcount_tree(OCFS2_SB(old_inode->i_sb), 6945 ref_tree, 1); 6946 brelse(ref_root_bh); 6947 6948 if (ocfs2_dealloc_has_cluster(&dealloc)) { 6949 ocfs2_schedule_truncate_log_flush(OCFS2_SB(old_inode->i_sb), 1); 6950 ocfs2_run_deallocs(OCFS2_SB(old_inode->i_sb), &dealloc); 6951 } 6952 6953 out: 6954 return ret; 6955 } 6956 6957 /* 6958 * Initialize security and acl for a already created inode. 6959 * Used for reflink a non-preserve-security file. 6960 * 6961 * It uses common api like ocfs2_xattr_set, so the caller 6962 * must not hold any lock expect i_mutex. 6963 */ 6964 int ocfs2_init_security_and_acl(struct inode *dir, 6965 struct inode *inode) 6966 { 6967 int ret = 0; 6968 struct buffer_head *dir_bh = NULL; 6969 struct ocfs2_security_xattr_info si = { 6970 .enable = 1, 6971 }; 6972 6973 ret = ocfs2_init_security_get(inode, dir, &si); 6974 if (!ret) { 6975 ret = ocfs2_xattr_set(inode, OCFS2_XATTR_INDEX_SECURITY, 6976 si.name, si.value, si.value_len, 6977 XATTR_CREATE); 6978 if (ret) { 6979 mlog_errno(ret); 6980 goto leave; 6981 } 6982 } else if (ret != -EOPNOTSUPP) { 6983 mlog_errno(ret); 6984 goto leave; 6985 } 6986 6987 ret = ocfs2_inode_lock(dir, &dir_bh, 0); 6988 if (ret) { 6989 mlog_errno(ret); 6990 goto leave; 6991 } 6992 6993 ret = ocfs2_init_acl(NULL, inode, dir, NULL, dir_bh, NULL, NULL); 6994 if (ret) 6995 mlog_errno(ret); 6996 6997 ocfs2_inode_unlock(dir, 0); 6998 brelse(dir_bh); 6999 leave: 7000 return ret; 7001 } 7002 /* 7003 * 'security' attributes support 7004 */ 7005 static size_t ocfs2_xattr_security_list(struct dentry *dentry, char *list, 7006 size_t list_size, const char *name, 7007 size_t name_len, int type) 7008 { 7009 const size_t prefix_len = XATTR_SECURITY_PREFIX_LEN; 7010 const size_t total_len = prefix_len + name_len + 1; 7011 7012 if (list && total_len <= list_size) { 7013 memcpy(list, XATTR_SECURITY_PREFIX, prefix_len); 7014 memcpy(list + prefix_len, name, name_len); 7015 list[prefix_len + name_len] = '\0'; 7016 } 7017 return total_len; 7018 } 7019 7020 static int ocfs2_xattr_security_get(struct dentry *dentry, const char *name, 7021 void *buffer, size_t size, int type) 7022 { 7023 if (strcmp(name, "") == 0) 7024 return -EINVAL; 7025 return ocfs2_xattr_get(dentry->d_inode, OCFS2_XATTR_INDEX_SECURITY, 7026 name, buffer, size); 7027 } 7028 7029 static int ocfs2_xattr_security_set(struct dentry *dentry, const char *name, 7030 const void *value, size_t size, int flags, int type) 7031 { 7032 if (strcmp(name, "") == 0) 7033 return -EINVAL; 7034 7035 return ocfs2_xattr_set(dentry->d_inode, OCFS2_XATTR_INDEX_SECURITY, 7036 name, value, size, flags); 7037 } 7038 7039 int ocfs2_init_security_get(struct inode *inode, 7040 struct inode *dir, 7041 struct ocfs2_security_xattr_info *si) 7042 { 7043 /* check whether ocfs2 support feature xattr */ 7044 if (!ocfs2_supports_xattr(OCFS2_SB(dir->i_sb))) 7045 return -EOPNOTSUPP; 7046 return security_inode_init_security(inode, dir, &si->name, &si->value, 7047 &si->value_len); 7048 } 7049 7050 int ocfs2_init_security_set(handle_t *handle, 7051 struct inode *inode, 7052 struct buffer_head *di_bh, 7053 struct ocfs2_security_xattr_info *si, 7054 struct ocfs2_alloc_context *xattr_ac, 7055 struct ocfs2_alloc_context *data_ac) 7056 { 7057 return ocfs2_xattr_set_handle(handle, inode, di_bh, 7058 OCFS2_XATTR_INDEX_SECURITY, 7059 si->name, si->value, si->value_len, 0, 7060 xattr_ac, data_ac); 7061 } 7062 7063 struct xattr_handler ocfs2_xattr_security_handler = { 7064 .prefix = XATTR_SECURITY_PREFIX, 7065 .list = ocfs2_xattr_security_list, 7066 .get = ocfs2_xattr_security_get, 7067 .set = ocfs2_xattr_security_set, 7068 }; 7069 7070 /* 7071 * 'trusted' attributes support 7072 */ 7073 static size_t ocfs2_xattr_trusted_list(struct dentry *dentry, char *list, 7074 size_t list_size, const char *name, 7075 size_t name_len, int type) 7076 { 7077 const size_t prefix_len = XATTR_TRUSTED_PREFIX_LEN; 7078 const size_t total_len = prefix_len + name_len + 1; 7079 7080 if (list && total_len <= list_size) { 7081 memcpy(list, XATTR_TRUSTED_PREFIX, prefix_len); 7082 memcpy(list + prefix_len, name, name_len); 7083 list[prefix_len + name_len] = '\0'; 7084 } 7085 return total_len; 7086 } 7087 7088 static int ocfs2_xattr_trusted_get(struct dentry *dentry, const char *name, 7089 void *buffer, size_t size, int type) 7090 { 7091 if (strcmp(name, "") == 0) 7092 return -EINVAL; 7093 return ocfs2_xattr_get(dentry->d_inode, OCFS2_XATTR_INDEX_TRUSTED, 7094 name, buffer, size); 7095 } 7096 7097 static int ocfs2_xattr_trusted_set(struct dentry *dentry, const char *name, 7098 const void *value, size_t size, int flags, int type) 7099 { 7100 if (strcmp(name, "") == 0) 7101 return -EINVAL; 7102 7103 return ocfs2_xattr_set(dentry->d_inode, OCFS2_XATTR_INDEX_TRUSTED, 7104 name, value, size, flags); 7105 } 7106 7107 struct xattr_handler ocfs2_xattr_trusted_handler = { 7108 .prefix = XATTR_TRUSTED_PREFIX, 7109 .list = ocfs2_xattr_trusted_list, 7110 .get = ocfs2_xattr_trusted_get, 7111 .set = ocfs2_xattr_trusted_set, 7112 }; 7113 7114 /* 7115 * 'user' attributes support 7116 */ 7117 static size_t ocfs2_xattr_user_list(struct dentry *dentry, char *list, 7118 size_t list_size, const char *name, 7119 size_t name_len, int type) 7120 { 7121 const size_t prefix_len = XATTR_USER_PREFIX_LEN; 7122 const size_t total_len = prefix_len + name_len + 1; 7123 struct ocfs2_super *osb = OCFS2_SB(dentry->d_sb); 7124 7125 if (osb->s_mount_opt & OCFS2_MOUNT_NOUSERXATTR) 7126 return 0; 7127 7128 if (list && total_len <= list_size) { 7129 memcpy(list, XATTR_USER_PREFIX, prefix_len); 7130 memcpy(list + prefix_len, name, name_len); 7131 list[prefix_len + name_len] = '\0'; 7132 } 7133 return total_len; 7134 } 7135 7136 static int ocfs2_xattr_user_get(struct dentry *dentry, const char *name, 7137 void *buffer, size_t size, int type) 7138 { 7139 struct ocfs2_super *osb = OCFS2_SB(dentry->d_sb); 7140 7141 if (strcmp(name, "") == 0) 7142 return -EINVAL; 7143 if (osb->s_mount_opt & OCFS2_MOUNT_NOUSERXATTR) 7144 return -EOPNOTSUPP; 7145 return ocfs2_xattr_get(dentry->d_inode, OCFS2_XATTR_INDEX_USER, name, 7146 buffer, size); 7147 } 7148 7149 static int ocfs2_xattr_user_set(struct dentry *dentry, const char *name, 7150 const void *value, size_t size, int flags, int type) 7151 { 7152 struct ocfs2_super *osb = OCFS2_SB(dentry->d_sb); 7153 7154 if (strcmp(name, "") == 0) 7155 return -EINVAL; 7156 if (osb->s_mount_opt & OCFS2_MOUNT_NOUSERXATTR) 7157 return -EOPNOTSUPP; 7158 7159 return ocfs2_xattr_set(dentry->d_inode, OCFS2_XATTR_INDEX_USER, 7160 name, value, size, flags); 7161 } 7162 7163 struct xattr_handler ocfs2_xattr_user_handler = { 7164 .prefix = XATTR_USER_PREFIX, 7165 .list = ocfs2_xattr_user_list, 7166 .get = ocfs2_xattr_user_get, 7167 .set = ocfs2_xattr_user_set, 7168 }; 7169