1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * namei.c 4 * 5 * Create and rename file, directory, symlinks 6 * 7 * Copyright (C) 2002, 2004 Oracle. All rights reserved. 8 * 9 * Portions of this code from linux/fs/ext3/dir.c 10 * 11 * Copyright (C) 1992, 1993, 1994, 1995 12 * Remy Card (card@masi.ibp.fr) 13 * Laboratoire MASI - Institut Blaise pascal 14 * Universite Pierre et Marie Curie (Paris VI) 15 * 16 * from 17 * 18 * linux/fs/minix/dir.c 19 * 20 * Copyright (C) 1991, 1992 Linux Torvalds 21 */ 22 23 #include <linux/fs.h> 24 #include <linux/types.h> 25 #include <linux/slab.h> 26 #include <linux/highmem.h> 27 #include <linux/quotaops.h> 28 #include <linux/iversion.h> 29 30 #include <cluster/masklog.h> 31 32 #include "ocfs2.h" 33 34 #include "alloc.h" 35 #include "dcache.h" 36 #include "dir.h" 37 #include "dlmglue.h" 38 #include "extent_map.h" 39 #include "file.h" 40 #include "inode.h" 41 #include "journal.h" 42 #include "namei.h" 43 #include "suballoc.h" 44 #include "super.h" 45 #include "symlink.h" 46 #include "sysfile.h" 47 #include "uptodate.h" 48 #include "xattr.h" 49 #include "acl.h" 50 #include "ocfs2_trace.h" 51 #include "ioctl.h" 52 53 #include "buffer_head_io.h" 54 55 static int ocfs2_mknod_locked(struct ocfs2_super *osb, 56 struct inode *dir, 57 struct inode *inode, 58 dev_t dev, 59 struct buffer_head **new_fe_bh, 60 struct buffer_head *parent_fe_bh, 61 handle_t *handle, 62 struct ocfs2_alloc_context *inode_ac); 63 64 static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb, 65 struct inode **ret_orphan_dir, 66 u64 blkno, 67 char *name, 68 struct ocfs2_dir_lookup_result *lookup, 69 bool dio); 70 71 static int ocfs2_orphan_add(struct ocfs2_super *osb, 72 handle_t *handle, 73 struct inode *inode, 74 struct buffer_head *fe_bh, 75 char *name, 76 struct ocfs2_dir_lookup_result *lookup, 77 struct inode *orphan_dir_inode, 78 bool dio); 79 80 static int ocfs2_create_symlink_data(struct ocfs2_super *osb, 81 handle_t *handle, 82 struct inode *inode, 83 const char *symname); 84 85 static int ocfs2_double_lock(struct ocfs2_super *osb, 86 struct buffer_head **bh1, 87 struct inode *inode1, 88 struct buffer_head **bh2, 89 struct inode *inode2, 90 int rename); 91 92 static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2); 93 /* An orphan dir name is an 8 byte value, printed as a hex string */ 94 #define OCFS2_ORPHAN_NAMELEN ((int)(2 * sizeof(u64))) 95 96 static struct dentry *ocfs2_lookup(struct inode *dir, struct dentry *dentry, 97 unsigned int flags) 98 { 99 int status; 100 u64 blkno; 101 struct inode *inode = NULL; 102 struct dentry *ret; 103 struct ocfs2_inode_info *oi; 104 105 trace_ocfs2_lookup(dir, dentry, dentry->d_name.len, 106 dentry->d_name.name, 107 (unsigned long long)OCFS2_I(dir)->ip_blkno, 0); 108 109 if (dentry->d_name.len > OCFS2_MAX_FILENAME_LEN) { 110 ret = ERR_PTR(-ENAMETOOLONG); 111 goto bail; 112 } 113 114 status = ocfs2_inode_lock_nested(dir, NULL, 0, OI_LS_PARENT); 115 if (status < 0) { 116 if (status != -ENOENT) 117 mlog_errno(status); 118 ret = ERR_PTR(status); 119 goto bail; 120 } 121 122 status = ocfs2_lookup_ino_from_name(dir, dentry->d_name.name, 123 dentry->d_name.len, &blkno); 124 if (status < 0) 125 goto bail_add; 126 127 inode = ocfs2_iget(OCFS2_SB(dir->i_sb), blkno, 0, 0); 128 if (IS_ERR(inode)) { 129 ret = ERR_PTR(-EACCES); 130 goto bail_unlock; 131 } 132 133 oi = OCFS2_I(inode); 134 /* Clear any orphaned state... If we were able to look up the 135 * inode from a directory, it certainly can't be orphaned. We 136 * might have the bad state from a node which intended to 137 * orphan this inode but crashed before it could commit the 138 * unlink. */ 139 spin_lock(&oi->ip_lock); 140 oi->ip_flags &= ~OCFS2_INODE_MAYBE_ORPHANED; 141 spin_unlock(&oi->ip_lock); 142 143 bail_add: 144 ret = d_splice_alias(inode, dentry); 145 146 if (inode) { 147 /* 148 * If d_splice_alias() finds a DCACHE_DISCONNECTED 149 * dentry, it will d_move() it on top of ourse. The 150 * return value will indicate this however, so in 151 * those cases, we switch them around for the locking 152 * code. 153 * 154 * NOTE: This dentry already has ->d_op set from 155 * ocfs2_get_parent() and ocfs2_get_dentry() 156 */ 157 if (!IS_ERR_OR_NULL(ret)) 158 dentry = ret; 159 160 status = ocfs2_dentry_attach_lock(dentry, inode, 161 OCFS2_I(dir)->ip_blkno); 162 if (status) { 163 mlog_errno(status); 164 ret = ERR_PTR(status); 165 goto bail_unlock; 166 } 167 } else 168 ocfs2_dentry_attach_gen(dentry); 169 170 bail_unlock: 171 /* Don't drop the cluster lock until *after* the d_add -- 172 * unlink on another node will message us to remove that 173 * dentry under this lock so otherwise we can race this with 174 * the downconvert thread and have a stale dentry. */ 175 ocfs2_inode_unlock(dir, 0); 176 177 bail: 178 179 trace_ocfs2_lookup_ret(ret); 180 181 return ret; 182 } 183 184 static struct inode *ocfs2_get_init_inode(struct inode *dir, umode_t mode) 185 { 186 struct inode *inode; 187 int status; 188 189 inode = new_inode(dir->i_sb); 190 if (!inode) { 191 mlog(ML_ERROR, "new_inode failed!\n"); 192 return ERR_PTR(-ENOMEM); 193 } 194 195 /* populate as many fields early on as possible - many of 196 * these are used by the support functions here and in 197 * callers. */ 198 if (S_ISDIR(mode)) 199 set_nlink(inode, 2); 200 mode = mode_strip_sgid(&nop_mnt_idmap, dir, mode); 201 inode_init_owner(&nop_mnt_idmap, inode, dir, mode); 202 status = dquot_initialize(inode); 203 if (status) 204 return ERR_PTR(status); 205 206 return inode; 207 } 208 209 static void ocfs2_cleanup_add_entry_failure(struct ocfs2_super *osb, 210 struct dentry *dentry, struct inode *inode) 211 { 212 struct ocfs2_dentry_lock *dl = dentry->d_fsdata; 213 214 ocfs2_simple_drop_lockres(osb, &dl->dl_lockres); 215 ocfs2_lock_res_free(&dl->dl_lockres); 216 BUG_ON(dl->dl_count != 1); 217 spin_lock(&dentry_attach_lock); 218 dentry->d_fsdata = NULL; 219 spin_unlock(&dentry_attach_lock); 220 kfree(dl); 221 iput(inode); 222 } 223 224 static int ocfs2_mknod(struct mnt_idmap *idmap, 225 struct inode *dir, 226 struct dentry *dentry, 227 umode_t mode, 228 dev_t dev) 229 { 230 int status = 0; 231 struct buffer_head *parent_fe_bh = NULL; 232 handle_t *handle = NULL; 233 struct ocfs2_super *osb; 234 struct ocfs2_dinode *dirfe; 235 struct ocfs2_dinode *fe = NULL; 236 struct buffer_head *new_fe_bh = NULL; 237 struct inode *inode = NULL; 238 struct ocfs2_alloc_context *inode_ac = NULL; 239 struct ocfs2_alloc_context *data_ac = NULL; 240 struct ocfs2_alloc_context *meta_ac = NULL; 241 int want_clusters = 0; 242 int want_meta = 0; 243 int xattr_credits = 0; 244 struct ocfs2_security_xattr_info si = { 245 .name = NULL, 246 .enable = 1, 247 }; 248 int did_quota_inode = 0; 249 struct ocfs2_dir_lookup_result lookup = { NULL, }; 250 sigset_t oldset; 251 int did_block_signals = 0; 252 struct ocfs2_dentry_lock *dl = NULL; 253 254 trace_ocfs2_mknod(dir, dentry, dentry->d_name.len, dentry->d_name.name, 255 (unsigned long long)OCFS2_I(dir)->ip_blkno, 256 (unsigned long)dev, mode); 257 258 status = dquot_initialize(dir); 259 if (status) { 260 mlog_errno(status); 261 return status; 262 } 263 264 /* get our super block */ 265 osb = OCFS2_SB(dir->i_sb); 266 267 status = ocfs2_inode_lock(dir, &parent_fe_bh, 1); 268 if (status < 0) { 269 if (status != -ENOENT) 270 mlog_errno(status); 271 return status; 272 } 273 274 if (S_ISDIR(mode) && (dir->i_nlink >= ocfs2_link_max(osb))) { 275 status = -EMLINK; 276 goto leave; 277 } 278 279 dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data; 280 if (!ocfs2_read_links_count(dirfe)) { 281 /* can't make a file in a deleted directory. */ 282 status = -ENOENT; 283 goto leave; 284 } 285 286 status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, 287 dentry->d_name.len); 288 if (status) 289 goto leave; 290 291 /* get a spot inside the dir. */ 292 status = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh, 293 dentry->d_name.name, 294 dentry->d_name.len, &lookup); 295 if (status < 0) { 296 mlog_errno(status); 297 goto leave; 298 } 299 300 /* reserve an inode spot */ 301 status = ocfs2_reserve_new_inode(osb, &inode_ac); 302 if (status < 0) { 303 if (status != -ENOSPC) 304 mlog_errno(status); 305 goto leave; 306 } 307 308 inode = ocfs2_get_init_inode(dir, mode); 309 if (IS_ERR(inode)) { 310 status = PTR_ERR(inode); 311 inode = NULL; 312 mlog_errno(status); 313 goto leave; 314 } 315 316 /* get security xattr */ 317 status = ocfs2_init_security_get(inode, dir, &dentry->d_name, &si); 318 if (status) { 319 if (status == -EOPNOTSUPP) 320 si.enable = 0; 321 else { 322 mlog_errno(status); 323 goto leave; 324 } 325 } 326 327 /* calculate meta data/clusters for setting security and acl xattr */ 328 status = ocfs2_calc_xattr_init(dir, parent_fe_bh, mode, 329 &si, &want_clusters, 330 &xattr_credits, &want_meta); 331 if (status < 0) { 332 mlog_errno(status); 333 goto leave; 334 } 335 336 /* Reserve a cluster if creating an extent based directory. */ 337 if (S_ISDIR(mode) && !ocfs2_supports_inline_data(osb)) { 338 want_clusters += 1; 339 340 /* Dir indexing requires extra space as well */ 341 if (ocfs2_supports_indexed_dirs(osb)) 342 want_meta++; 343 } 344 345 status = ocfs2_reserve_new_metadata_blocks(osb, want_meta, &meta_ac); 346 if (status < 0) { 347 if (status != -ENOSPC) 348 mlog_errno(status); 349 goto leave; 350 } 351 352 status = ocfs2_reserve_clusters(osb, want_clusters, &data_ac); 353 if (status < 0) { 354 if (status != -ENOSPC) 355 mlog_errno(status); 356 goto leave; 357 } 358 359 handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb, 360 S_ISDIR(mode), 361 xattr_credits)); 362 if (IS_ERR(handle)) { 363 status = PTR_ERR(handle); 364 handle = NULL; 365 mlog_errno(status); 366 goto leave; 367 } 368 369 /* Starting to change things, restart is no longer possible. */ 370 ocfs2_block_signals(&oldset); 371 did_block_signals = 1; 372 373 status = dquot_alloc_inode(inode); 374 if (status) 375 goto leave; 376 did_quota_inode = 1; 377 378 /* do the real work now. */ 379 status = ocfs2_mknod_locked(osb, dir, inode, dev, 380 &new_fe_bh, parent_fe_bh, handle, 381 inode_ac); 382 if (status < 0) { 383 mlog_errno(status); 384 goto leave; 385 } 386 387 fe = (struct ocfs2_dinode *) new_fe_bh->b_data; 388 if (S_ISDIR(mode)) { 389 status = ocfs2_fill_new_dir(osb, handle, dir, inode, 390 new_fe_bh, data_ac, meta_ac); 391 if (status < 0) { 392 mlog_errno(status); 393 goto leave; 394 } 395 396 status = ocfs2_journal_access_di(handle, INODE_CACHE(dir), 397 parent_fe_bh, 398 OCFS2_JOURNAL_ACCESS_WRITE); 399 if (status < 0) { 400 mlog_errno(status); 401 goto leave; 402 } 403 ocfs2_add_links_count(dirfe, 1); 404 ocfs2_journal_dirty(handle, parent_fe_bh); 405 inc_nlink(dir); 406 } 407 408 status = ocfs2_init_acl(handle, inode, dir, new_fe_bh, parent_fe_bh, 409 meta_ac, data_ac); 410 411 if (status < 0) { 412 mlog_errno(status); 413 goto roll_back; 414 } 415 416 if (si.enable) { 417 status = ocfs2_init_security_set(handle, inode, new_fe_bh, &si, 418 meta_ac, data_ac); 419 if (status < 0) { 420 mlog_errno(status); 421 goto roll_back; 422 } 423 } 424 425 /* 426 * Do this before adding the entry to the directory. We add 427 * also set d_op after success so that ->d_iput() will cleanup 428 * the dentry lock even if ocfs2_add_entry() fails below. 429 */ 430 status = ocfs2_dentry_attach_lock(dentry, inode, 431 OCFS2_I(dir)->ip_blkno); 432 if (status) { 433 mlog_errno(status); 434 goto roll_back; 435 } 436 437 dl = dentry->d_fsdata; 438 439 status = ocfs2_add_entry(handle, dentry, inode, 440 OCFS2_I(inode)->ip_blkno, parent_fe_bh, 441 &lookup); 442 if (status < 0) { 443 mlog_errno(status); 444 goto roll_back; 445 } 446 447 insert_inode_hash(inode); 448 d_instantiate(dentry, inode); 449 status = 0; 450 451 roll_back: 452 if (status < 0 && S_ISDIR(mode)) { 453 ocfs2_add_links_count(dirfe, -1); 454 drop_nlink(dir); 455 } 456 457 leave: 458 if (status < 0 && did_quota_inode) 459 dquot_free_inode(inode); 460 if (handle) { 461 if (status < 0 && fe) 462 ocfs2_set_links_count(fe, 0); 463 ocfs2_commit_trans(osb, handle); 464 } 465 466 ocfs2_inode_unlock(dir, 1); 467 if (did_block_signals) 468 ocfs2_unblock_signals(&oldset); 469 470 brelse(new_fe_bh); 471 brelse(parent_fe_bh); 472 kfree(si.value); 473 474 ocfs2_free_dir_lookup_result(&lookup); 475 476 if (inode_ac) 477 ocfs2_free_alloc_context(inode_ac); 478 479 if (data_ac) 480 ocfs2_free_alloc_context(data_ac); 481 482 if (meta_ac) 483 ocfs2_free_alloc_context(meta_ac); 484 485 /* 486 * We should call iput after the i_rwsem of the bitmap been 487 * unlocked in ocfs2_free_alloc_context, or the 488 * ocfs2_delete_inode will mutex_lock again. 489 */ 490 if ((status < 0) && inode) { 491 if (dl) 492 ocfs2_cleanup_add_entry_failure(osb, dentry, inode); 493 494 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_ORPHAN_DIR; 495 clear_nlink(inode); 496 iput(inode); 497 } 498 499 if (status) 500 mlog_errno(status); 501 502 return status; 503 } 504 505 static int __ocfs2_mknod_locked(struct inode *dir, 506 struct inode *inode, 507 dev_t dev, 508 struct buffer_head **new_fe_bh, 509 struct buffer_head *parent_fe_bh, 510 handle_t *handle, 511 struct ocfs2_alloc_context *inode_ac, 512 u64 fe_blkno, u64 suballoc_loc, u16 suballoc_bit) 513 { 514 int status = 0; 515 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 516 struct ocfs2_dinode *fe = NULL; 517 struct ocfs2_extent_list *fel; 518 u16 feat; 519 struct ocfs2_inode_info *oi = OCFS2_I(inode); 520 struct timespec64 ts; 521 522 *new_fe_bh = NULL; 523 524 /* populate as many fields early on as possible - many of 525 * these are used by the support functions here and in 526 * callers. */ 527 inode->i_ino = ino_from_blkno(osb->sb, fe_blkno); 528 oi->ip_blkno = fe_blkno; 529 spin_lock(&osb->osb_lock); 530 inode->i_generation = osb->s_next_generation++; 531 spin_unlock(&osb->osb_lock); 532 533 *new_fe_bh = sb_getblk(osb->sb, fe_blkno); 534 if (!*new_fe_bh) { 535 status = -ENOMEM; 536 mlog_errno(status); 537 goto leave; 538 } 539 ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode), *new_fe_bh); 540 541 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), 542 *new_fe_bh, 543 OCFS2_JOURNAL_ACCESS_CREATE); 544 if (status < 0) { 545 mlog_errno(status); 546 goto leave; 547 } 548 549 fe = (struct ocfs2_dinode *) (*new_fe_bh)->b_data; 550 memset(fe, 0, osb->sb->s_blocksize); 551 552 fe->i_generation = cpu_to_le32(inode->i_generation); 553 fe->i_fs_generation = cpu_to_le32(osb->fs_generation); 554 fe->i_blkno = cpu_to_le64(fe_blkno); 555 fe->i_suballoc_loc = cpu_to_le64(suballoc_loc); 556 fe->i_suballoc_bit = cpu_to_le16(suballoc_bit); 557 fe->i_suballoc_slot = cpu_to_le16(inode_ac->ac_alloc_slot); 558 fe->i_uid = cpu_to_le32(i_uid_read(inode)); 559 fe->i_gid = cpu_to_le32(i_gid_read(inode)); 560 fe->i_mode = cpu_to_le16(inode->i_mode); 561 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) 562 fe->id1.dev1.i_rdev = cpu_to_le64(huge_encode_dev(dev)); 563 564 ocfs2_set_links_count(fe, inode->i_nlink); 565 566 fe->i_last_eb_blk = 0; 567 strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE); 568 fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL); 569 ktime_get_coarse_real_ts64(&ts); 570 fe->i_atime = fe->i_ctime = fe->i_mtime = 571 cpu_to_le64(ts.tv_sec); 572 fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec = 573 cpu_to_le32(ts.tv_nsec); 574 fe->i_dtime = 0; 575 576 /* 577 * If supported, directories start with inline data. If inline 578 * isn't supported, but indexing is, we start them as indexed. 579 */ 580 feat = le16_to_cpu(fe->i_dyn_features); 581 if (S_ISDIR(inode->i_mode) && ocfs2_supports_inline_data(osb)) { 582 fe->i_dyn_features = cpu_to_le16(feat | OCFS2_INLINE_DATA_FL); 583 584 fe->id2.i_data.id_count = cpu_to_le16( 585 ocfs2_max_inline_data_with_xattr(osb->sb, fe)); 586 } else { 587 fel = &fe->id2.i_list; 588 fel->l_tree_depth = 0; 589 fel->l_next_free_rec = 0; 590 fel->l_count = cpu_to_le16(ocfs2_extent_recs_per_inode(osb->sb)); 591 } 592 593 ocfs2_journal_dirty(handle, *new_fe_bh); 594 595 ocfs2_populate_inode(inode, fe, 1); 596 ocfs2_ci_set_new(osb, INODE_CACHE(inode)); 597 if (!ocfs2_mount_local(osb)) { 598 status = ocfs2_create_new_inode_locks(inode); 599 if (status < 0) 600 mlog_errno(status); 601 } 602 603 ocfs2_update_inode_fsync_trans(handle, inode, 1); 604 605 leave: 606 if (status < 0) { 607 if (*new_fe_bh) { 608 brelse(*new_fe_bh); 609 *new_fe_bh = NULL; 610 } 611 } 612 613 if (status) 614 mlog_errno(status); 615 return status; 616 } 617 618 static int ocfs2_mknod_locked(struct ocfs2_super *osb, 619 struct inode *dir, 620 struct inode *inode, 621 dev_t dev, 622 struct buffer_head **new_fe_bh, 623 struct buffer_head *parent_fe_bh, 624 handle_t *handle, 625 struct ocfs2_alloc_context *inode_ac) 626 { 627 int status = 0; 628 u64 suballoc_loc, fe_blkno = 0; 629 u16 suballoc_bit; 630 631 *new_fe_bh = NULL; 632 633 status = ocfs2_claim_new_inode(handle, dir, parent_fe_bh, 634 inode_ac, &suballoc_loc, 635 &suballoc_bit, &fe_blkno); 636 if (status < 0) { 637 mlog_errno(status); 638 return status; 639 } 640 641 return __ocfs2_mknod_locked(dir, inode, dev, new_fe_bh, 642 parent_fe_bh, handle, inode_ac, 643 fe_blkno, suballoc_loc, suballoc_bit); 644 } 645 646 static int ocfs2_mkdir(struct mnt_idmap *idmap, 647 struct inode *dir, 648 struct dentry *dentry, 649 umode_t mode) 650 { 651 int ret; 652 653 trace_ocfs2_mkdir(dir, dentry, dentry->d_name.len, dentry->d_name.name, 654 OCFS2_I(dir)->ip_blkno, mode); 655 ret = ocfs2_mknod(&nop_mnt_idmap, dir, dentry, mode | S_IFDIR, 0); 656 if (ret) 657 mlog_errno(ret); 658 659 return ret; 660 } 661 662 static int ocfs2_create(struct mnt_idmap *idmap, 663 struct inode *dir, 664 struct dentry *dentry, 665 umode_t mode, 666 bool excl) 667 { 668 int ret; 669 670 trace_ocfs2_create(dir, dentry, dentry->d_name.len, dentry->d_name.name, 671 (unsigned long long)OCFS2_I(dir)->ip_blkno, mode); 672 ret = ocfs2_mknod(&nop_mnt_idmap, dir, dentry, mode | S_IFREG, 0); 673 if (ret) 674 mlog_errno(ret); 675 676 return ret; 677 } 678 679 static int ocfs2_link(struct dentry *old_dentry, 680 struct inode *dir, 681 struct dentry *dentry) 682 { 683 handle_t *handle; 684 struct inode *inode = d_inode(old_dentry); 685 struct inode *old_dir = d_inode(old_dentry->d_parent); 686 int err; 687 struct buffer_head *fe_bh = NULL; 688 struct buffer_head *old_dir_bh = NULL; 689 struct buffer_head *parent_fe_bh = NULL; 690 struct ocfs2_dinode *fe = NULL; 691 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 692 struct ocfs2_dir_lookup_result lookup = { NULL, }; 693 sigset_t oldset; 694 u64 old_de_ino; 695 696 trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno, 697 old_dentry->d_name.len, old_dentry->d_name.name, 698 dentry->d_name.len, dentry->d_name.name); 699 700 if (S_ISDIR(inode->i_mode)) 701 return -EPERM; 702 703 err = dquot_initialize(dir); 704 if (err) { 705 mlog_errno(err); 706 return err; 707 } 708 709 err = ocfs2_double_lock(osb, &old_dir_bh, old_dir, 710 &parent_fe_bh, dir, 0); 711 if (err < 0) { 712 if (err != -ENOENT) 713 mlog_errno(err); 714 return err; 715 } 716 717 /* make sure both dirs have bhs 718 * get an extra ref on old_dir_bh if old==new */ 719 if (!parent_fe_bh) { 720 if (old_dir_bh) { 721 parent_fe_bh = old_dir_bh; 722 get_bh(parent_fe_bh); 723 } else { 724 mlog(ML_ERROR, "%s: no old_dir_bh!\n", osb->uuid_str); 725 err = -EIO; 726 goto out; 727 } 728 } 729 730 if (!dir->i_nlink) { 731 err = -ENOENT; 732 goto out; 733 } 734 735 err = ocfs2_lookup_ino_from_name(old_dir, old_dentry->d_name.name, 736 old_dentry->d_name.len, &old_de_ino); 737 if (err) { 738 err = -ENOENT; 739 goto out; 740 } 741 742 /* 743 * Check whether another node removed the source inode while we 744 * were in the vfs. 745 */ 746 if (old_de_ino != OCFS2_I(inode)->ip_blkno) { 747 err = -ENOENT; 748 goto out; 749 } 750 751 err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, 752 dentry->d_name.len); 753 if (err) 754 goto out; 755 756 err = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh, 757 dentry->d_name.name, 758 dentry->d_name.len, &lookup); 759 if (err < 0) { 760 mlog_errno(err); 761 goto out; 762 } 763 764 err = ocfs2_inode_lock(inode, &fe_bh, 1); 765 if (err < 0) { 766 if (err != -ENOENT) 767 mlog_errno(err); 768 goto out; 769 } 770 771 fe = (struct ocfs2_dinode *) fe_bh->b_data; 772 if (ocfs2_read_links_count(fe) >= ocfs2_link_max(osb)) { 773 err = -EMLINK; 774 goto out_unlock_inode; 775 } 776 777 handle = ocfs2_start_trans(osb, ocfs2_link_credits(osb->sb)); 778 if (IS_ERR(handle)) { 779 err = PTR_ERR(handle); 780 handle = NULL; 781 mlog_errno(err); 782 goto out_unlock_inode; 783 } 784 785 /* Starting to change things, restart is no longer possible. */ 786 ocfs2_block_signals(&oldset); 787 788 err = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh, 789 OCFS2_JOURNAL_ACCESS_WRITE); 790 if (err < 0) { 791 mlog_errno(err); 792 goto out_commit; 793 } 794 795 inc_nlink(inode); 796 inode_set_ctime_current(inode); 797 ocfs2_set_links_count(fe, inode->i_nlink); 798 fe->i_ctime = cpu_to_le64(inode_get_ctime_sec(inode)); 799 fe->i_ctime_nsec = cpu_to_le32(inode_get_ctime_nsec(inode)); 800 ocfs2_update_inode_fsync_trans(handle, inode, 0); 801 ocfs2_journal_dirty(handle, fe_bh); 802 803 err = ocfs2_add_entry(handle, dentry, inode, 804 OCFS2_I(inode)->ip_blkno, 805 parent_fe_bh, &lookup); 806 if (err) { 807 ocfs2_add_links_count(fe, -1); 808 drop_nlink(inode); 809 mlog_errno(err); 810 goto out_commit; 811 } 812 813 err = ocfs2_dentry_attach_lock(dentry, inode, OCFS2_I(dir)->ip_blkno); 814 if (err) { 815 mlog_errno(err); 816 goto out_commit; 817 } 818 819 ihold(inode); 820 d_instantiate(dentry, inode); 821 822 out_commit: 823 ocfs2_commit_trans(osb, handle); 824 ocfs2_unblock_signals(&oldset); 825 out_unlock_inode: 826 ocfs2_inode_unlock(inode, 1); 827 828 out: 829 ocfs2_double_unlock(old_dir, dir); 830 831 brelse(fe_bh); 832 brelse(parent_fe_bh); 833 brelse(old_dir_bh); 834 835 ocfs2_free_dir_lookup_result(&lookup); 836 837 if (err) 838 mlog_errno(err); 839 840 return err; 841 } 842 843 /* 844 * Takes and drops an exclusive lock on the given dentry. This will 845 * force other nodes to drop it. 846 */ 847 static int ocfs2_remote_dentry_delete(struct dentry *dentry) 848 { 849 int ret; 850 851 ret = ocfs2_dentry_lock(dentry, 1); 852 if (ret) 853 mlog_errno(ret); 854 else 855 ocfs2_dentry_unlock(dentry, 1); 856 857 return ret; 858 } 859 860 static inline int ocfs2_inode_is_unlinkable(struct inode *inode) 861 { 862 if (S_ISDIR(inode->i_mode)) { 863 if (inode->i_nlink == 2) 864 return 1; 865 return 0; 866 } 867 868 if (inode->i_nlink == 1) 869 return 1; 870 return 0; 871 } 872 873 static int ocfs2_unlink(struct inode *dir, 874 struct dentry *dentry) 875 { 876 int status; 877 int child_locked = 0; 878 bool is_unlinkable = false; 879 struct inode *inode = d_inode(dentry); 880 struct inode *orphan_dir = NULL; 881 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 882 u64 blkno; 883 struct ocfs2_dinode *fe = NULL; 884 struct buffer_head *fe_bh = NULL; 885 struct buffer_head *parent_node_bh = NULL; 886 handle_t *handle = NULL; 887 char orphan_name[OCFS2_ORPHAN_NAMELEN + 1]; 888 struct ocfs2_dir_lookup_result lookup = { NULL, }; 889 struct ocfs2_dir_lookup_result orphan_insert = { NULL, }; 890 891 trace_ocfs2_unlink(dir, dentry, dentry->d_name.len, 892 dentry->d_name.name, 893 (unsigned long long)OCFS2_I(dir)->ip_blkno, 894 (unsigned long long)OCFS2_I(inode)->ip_blkno); 895 896 status = dquot_initialize(dir); 897 if (status) { 898 mlog_errno(status); 899 return status; 900 } 901 902 BUG_ON(d_inode(dentry->d_parent) != dir); 903 904 if (inode == osb->root_inode) 905 return -EPERM; 906 907 status = ocfs2_inode_lock_nested(dir, &parent_node_bh, 1, 908 OI_LS_PARENT); 909 if (status < 0) { 910 if (status != -ENOENT) 911 mlog_errno(status); 912 return status; 913 } 914 915 status = ocfs2_find_files_on_disk(dentry->d_name.name, 916 dentry->d_name.len, &blkno, dir, 917 &lookup); 918 if (status < 0) { 919 if (status != -ENOENT) 920 mlog_errno(status); 921 goto leave; 922 } 923 924 if (OCFS2_I(inode)->ip_blkno != blkno) { 925 status = -ENOENT; 926 927 trace_ocfs2_unlink_noent( 928 (unsigned long long)OCFS2_I(inode)->ip_blkno, 929 (unsigned long long)blkno, 930 OCFS2_I(inode)->ip_flags); 931 goto leave; 932 } 933 934 status = ocfs2_inode_lock(inode, &fe_bh, 1); 935 if (status < 0) { 936 if (status != -ENOENT) 937 mlog_errno(status); 938 goto leave; 939 } 940 child_locked = 1; 941 942 if (S_ISDIR(inode->i_mode)) { 943 if (inode->i_nlink != 2 || !ocfs2_empty_dir(inode)) { 944 status = -ENOTEMPTY; 945 goto leave; 946 } 947 } 948 949 status = ocfs2_remote_dentry_delete(dentry); 950 if (status < 0) { 951 /* This remote delete should succeed under all normal 952 * circumstances. */ 953 mlog_errno(status); 954 goto leave; 955 } 956 957 if (ocfs2_inode_is_unlinkable(inode)) { 958 status = ocfs2_prepare_orphan_dir(osb, &orphan_dir, 959 OCFS2_I(inode)->ip_blkno, 960 orphan_name, &orphan_insert, 961 false); 962 if (status < 0) { 963 mlog_errno(status); 964 goto leave; 965 } 966 is_unlinkable = true; 967 } 968 969 handle = ocfs2_start_trans(osb, ocfs2_unlink_credits(osb->sb)); 970 if (IS_ERR(handle)) { 971 status = PTR_ERR(handle); 972 handle = NULL; 973 mlog_errno(status); 974 goto leave; 975 } 976 977 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh, 978 OCFS2_JOURNAL_ACCESS_WRITE); 979 if (status < 0) { 980 mlog_errno(status); 981 goto leave; 982 } 983 984 fe = (struct ocfs2_dinode *) fe_bh->b_data; 985 986 /* delete the name from the parent dir */ 987 status = ocfs2_delete_entry(handle, dir, &lookup); 988 if (status < 0) { 989 mlog_errno(status); 990 goto leave; 991 } 992 993 if (S_ISDIR(inode->i_mode)) 994 drop_nlink(inode); 995 drop_nlink(inode); 996 ocfs2_set_links_count(fe, inode->i_nlink); 997 ocfs2_update_inode_fsync_trans(handle, inode, 0); 998 ocfs2_journal_dirty(handle, fe_bh); 999 1000 inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir)); 1001 if (S_ISDIR(inode->i_mode)) 1002 drop_nlink(dir); 1003 1004 status = ocfs2_mark_inode_dirty(handle, dir, parent_node_bh); 1005 if (status < 0) { 1006 mlog_errno(status); 1007 if (S_ISDIR(inode->i_mode)) 1008 inc_nlink(dir); 1009 goto leave; 1010 } 1011 1012 if (is_unlinkable) { 1013 status = ocfs2_orphan_add(osb, handle, inode, fe_bh, 1014 orphan_name, &orphan_insert, orphan_dir, false); 1015 if (status < 0) 1016 mlog_errno(status); 1017 } 1018 1019 leave: 1020 if (handle) 1021 ocfs2_commit_trans(osb, handle); 1022 1023 if (orphan_dir) { 1024 /* This was locked for us in ocfs2_prepare_orphan_dir() */ 1025 ocfs2_inode_unlock(orphan_dir, 1); 1026 inode_unlock(orphan_dir); 1027 iput(orphan_dir); 1028 } 1029 1030 if (child_locked) 1031 ocfs2_inode_unlock(inode, 1); 1032 1033 ocfs2_inode_unlock(dir, 1); 1034 1035 brelse(fe_bh); 1036 brelse(parent_node_bh); 1037 1038 ocfs2_free_dir_lookup_result(&orphan_insert); 1039 ocfs2_free_dir_lookup_result(&lookup); 1040 1041 if (status && (status != -ENOTEMPTY) && (status != -ENOENT)) 1042 mlog_errno(status); 1043 1044 return status; 1045 } 1046 1047 static int ocfs2_check_if_ancestor(struct ocfs2_super *osb, 1048 u64 src_inode_no, u64 dest_inode_no) 1049 { 1050 int ret = 0, i = 0; 1051 u64 parent_inode_no = 0; 1052 u64 child_inode_no = src_inode_no; 1053 struct inode *child_inode; 1054 1055 #define MAX_LOOKUP_TIMES 32 1056 while (1) { 1057 child_inode = ocfs2_iget(osb, child_inode_no, 0, 0); 1058 if (IS_ERR(child_inode)) { 1059 ret = PTR_ERR(child_inode); 1060 break; 1061 } 1062 1063 ret = ocfs2_inode_lock(child_inode, NULL, 0); 1064 if (ret < 0) { 1065 iput(child_inode); 1066 if (ret != -ENOENT) 1067 mlog_errno(ret); 1068 break; 1069 } 1070 1071 ret = ocfs2_lookup_ino_from_name(child_inode, "..", 2, 1072 &parent_inode_no); 1073 ocfs2_inode_unlock(child_inode, 0); 1074 iput(child_inode); 1075 if (ret < 0) { 1076 ret = -ENOENT; 1077 break; 1078 } 1079 1080 if (parent_inode_no == dest_inode_no) { 1081 ret = 1; 1082 break; 1083 } 1084 1085 if (parent_inode_no == osb->root_inode->i_ino) { 1086 ret = 0; 1087 break; 1088 } 1089 1090 child_inode_no = parent_inode_no; 1091 1092 if (++i >= MAX_LOOKUP_TIMES) { 1093 mlog_ratelimited(ML_NOTICE, "max lookup times reached, " 1094 "filesystem may have nested directories, " 1095 "src inode: %llu, dest inode: %llu.\n", 1096 (unsigned long long)src_inode_no, 1097 (unsigned long long)dest_inode_no); 1098 ret = 0; 1099 break; 1100 } 1101 } 1102 1103 return ret; 1104 } 1105 1106 /* 1107 * The only place this should be used is rename and link! 1108 * if they have the same id, then the 1st one is the only one locked. 1109 */ 1110 static int ocfs2_double_lock(struct ocfs2_super *osb, 1111 struct buffer_head **bh1, 1112 struct inode *inode1, 1113 struct buffer_head **bh2, 1114 struct inode *inode2, 1115 int rename) 1116 { 1117 int status; 1118 int inode1_is_ancestor, inode2_is_ancestor; 1119 struct ocfs2_inode_info *oi1 = OCFS2_I(inode1); 1120 struct ocfs2_inode_info *oi2 = OCFS2_I(inode2); 1121 1122 trace_ocfs2_double_lock((unsigned long long)oi1->ip_blkno, 1123 (unsigned long long)oi2->ip_blkno); 1124 1125 if (*bh1) 1126 *bh1 = NULL; 1127 if (*bh2) 1128 *bh2 = NULL; 1129 1130 /* we always want to lock the one with the lower lockid first. 1131 * and if they are nested, we lock ancestor first */ 1132 if (oi1->ip_blkno != oi2->ip_blkno) { 1133 inode1_is_ancestor = ocfs2_check_if_ancestor(osb, oi2->ip_blkno, 1134 oi1->ip_blkno); 1135 if (inode1_is_ancestor < 0) { 1136 status = inode1_is_ancestor; 1137 goto bail; 1138 } 1139 1140 inode2_is_ancestor = ocfs2_check_if_ancestor(osb, oi1->ip_blkno, 1141 oi2->ip_blkno); 1142 if (inode2_is_ancestor < 0) { 1143 status = inode2_is_ancestor; 1144 goto bail; 1145 } 1146 1147 if ((inode1_is_ancestor == 1) || 1148 (oi1->ip_blkno < oi2->ip_blkno && 1149 inode2_is_ancestor == 0)) { 1150 /* switch id1 and id2 around */ 1151 swap(bh2, bh1); 1152 swap(inode2, inode1); 1153 } 1154 /* lock id2 */ 1155 status = ocfs2_inode_lock_nested(inode2, bh2, 1, 1156 rename == 1 ? OI_LS_RENAME1 : OI_LS_PARENT); 1157 if (status < 0) { 1158 if (status != -ENOENT) 1159 mlog_errno(status); 1160 goto bail; 1161 } 1162 } 1163 1164 /* lock id1 */ 1165 status = ocfs2_inode_lock_nested(inode1, bh1, 1, 1166 rename == 1 ? OI_LS_RENAME2 : OI_LS_PARENT); 1167 if (status < 0) { 1168 /* 1169 * An error return must mean that no cluster locks 1170 * were held on function exit. 1171 */ 1172 if (oi1->ip_blkno != oi2->ip_blkno) { 1173 ocfs2_inode_unlock(inode2, 1); 1174 brelse(*bh2); 1175 *bh2 = NULL; 1176 } 1177 1178 if (status != -ENOENT) 1179 mlog_errno(status); 1180 } 1181 1182 trace_ocfs2_double_lock_end( 1183 (unsigned long long)oi1->ip_blkno, 1184 (unsigned long long)oi2->ip_blkno); 1185 1186 bail: 1187 if (status) 1188 mlog_errno(status); 1189 return status; 1190 } 1191 1192 static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2) 1193 { 1194 ocfs2_inode_unlock(inode1, 1); 1195 1196 if (inode1 != inode2) 1197 ocfs2_inode_unlock(inode2, 1); 1198 } 1199 1200 static int ocfs2_rename(struct mnt_idmap *idmap, 1201 struct inode *old_dir, 1202 struct dentry *old_dentry, 1203 struct inode *new_dir, 1204 struct dentry *new_dentry, 1205 unsigned int flags) 1206 { 1207 int status = 0, rename_lock = 0, parents_locked = 0, target_exists = 0; 1208 int old_child_locked = 0, new_child_locked = 0, update_dot_dot = 0; 1209 struct inode *old_inode = d_inode(old_dentry); 1210 struct inode *new_inode = d_inode(new_dentry); 1211 struct inode *orphan_dir = NULL; 1212 struct ocfs2_dinode *newfe = NULL; 1213 char orphan_name[OCFS2_ORPHAN_NAMELEN + 1]; 1214 struct buffer_head *newfe_bh = NULL; 1215 struct buffer_head *old_inode_bh = NULL; 1216 struct ocfs2_super *osb = NULL; 1217 u64 newfe_blkno, old_de_ino; 1218 handle_t *handle = NULL; 1219 struct buffer_head *old_dir_bh = NULL; 1220 struct buffer_head *new_dir_bh = NULL; 1221 u32 old_dir_nlink = old_dir->i_nlink; 1222 struct ocfs2_dinode *old_di; 1223 struct ocfs2_dir_lookup_result old_inode_dot_dot_res = { NULL, }; 1224 struct ocfs2_dir_lookup_result target_lookup_res = { NULL, }; 1225 struct ocfs2_dir_lookup_result old_entry_lookup = { NULL, }; 1226 struct ocfs2_dir_lookup_result orphan_insert = { NULL, }; 1227 struct ocfs2_dir_lookup_result target_insert = { NULL, }; 1228 bool should_add_orphan = false; 1229 1230 if (flags) 1231 return -EINVAL; 1232 1233 /* At some point it might be nice to break this function up a 1234 * bit. */ 1235 1236 trace_ocfs2_rename(old_dir, old_dentry, new_dir, new_dentry, 1237 old_dentry->d_name.len, old_dentry->d_name.name, 1238 new_dentry->d_name.len, new_dentry->d_name.name); 1239 1240 status = dquot_initialize(old_dir); 1241 if (status) { 1242 mlog_errno(status); 1243 goto bail; 1244 } 1245 status = dquot_initialize(new_dir); 1246 if (status) { 1247 mlog_errno(status); 1248 goto bail; 1249 } 1250 1251 osb = OCFS2_SB(old_dir->i_sb); 1252 1253 if (new_inode) { 1254 if (!igrab(new_inode)) 1255 BUG(); 1256 } 1257 1258 /* Assume a directory hierarchy thusly: 1259 * a/b/c 1260 * a/d 1261 * a,b,c, and d are all directories. 1262 * 1263 * from cwd of 'a' on both nodes: 1264 * node1: mv b/c d 1265 * node2: mv d b/c 1266 * 1267 * And that's why, just like the VFS, we need a file system 1268 * rename lock. */ 1269 if (old_dir != new_dir && S_ISDIR(old_inode->i_mode)) { 1270 status = ocfs2_rename_lock(osb); 1271 if (status < 0) { 1272 mlog_errno(status); 1273 goto bail; 1274 } 1275 rename_lock = 1; 1276 1277 /* here we cannot guarantee the inodes haven't just been 1278 * changed, so check if they are nested again */ 1279 status = ocfs2_check_if_ancestor(osb, new_dir->i_ino, 1280 old_inode->i_ino); 1281 if (status < 0) { 1282 mlog_errno(status); 1283 goto bail; 1284 } else if (status == 1) { 1285 status = -EPERM; 1286 trace_ocfs2_rename_not_permitted( 1287 (unsigned long long)old_inode->i_ino, 1288 (unsigned long long)new_dir->i_ino); 1289 goto bail; 1290 } 1291 } 1292 1293 /* if old and new are the same, this'll just do one lock. */ 1294 status = ocfs2_double_lock(osb, &old_dir_bh, old_dir, 1295 &new_dir_bh, new_dir, 1); 1296 if (status < 0) { 1297 mlog_errno(status); 1298 goto bail; 1299 } 1300 parents_locked = 1; 1301 1302 if (!new_dir->i_nlink) { 1303 status = -EACCES; 1304 goto bail; 1305 } 1306 1307 /* make sure both dirs have bhs 1308 * get an extra ref on old_dir_bh if old==new */ 1309 if (!new_dir_bh) { 1310 if (old_dir_bh) { 1311 new_dir_bh = old_dir_bh; 1312 get_bh(new_dir_bh); 1313 } else { 1314 mlog(ML_ERROR, "no old_dir_bh!\n"); 1315 status = -EIO; 1316 goto bail; 1317 } 1318 } 1319 1320 /* 1321 * Aside from allowing a meta data update, the locking here 1322 * also ensures that the downconvert thread on other nodes 1323 * won't have to concurrently downconvert the inode and the 1324 * dentry locks. 1325 */ 1326 status = ocfs2_inode_lock_nested(old_inode, &old_inode_bh, 1, 1327 OI_LS_PARENT); 1328 if (status < 0) { 1329 if (status != -ENOENT) 1330 mlog_errno(status); 1331 goto bail; 1332 } 1333 old_child_locked = 1; 1334 1335 status = ocfs2_remote_dentry_delete(old_dentry); 1336 if (status < 0) { 1337 mlog_errno(status); 1338 goto bail; 1339 } 1340 1341 if (S_ISDIR(old_inode->i_mode)) { 1342 u64 old_inode_parent; 1343 1344 update_dot_dot = 1; 1345 status = ocfs2_find_files_on_disk("..", 2, &old_inode_parent, 1346 old_inode, 1347 &old_inode_dot_dot_res); 1348 if (status) { 1349 status = -EIO; 1350 goto bail; 1351 } 1352 1353 if (old_inode_parent != OCFS2_I(old_dir)->ip_blkno) { 1354 status = -EIO; 1355 goto bail; 1356 } 1357 1358 if (!new_inode && new_dir != old_dir && 1359 new_dir->i_nlink >= ocfs2_link_max(osb)) { 1360 status = -EMLINK; 1361 goto bail; 1362 } 1363 } 1364 1365 status = ocfs2_lookup_ino_from_name(old_dir, old_dentry->d_name.name, 1366 old_dentry->d_name.len, 1367 &old_de_ino); 1368 if (status) { 1369 status = -ENOENT; 1370 goto bail; 1371 } 1372 1373 /* 1374 * Check for inode number is _not_ due to possible IO errors. 1375 * We might rmdir the source, keep it as pwd of some process 1376 * and merrily kill the link to whatever was created under the 1377 * same name. Goodbye sticky bit ;-< 1378 */ 1379 if (old_de_ino != OCFS2_I(old_inode)->ip_blkno) { 1380 status = -ENOENT; 1381 goto bail; 1382 } 1383 1384 /* check if the target already exists (in which case we need 1385 * to delete it */ 1386 status = ocfs2_find_files_on_disk(new_dentry->d_name.name, 1387 new_dentry->d_name.len, 1388 &newfe_blkno, new_dir, 1389 &target_lookup_res); 1390 /* The only error we allow here is -ENOENT because the new 1391 * file not existing is perfectly valid. */ 1392 if ((status < 0) && (status != -ENOENT)) { 1393 /* If we cannot find the file specified we should just */ 1394 /* return the error... */ 1395 mlog_errno(status); 1396 goto bail; 1397 } 1398 if (status == 0) 1399 target_exists = 1; 1400 1401 if (!target_exists && new_inode) { 1402 /* 1403 * Target was unlinked by another node while we were 1404 * waiting to get to ocfs2_rename(). There isn't 1405 * anything we can do here to help the situation, so 1406 * bubble up the appropriate error. 1407 */ 1408 status = -ENOENT; 1409 goto bail; 1410 } 1411 1412 /* In case we need to overwrite an existing file, we blow it 1413 * away first */ 1414 if (target_exists) { 1415 /* VFS didn't think there existed an inode here, but 1416 * someone else in the cluster must have raced our 1417 * rename to create one. Today we error cleanly, in 1418 * the future we should consider calling iget to build 1419 * a new struct inode for this entry. */ 1420 if (!new_inode) { 1421 status = -EACCES; 1422 1423 trace_ocfs2_rename_target_exists(new_dentry->d_name.len, 1424 new_dentry->d_name.name); 1425 goto bail; 1426 } 1427 1428 if (OCFS2_I(new_inode)->ip_blkno != newfe_blkno) { 1429 status = -EACCES; 1430 1431 trace_ocfs2_rename_disagree( 1432 (unsigned long long)OCFS2_I(new_inode)->ip_blkno, 1433 (unsigned long long)newfe_blkno, 1434 OCFS2_I(new_inode)->ip_flags); 1435 goto bail; 1436 } 1437 1438 status = ocfs2_inode_lock(new_inode, &newfe_bh, 1); 1439 if (status < 0) { 1440 if (status != -ENOENT) 1441 mlog_errno(status); 1442 goto bail; 1443 } 1444 new_child_locked = 1; 1445 1446 status = ocfs2_remote_dentry_delete(new_dentry); 1447 if (status < 0) { 1448 mlog_errno(status); 1449 goto bail; 1450 } 1451 1452 newfe = (struct ocfs2_dinode *) newfe_bh->b_data; 1453 1454 trace_ocfs2_rename_over_existing( 1455 (unsigned long long)newfe_blkno, newfe_bh, newfe_bh ? 1456 (unsigned long long)newfe_bh->b_blocknr : 0ULL); 1457 1458 if (S_ISDIR(new_inode->i_mode) || (new_inode->i_nlink == 1)) { 1459 status = ocfs2_prepare_orphan_dir(osb, &orphan_dir, 1460 OCFS2_I(new_inode)->ip_blkno, 1461 orphan_name, &orphan_insert, 1462 false); 1463 if (status < 0) { 1464 mlog_errno(status); 1465 goto bail; 1466 } 1467 should_add_orphan = true; 1468 } 1469 } else { 1470 BUG_ON(d_inode(new_dentry->d_parent) != new_dir); 1471 1472 status = ocfs2_check_dir_for_entry(new_dir, 1473 new_dentry->d_name.name, 1474 new_dentry->d_name.len); 1475 if (status) 1476 goto bail; 1477 1478 status = ocfs2_prepare_dir_for_insert(osb, new_dir, new_dir_bh, 1479 new_dentry->d_name.name, 1480 new_dentry->d_name.len, 1481 &target_insert); 1482 if (status < 0) { 1483 mlog_errno(status); 1484 goto bail; 1485 } 1486 } 1487 1488 handle = ocfs2_start_trans(osb, ocfs2_rename_credits(osb->sb)); 1489 if (IS_ERR(handle)) { 1490 status = PTR_ERR(handle); 1491 handle = NULL; 1492 mlog_errno(status); 1493 goto bail; 1494 } 1495 1496 if (target_exists) { 1497 if (S_ISDIR(new_inode->i_mode)) { 1498 if (new_inode->i_nlink != 2 || 1499 !ocfs2_empty_dir(new_inode)) { 1500 status = -ENOTEMPTY; 1501 goto bail; 1502 } 1503 } 1504 status = ocfs2_journal_access_di(handle, INODE_CACHE(new_inode), 1505 newfe_bh, 1506 OCFS2_JOURNAL_ACCESS_WRITE); 1507 if (status < 0) { 1508 mlog_errno(status); 1509 goto bail; 1510 } 1511 1512 /* change the dirent to point to the correct inode */ 1513 status = ocfs2_update_entry(new_dir, handle, &target_lookup_res, 1514 old_inode); 1515 if (status < 0) { 1516 mlog_errno(status); 1517 goto bail; 1518 } 1519 inode_inc_iversion(new_dir); 1520 1521 if (S_ISDIR(new_inode->i_mode)) 1522 ocfs2_set_links_count(newfe, 0); 1523 else 1524 ocfs2_add_links_count(newfe, -1); 1525 ocfs2_journal_dirty(handle, newfe_bh); 1526 if (should_add_orphan) { 1527 status = ocfs2_orphan_add(osb, handle, new_inode, 1528 newfe_bh, orphan_name, 1529 &orphan_insert, orphan_dir, false); 1530 if (status < 0) { 1531 mlog_errno(status); 1532 goto bail; 1533 } 1534 } 1535 } else { 1536 /* if the name was not found in new_dir, add it now */ 1537 status = ocfs2_add_entry(handle, new_dentry, old_inode, 1538 OCFS2_I(old_inode)->ip_blkno, 1539 new_dir_bh, &target_insert); 1540 if (status < 0) { 1541 mlog_errno(status); 1542 goto bail; 1543 } 1544 } 1545 1546 inode_set_ctime_current(old_inode); 1547 mark_inode_dirty(old_inode); 1548 1549 status = ocfs2_journal_access_di(handle, INODE_CACHE(old_inode), 1550 old_inode_bh, 1551 OCFS2_JOURNAL_ACCESS_WRITE); 1552 if (status >= 0) { 1553 old_di = (struct ocfs2_dinode *) old_inode_bh->b_data; 1554 1555 old_di->i_ctime = cpu_to_le64(inode_get_ctime_sec(old_inode)); 1556 old_di->i_ctime_nsec = cpu_to_le32(inode_get_ctime_nsec(old_inode)); 1557 ocfs2_journal_dirty(handle, old_inode_bh); 1558 } else 1559 mlog_errno(status); 1560 1561 /* 1562 * Now that the name has been added to new_dir, remove the old name. 1563 * 1564 * We don't keep any directory entry context around until now 1565 * because the insert might have changed the type of directory 1566 * we're dealing with. 1567 */ 1568 status = ocfs2_find_entry(old_dentry->d_name.name, 1569 old_dentry->d_name.len, old_dir, 1570 &old_entry_lookup); 1571 if (status) { 1572 if (!is_journal_aborted(osb->journal->j_journal)) { 1573 ocfs2_error(osb->sb, "new entry %.*s is added, but old entry %.*s " 1574 "is not deleted.", 1575 new_dentry->d_name.len, new_dentry->d_name.name, 1576 old_dentry->d_name.len, old_dentry->d_name.name); 1577 } 1578 goto bail; 1579 } 1580 1581 status = ocfs2_delete_entry(handle, old_dir, &old_entry_lookup); 1582 if (status < 0) { 1583 mlog_errno(status); 1584 if (!is_journal_aborted(osb->journal->j_journal)) { 1585 ocfs2_error(osb->sb, "new entry %.*s is added, but old entry %.*s " 1586 "is not deleted.", 1587 new_dentry->d_name.len, new_dentry->d_name.name, 1588 old_dentry->d_name.len, old_dentry->d_name.name); 1589 } 1590 goto bail; 1591 } 1592 1593 if (new_inode) { 1594 drop_nlink(new_inode); 1595 inode_set_ctime_current(new_inode); 1596 } 1597 inode_set_mtime_to_ts(old_dir, inode_set_ctime_current(old_dir)); 1598 1599 if (update_dot_dot) { 1600 status = ocfs2_update_entry(old_inode, handle, 1601 &old_inode_dot_dot_res, new_dir); 1602 drop_nlink(old_dir); 1603 if (new_inode) { 1604 drop_nlink(new_inode); 1605 } else { 1606 inc_nlink(new_dir); 1607 mark_inode_dirty(new_dir); 1608 } 1609 } 1610 mark_inode_dirty(old_dir); 1611 ocfs2_mark_inode_dirty(handle, old_dir, old_dir_bh); 1612 if (new_inode) { 1613 mark_inode_dirty(new_inode); 1614 ocfs2_mark_inode_dirty(handle, new_inode, newfe_bh); 1615 } 1616 1617 if (old_dir != new_dir) { 1618 /* Keep the same times on both directories.*/ 1619 inode_set_mtime_to_ts(new_dir, 1620 inode_set_ctime_to_ts(new_dir, inode_get_ctime(old_dir))); 1621 1622 /* 1623 * This will also pick up the i_nlink change from the 1624 * block above. 1625 */ 1626 ocfs2_mark_inode_dirty(handle, new_dir, new_dir_bh); 1627 } 1628 1629 if (old_dir_nlink != old_dir->i_nlink) { 1630 if (!old_dir_bh) { 1631 mlog(ML_ERROR, "need to change nlink for old dir " 1632 "%llu from %d to %d but bh is NULL!\n", 1633 (unsigned long long)OCFS2_I(old_dir)->ip_blkno, 1634 (int)old_dir_nlink, old_dir->i_nlink); 1635 } else { 1636 struct ocfs2_dinode *fe; 1637 status = ocfs2_journal_access_di(handle, 1638 INODE_CACHE(old_dir), 1639 old_dir_bh, 1640 OCFS2_JOURNAL_ACCESS_WRITE); 1641 fe = (struct ocfs2_dinode *) old_dir_bh->b_data; 1642 ocfs2_set_links_count(fe, old_dir->i_nlink); 1643 ocfs2_journal_dirty(handle, old_dir_bh); 1644 } 1645 } 1646 ocfs2_dentry_move(old_dentry, new_dentry, old_dir, new_dir); 1647 status = 0; 1648 bail: 1649 if (handle) 1650 ocfs2_commit_trans(osb, handle); 1651 1652 if (orphan_dir) { 1653 /* This was locked for us in ocfs2_prepare_orphan_dir() */ 1654 ocfs2_inode_unlock(orphan_dir, 1); 1655 inode_unlock(orphan_dir); 1656 iput(orphan_dir); 1657 } 1658 1659 if (new_child_locked) 1660 ocfs2_inode_unlock(new_inode, 1); 1661 1662 if (old_child_locked) 1663 ocfs2_inode_unlock(old_inode, 1); 1664 1665 if (parents_locked) 1666 ocfs2_double_unlock(old_dir, new_dir); 1667 1668 if (rename_lock) 1669 ocfs2_rename_unlock(osb); 1670 1671 if (new_inode) 1672 sync_mapping_buffers(old_inode->i_mapping); 1673 1674 iput(new_inode); 1675 1676 ocfs2_free_dir_lookup_result(&target_lookup_res); 1677 ocfs2_free_dir_lookup_result(&old_entry_lookup); 1678 ocfs2_free_dir_lookup_result(&old_inode_dot_dot_res); 1679 ocfs2_free_dir_lookup_result(&orphan_insert); 1680 ocfs2_free_dir_lookup_result(&target_insert); 1681 1682 brelse(newfe_bh); 1683 brelse(old_inode_bh); 1684 brelse(old_dir_bh); 1685 brelse(new_dir_bh); 1686 1687 if (status) 1688 mlog_errno(status); 1689 1690 return status; 1691 } 1692 1693 /* 1694 * we expect i_size = strlen(symname). Copy symname into the file 1695 * data, including the null terminator. 1696 */ 1697 static int ocfs2_create_symlink_data(struct ocfs2_super *osb, 1698 handle_t *handle, 1699 struct inode *inode, 1700 const char *symname) 1701 { 1702 struct buffer_head **bhs = NULL; 1703 const char *c; 1704 struct super_block *sb = osb->sb; 1705 u64 p_blkno, p_blocks; 1706 int virtual, blocks, status, i, bytes_left; 1707 1708 bytes_left = i_size_read(inode) + 1; 1709 /* we can't trust i_blocks because we're actually going to 1710 * write i_size + 1 bytes. */ 1711 blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits; 1712 1713 trace_ocfs2_create_symlink_data((unsigned long long)inode->i_blocks, 1714 i_size_read(inode), blocks); 1715 1716 /* Sanity check -- make sure we're going to fit. */ 1717 if (bytes_left > 1718 ocfs2_clusters_to_bytes(sb, OCFS2_I(inode)->ip_clusters)) { 1719 status = -EIO; 1720 mlog_errno(status); 1721 goto bail; 1722 } 1723 1724 bhs = kcalloc(blocks, sizeof(struct buffer_head *), GFP_KERNEL); 1725 if (!bhs) { 1726 status = -ENOMEM; 1727 mlog_errno(status); 1728 goto bail; 1729 } 1730 1731 status = ocfs2_extent_map_get_blocks(inode, 0, &p_blkno, &p_blocks, 1732 NULL); 1733 if (status < 0) { 1734 mlog_errno(status); 1735 goto bail; 1736 } 1737 1738 /* links can never be larger than one cluster so we know this 1739 * is all going to be contiguous, but do a sanity check 1740 * anyway. */ 1741 if ((p_blocks << sb->s_blocksize_bits) < bytes_left) { 1742 status = -EIO; 1743 mlog_errno(status); 1744 goto bail; 1745 } 1746 1747 virtual = 0; 1748 while(bytes_left > 0) { 1749 c = &symname[virtual * sb->s_blocksize]; 1750 1751 bhs[virtual] = sb_getblk(sb, p_blkno); 1752 if (!bhs[virtual]) { 1753 status = -ENOMEM; 1754 mlog_errno(status); 1755 goto bail; 1756 } 1757 ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode), 1758 bhs[virtual]); 1759 1760 status = ocfs2_journal_access(handle, INODE_CACHE(inode), 1761 bhs[virtual], 1762 OCFS2_JOURNAL_ACCESS_CREATE); 1763 if (status < 0) { 1764 mlog_errno(status); 1765 goto bail; 1766 } 1767 1768 memset(bhs[virtual]->b_data, 0, sb->s_blocksize); 1769 1770 memcpy(bhs[virtual]->b_data, c, 1771 (bytes_left > sb->s_blocksize) ? sb->s_blocksize : 1772 bytes_left); 1773 1774 ocfs2_journal_dirty(handle, bhs[virtual]); 1775 1776 virtual++; 1777 p_blkno++; 1778 bytes_left -= sb->s_blocksize; 1779 } 1780 1781 status = 0; 1782 bail: 1783 1784 if (bhs) { 1785 for(i = 0; i < blocks; i++) 1786 brelse(bhs[i]); 1787 kfree(bhs); 1788 } 1789 1790 if (status) 1791 mlog_errno(status); 1792 return status; 1793 } 1794 1795 static int ocfs2_symlink(struct mnt_idmap *idmap, 1796 struct inode *dir, 1797 struct dentry *dentry, 1798 const char *symname) 1799 { 1800 int status, l, credits; 1801 u64 newsize; 1802 struct ocfs2_super *osb = NULL; 1803 struct inode *inode = NULL; 1804 struct super_block *sb; 1805 struct buffer_head *new_fe_bh = NULL; 1806 struct buffer_head *parent_fe_bh = NULL; 1807 struct ocfs2_dinode *fe = NULL; 1808 struct ocfs2_dinode *dirfe; 1809 handle_t *handle = NULL; 1810 struct ocfs2_alloc_context *inode_ac = NULL; 1811 struct ocfs2_alloc_context *data_ac = NULL; 1812 struct ocfs2_alloc_context *xattr_ac = NULL; 1813 int want_clusters = 0; 1814 int xattr_credits = 0; 1815 struct ocfs2_security_xattr_info si = { 1816 .name = NULL, 1817 .enable = 1, 1818 }; 1819 int did_quota = 0, did_quota_inode = 0; 1820 struct ocfs2_dir_lookup_result lookup = { NULL, }; 1821 sigset_t oldset; 1822 int did_block_signals = 0; 1823 struct ocfs2_dentry_lock *dl = NULL; 1824 1825 trace_ocfs2_symlink_begin(dir, dentry, symname, 1826 dentry->d_name.len, dentry->d_name.name); 1827 1828 status = dquot_initialize(dir); 1829 if (status) { 1830 mlog_errno(status); 1831 goto bail; 1832 } 1833 1834 sb = dir->i_sb; 1835 osb = OCFS2_SB(sb); 1836 1837 l = strlen(symname) + 1; 1838 1839 credits = ocfs2_calc_symlink_credits(sb); 1840 1841 /* lock the parent directory */ 1842 status = ocfs2_inode_lock(dir, &parent_fe_bh, 1); 1843 if (status < 0) { 1844 if (status != -ENOENT) 1845 mlog_errno(status); 1846 return status; 1847 } 1848 1849 dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data; 1850 if (!ocfs2_read_links_count(dirfe)) { 1851 /* can't make a file in a deleted directory. */ 1852 status = -ENOENT; 1853 goto bail; 1854 } 1855 1856 status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, 1857 dentry->d_name.len); 1858 if (status) 1859 goto bail; 1860 1861 status = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh, 1862 dentry->d_name.name, 1863 dentry->d_name.len, &lookup); 1864 if (status < 0) { 1865 mlog_errno(status); 1866 goto bail; 1867 } 1868 1869 status = ocfs2_reserve_new_inode(osb, &inode_ac); 1870 if (status < 0) { 1871 if (status != -ENOSPC) 1872 mlog_errno(status); 1873 goto bail; 1874 } 1875 1876 inode = ocfs2_get_init_inode(dir, S_IFLNK | S_IRWXUGO); 1877 if (IS_ERR(inode)) { 1878 status = PTR_ERR(inode); 1879 inode = NULL; 1880 mlog_errno(status); 1881 goto bail; 1882 } 1883 1884 /* get security xattr */ 1885 status = ocfs2_init_security_get(inode, dir, &dentry->d_name, &si); 1886 if (status) { 1887 if (status == -EOPNOTSUPP) 1888 si.enable = 0; 1889 else { 1890 mlog_errno(status); 1891 goto bail; 1892 } 1893 } 1894 1895 /* calculate meta data/clusters for setting security xattr */ 1896 if (si.enable) { 1897 status = ocfs2_calc_security_init(dir, &si, &want_clusters, 1898 &xattr_credits, &xattr_ac); 1899 if (status < 0) { 1900 mlog_errno(status); 1901 goto bail; 1902 } 1903 } 1904 1905 /* don't reserve bitmap space for fast symlinks. */ 1906 if (l > ocfs2_fast_symlink_chars(sb)) 1907 want_clusters += 1; 1908 1909 status = ocfs2_reserve_clusters(osb, want_clusters, &data_ac); 1910 if (status < 0) { 1911 if (status != -ENOSPC) 1912 mlog_errno(status); 1913 goto bail; 1914 } 1915 1916 handle = ocfs2_start_trans(osb, credits + xattr_credits); 1917 if (IS_ERR(handle)) { 1918 status = PTR_ERR(handle); 1919 handle = NULL; 1920 mlog_errno(status); 1921 goto bail; 1922 } 1923 1924 /* Starting to change things, restart is no longer possible. */ 1925 ocfs2_block_signals(&oldset); 1926 did_block_signals = 1; 1927 1928 status = dquot_alloc_inode(inode); 1929 if (status) 1930 goto bail; 1931 did_quota_inode = 1; 1932 1933 trace_ocfs2_symlink_create(dir, dentry, dentry->d_name.len, 1934 dentry->d_name.name, 1935 (unsigned long long)OCFS2_I(dir)->ip_blkno, 1936 inode->i_mode); 1937 1938 status = ocfs2_mknod_locked(osb, dir, inode, 1939 0, &new_fe_bh, parent_fe_bh, handle, 1940 inode_ac); 1941 if (status < 0) { 1942 mlog_errno(status); 1943 goto bail; 1944 } 1945 1946 fe = (struct ocfs2_dinode *) new_fe_bh->b_data; 1947 inode->i_rdev = 0; 1948 newsize = l - 1; 1949 inode->i_op = &ocfs2_symlink_inode_operations; 1950 inode_nohighmem(inode); 1951 if (l > ocfs2_fast_symlink_chars(sb)) { 1952 u32 offset = 0; 1953 1954 status = dquot_alloc_space_nodirty(inode, 1955 ocfs2_clusters_to_bytes(osb->sb, 1)); 1956 if (status) 1957 goto bail; 1958 did_quota = 1; 1959 inode->i_mapping->a_ops = &ocfs2_aops; 1960 status = ocfs2_add_inode_data(osb, inode, &offset, 1, 0, 1961 new_fe_bh, 1962 handle, data_ac, NULL, 1963 NULL); 1964 if (status < 0) { 1965 if (status != -ENOSPC && status != -EINTR) { 1966 mlog(ML_ERROR, 1967 "Failed to extend file to %llu\n", 1968 (unsigned long long)newsize); 1969 mlog_errno(status); 1970 status = -ENOSPC; 1971 } 1972 goto bail; 1973 } 1974 i_size_write(inode, newsize); 1975 inode->i_blocks = ocfs2_inode_sector_count(inode); 1976 } else { 1977 inode->i_mapping->a_ops = &ocfs2_fast_symlink_aops; 1978 memcpy((char *) fe->id2.i_symlink, symname, l); 1979 i_size_write(inode, newsize); 1980 inode->i_blocks = 0; 1981 } 1982 1983 status = ocfs2_mark_inode_dirty(handle, inode, new_fe_bh); 1984 if (status < 0) { 1985 mlog_errno(status); 1986 goto bail; 1987 } 1988 1989 if (!ocfs2_inode_is_fast_symlink(inode)) { 1990 status = ocfs2_create_symlink_data(osb, handle, inode, 1991 symname); 1992 if (status < 0) { 1993 mlog_errno(status); 1994 goto bail; 1995 } 1996 } 1997 1998 if (si.enable) { 1999 status = ocfs2_init_security_set(handle, inode, new_fe_bh, &si, 2000 xattr_ac, data_ac); 2001 if (status < 0) { 2002 mlog_errno(status); 2003 goto bail; 2004 } 2005 } 2006 2007 /* 2008 * Do this before adding the entry to the directory. We add 2009 * also set d_op after success so that ->d_iput() will cleanup 2010 * the dentry lock even if ocfs2_add_entry() fails below. 2011 */ 2012 status = ocfs2_dentry_attach_lock(dentry, inode, OCFS2_I(dir)->ip_blkno); 2013 if (status) { 2014 mlog_errno(status); 2015 goto bail; 2016 } 2017 2018 dl = dentry->d_fsdata; 2019 2020 status = ocfs2_add_entry(handle, dentry, inode, 2021 le64_to_cpu(fe->i_blkno), parent_fe_bh, 2022 &lookup); 2023 if (status < 0) { 2024 mlog_errno(status); 2025 goto bail; 2026 } 2027 2028 insert_inode_hash(inode); 2029 d_instantiate(dentry, inode); 2030 bail: 2031 if (status < 0 && did_quota) 2032 dquot_free_space_nodirty(inode, 2033 ocfs2_clusters_to_bytes(osb->sb, 1)); 2034 if (status < 0 && did_quota_inode) 2035 dquot_free_inode(inode); 2036 if (handle) { 2037 if (status < 0 && fe) 2038 ocfs2_set_links_count(fe, 0); 2039 ocfs2_commit_trans(osb, handle); 2040 } 2041 2042 ocfs2_inode_unlock(dir, 1); 2043 if (did_block_signals) 2044 ocfs2_unblock_signals(&oldset); 2045 2046 brelse(new_fe_bh); 2047 brelse(parent_fe_bh); 2048 kfree(si.value); 2049 ocfs2_free_dir_lookup_result(&lookup); 2050 if (inode_ac) 2051 ocfs2_free_alloc_context(inode_ac); 2052 if (data_ac) 2053 ocfs2_free_alloc_context(data_ac); 2054 if (xattr_ac) 2055 ocfs2_free_alloc_context(xattr_ac); 2056 if ((status < 0) && inode) { 2057 if (dl) 2058 ocfs2_cleanup_add_entry_failure(osb, dentry, inode); 2059 2060 OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_ORPHAN_DIR; 2061 clear_nlink(inode); 2062 iput(inode); 2063 } 2064 2065 if (status) 2066 mlog_errno(status); 2067 2068 return status; 2069 } 2070 2071 static int ocfs2_blkno_stringify(u64 blkno, char *name) 2072 { 2073 int status, namelen; 2074 2075 namelen = snprintf(name, OCFS2_ORPHAN_NAMELEN + 1, "%016llx", 2076 (long long)blkno); 2077 if (namelen <= 0) { 2078 if (namelen) 2079 status = namelen; 2080 else 2081 status = -EINVAL; 2082 mlog_errno(status); 2083 goto bail; 2084 } 2085 if (namelen != OCFS2_ORPHAN_NAMELEN) { 2086 status = -EINVAL; 2087 mlog_errno(status); 2088 goto bail; 2089 } 2090 2091 trace_ocfs2_blkno_stringify(blkno, name, namelen); 2092 2093 status = 0; 2094 bail: 2095 if (status < 0) 2096 mlog_errno(status); 2097 return status; 2098 } 2099 2100 static int ocfs2_lookup_lock_orphan_dir(struct ocfs2_super *osb, 2101 struct inode **ret_orphan_dir, 2102 struct buffer_head **ret_orphan_dir_bh) 2103 { 2104 struct inode *orphan_dir_inode; 2105 struct buffer_head *orphan_dir_bh = NULL; 2106 int ret = 0; 2107 2108 orphan_dir_inode = ocfs2_get_system_file_inode(osb, 2109 ORPHAN_DIR_SYSTEM_INODE, 2110 osb->slot_num); 2111 if (!orphan_dir_inode) { 2112 ret = -ENOENT; 2113 mlog_errno(ret); 2114 return ret; 2115 } 2116 2117 inode_lock(orphan_dir_inode); 2118 2119 ret = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1); 2120 if (ret < 0) { 2121 inode_unlock(orphan_dir_inode); 2122 iput(orphan_dir_inode); 2123 2124 mlog_errno(ret); 2125 return ret; 2126 } 2127 2128 *ret_orphan_dir = orphan_dir_inode; 2129 *ret_orphan_dir_bh = orphan_dir_bh; 2130 2131 return 0; 2132 } 2133 2134 static int __ocfs2_prepare_orphan_dir(struct inode *orphan_dir_inode, 2135 struct buffer_head *orphan_dir_bh, 2136 u64 blkno, 2137 char *name, 2138 struct ocfs2_dir_lookup_result *lookup, 2139 bool dio) 2140 { 2141 int ret; 2142 struct ocfs2_super *osb = OCFS2_SB(orphan_dir_inode->i_sb); 2143 int namelen = dio ? 2144 (OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN) : 2145 OCFS2_ORPHAN_NAMELEN; 2146 2147 if (dio) { 2148 ret = snprintf(name, OCFS2_DIO_ORPHAN_PREFIX_LEN + 1, "%s", 2149 OCFS2_DIO_ORPHAN_PREFIX); 2150 if (ret != OCFS2_DIO_ORPHAN_PREFIX_LEN) { 2151 ret = -EINVAL; 2152 mlog_errno(ret); 2153 return ret; 2154 } 2155 2156 ret = ocfs2_blkno_stringify(blkno, 2157 name + OCFS2_DIO_ORPHAN_PREFIX_LEN); 2158 } else 2159 ret = ocfs2_blkno_stringify(blkno, name); 2160 if (ret < 0) { 2161 mlog_errno(ret); 2162 return ret; 2163 } 2164 2165 ret = ocfs2_prepare_dir_for_insert(osb, orphan_dir_inode, 2166 orphan_dir_bh, name, 2167 namelen, lookup); 2168 if (ret < 0) { 2169 mlog_errno(ret); 2170 return ret; 2171 } 2172 2173 return 0; 2174 } 2175 2176 /** 2177 * ocfs2_prepare_orphan_dir() - Prepare an orphan directory for 2178 * insertion of an orphan. 2179 * @osb: ocfs2 file system 2180 * @ret_orphan_dir: Orphan dir inode - returned locked! 2181 * @blkno: Actual block number of the inode to be inserted into orphan dir. 2182 * @lookup: dir lookup result, to be passed back into functions like 2183 * ocfs2_orphan_add 2184 * 2185 * Returns zero on success and the ret_orphan_dir, name and lookup 2186 * fields will be populated. 2187 * 2188 * Returns non-zero on failure. 2189 */ 2190 static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb, 2191 struct inode **ret_orphan_dir, 2192 u64 blkno, 2193 char *name, 2194 struct ocfs2_dir_lookup_result *lookup, 2195 bool dio) 2196 { 2197 struct inode *orphan_dir_inode = NULL; 2198 struct buffer_head *orphan_dir_bh = NULL; 2199 int ret = 0; 2200 2201 ret = ocfs2_lookup_lock_orphan_dir(osb, &orphan_dir_inode, 2202 &orphan_dir_bh); 2203 if (ret < 0) { 2204 mlog_errno(ret); 2205 return ret; 2206 } 2207 2208 ret = __ocfs2_prepare_orphan_dir(orphan_dir_inode, orphan_dir_bh, 2209 blkno, name, lookup, dio); 2210 if (ret < 0) { 2211 mlog_errno(ret); 2212 goto out; 2213 } 2214 2215 *ret_orphan_dir = orphan_dir_inode; 2216 2217 out: 2218 brelse(orphan_dir_bh); 2219 2220 if (ret) { 2221 ocfs2_inode_unlock(orphan_dir_inode, 1); 2222 inode_unlock(orphan_dir_inode); 2223 iput(orphan_dir_inode); 2224 } 2225 2226 if (ret) 2227 mlog_errno(ret); 2228 return ret; 2229 } 2230 2231 static int ocfs2_orphan_add(struct ocfs2_super *osb, 2232 handle_t *handle, 2233 struct inode *inode, 2234 struct buffer_head *fe_bh, 2235 char *name, 2236 struct ocfs2_dir_lookup_result *lookup, 2237 struct inode *orphan_dir_inode, 2238 bool dio) 2239 { 2240 struct buffer_head *orphan_dir_bh = NULL; 2241 int status = 0; 2242 struct ocfs2_dinode *orphan_fe; 2243 struct ocfs2_dinode *fe = (struct ocfs2_dinode *) fe_bh->b_data; 2244 int namelen = dio ? 2245 (OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN) : 2246 OCFS2_ORPHAN_NAMELEN; 2247 2248 trace_ocfs2_orphan_add_begin( 2249 (unsigned long long)OCFS2_I(inode)->ip_blkno); 2250 2251 status = ocfs2_read_inode_block(orphan_dir_inode, &orphan_dir_bh); 2252 if (status < 0) { 2253 mlog_errno(status); 2254 goto leave; 2255 } 2256 2257 status = ocfs2_journal_access_di(handle, 2258 INODE_CACHE(orphan_dir_inode), 2259 orphan_dir_bh, 2260 OCFS2_JOURNAL_ACCESS_WRITE); 2261 if (status < 0) { 2262 mlog_errno(status); 2263 goto leave; 2264 } 2265 2266 /* 2267 * We're going to journal the change of i_flags and i_orphaned_slot. 2268 * It's safe anyway, though some callers may duplicate the journaling. 2269 * Journaling within the func just make the logic look more 2270 * straightforward. 2271 */ 2272 status = ocfs2_journal_access_di(handle, 2273 INODE_CACHE(inode), 2274 fe_bh, 2275 OCFS2_JOURNAL_ACCESS_WRITE); 2276 if (status < 0) { 2277 mlog_errno(status); 2278 goto leave; 2279 } 2280 2281 /* we're a cluster, and nlink can change on disk from 2282 * underneath us... */ 2283 orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data; 2284 if (S_ISDIR(inode->i_mode)) 2285 ocfs2_add_links_count(orphan_fe, 1); 2286 set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe)); 2287 ocfs2_journal_dirty(handle, orphan_dir_bh); 2288 2289 status = __ocfs2_add_entry(handle, orphan_dir_inode, name, 2290 namelen, inode, 2291 OCFS2_I(inode)->ip_blkno, 2292 orphan_dir_bh, lookup); 2293 if (status < 0) { 2294 mlog_errno(status); 2295 goto rollback; 2296 } 2297 2298 if (dio) { 2299 /* Update flag OCFS2_DIO_ORPHANED_FL and record the orphan 2300 * slot. 2301 */ 2302 fe->i_flags |= cpu_to_le32(OCFS2_DIO_ORPHANED_FL); 2303 fe->i_dio_orphaned_slot = cpu_to_le16(osb->slot_num); 2304 } else { 2305 fe->i_flags |= cpu_to_le32(OCFS2_ORPHANED_FL); 2306 OCFS2_I(inode)->ip_flags &= ~OCFS2_INODE_SKIP_ORPHAN_DIR; 2307 2308 /* Record which orphan dir our inode now resides 2309 * in. delete_inode will use this to determine which orphan 2310 * dir to lock. */ 2311 fe->i_orphaned_slot = cpu_to_le16(osb->slot_num); 2312 } 2313 2314 ocfs2_journal_dirty(handle, fe_bh); 2315 2316 trace_ocfs2_orphan_add_end((unsigned long long)OCFS2_I(inode)->ip_blkno, 2317 osb->slot_num); 2318 2319 rollback: 2320 if (status < 0) { 2321 if (S_ISDIR(inode->i_mode)) 2322 ocfs2_add_links_count(orphan_fe, -1); 2323 set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe)); 2324 } 2325 2326 leave: 2327 brelse(orphan_dir_bh); 2328 2329 return status; 2330 } 2331 2332 /* unlike orphan_add, we expect the orphan dir to already be locked here. */ 2333 int ocfs2_orphan_del(struct ocfs2_super *osb, 2334 handle_t *handle, 2335 struct inode *orphan_dir_inode, 2336 struct inode *inode, 2337 struct buffer_head *orphan_dir_bh, 2338 bool dio) 2339 { 2340 char name[OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN + 1]; 2341 struct ocfs2_dinode *orphan_fe; 2342 int status = 0; 2343 struct ocfs2_dir_lookup_result lookup = { NULL, }; 2344 2345 if (dio) { 2346 status = snprintf(name, OCFS2_DIO_ORPHAN_PREFIX_LEN + 1, "%s", 2347 OCFS2_DIO_ORPHAN_PREFIX); 2348 if (status != OCFS2_DIO_ORPHAN_PREFIX_LEN) { 2349 status = -EINVAL; 2350 mlog_errno(status); 2351 return status; 2352 } 2353 2354 status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, 2355 name + OCFS2_DIO_ORPHAN_PREFIX_LEN); 2356 } else 2357 status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, name); 2358 if (status < 0) { 2359 mlog_errno(status); 2360 goto leave; 2361 } 2362 2363 trace_ocfs2_orphan_del( 2364 (unsigned long long)OCFS2_I(orphan_dir_inode)->ip_blkno, 2365 name, strlen(name)); 2366 2367 status = ocfs2_journal_access_di(handle, 2368 INODE_CACHE(orphan_dir_inode), 2369 orphan_dir_bh, 2370 OCFS2_JOURNAL_ACCESS_WRITE); 2371 if (status < 0) { 2372 mlog_errno(status); 2373 goto leave; 2374 } 2375 2376 /* find it's spot in the orphan directory */ 2377 status = ocfs2_find_entry(name, strlen(name), orphan_dir_inode, 2378 &lookup); 2379 if (status) { 2380 mlog_errno(status); 2381 goto leave; 2382 } 2383 2384 /* remove it from the orphan directory */ 2385 status = ocfs2_delete_entry(handle, orphan_dir_inode, &lookup); 2386 if (status < 0) { 2387 mlog_errno(status); 2388 goto leave; 2389 } 2390 2391 /* do the i_nlink dance! :) */ 2392 orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data; 2393 if (S_ISDIR(inode->i_mode)) 2394 ocfs2_add_links_count(orphan_fe, -1); 2395 set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe)); 2396 ocfs2_journal_dirty(handle, orphan_dir_bh); 2397 2398 leave: 2399 ocfs2_free_dir_lookup_result(&lookup); 2400 2401 if (status) 2402 mlog_errno(status); 2403 return status; 2404 } 2405 2406 /** 2407 * ocfs2_prep_new_orphaned_file() - Prepare the orphan dir to receive a newly 2408 * allocated file. This is different from the typical 'add to orphan dir' 2409 * operation in that the inode does not yet exist. This is a problem because 2410 * the orphan dir stringifies the inode block number to come up with it's 2411 * dirent. Obviously if the inode does not yet exist we have a chicken and egg 2412 * problem. This function works around it by calling deeper into the orphan 2413 * and suballoc code than other callers. Use this only by necessity. 2414 * @dir: The directory which this inode will ultimately wind up under - not the 2415 * orphan dir! 2416 * @dir_bh: buffer_head the @dir inode block 2417 * @orphan_name: string of length (CFS2_ORPHAN_NAMELEN + 1). Will be filled 2418 * with the string to be used for orphan dirent. Pass back to the orphan dir 2419 * code. 2420 * @ret_orphan_dir: orphan dir inode returned to be passed back into orphan 2421 * dir code. 2422 * @ret_di_blkno: block number where the new inode will be allocated. 2423 * @orphan_insert: Dir insert context to be passed back into orphan dir code. 2424 * @ret_inode_ac: Inode alloc context to be passed back to the allocator. 2425 * 2426 * Returns zero on success and the ret_orphan_dir, name and lookup 2427 * fields will be populated. 2428 * 2429 * Returns non-zero on failure. 2430 */ 2431 static int ocfs2_prep_new_orphaned_file(struct inode *dir, 2432 struct buffer_head *dir_bh, 2433 char *orphan_name, 2434 struct inode **ret_orphan_dir, 2435 u64 *ret_di_blkno, 2436 struct ocfs2_dir_lookup_result *orphan_insert, 2437 struct ocfs2_alloc_context **ret_inode_ac) 2438 { 2439 int ret; 2440 u64 di_blkno; 2441 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 2442 struct inode *orphan_dir = NULL; 2443 struct buffer_head *orphan_dir_bh = NULL; 2444 struct ocfs2_alloc_context *inode_ac = NULL; 2445 2446 ret = ocfs2_lookup_lock_orphan_dir(osb, &orphan_dir, &orphan_dir_bh); 2447 if (ret < 0) { 2448 mlog_errno(ret); 2449 return ret; 2450 } 2451 2452 /* reserve an inode spot */ 2453 ret = ocfs2_reserve_new_inode(osb, &inode_ac); 2454 if (ret < 0) { 2455 if (ret != -ENOSPC) 2456 mlog_errno(ret); 2457 goto out; 2458 } 2459 2460 ret = ocfs2_find_new_inode_loc(dir, dir_bh, inode_ac, 2461 &di_blkno); 2462 if (ret) { 2463 mlog_errno(ret); 2464 goto out; 2465 } 2466 2467 ret = __ocfs2_prepare_orphan_dir(orphan_dir, orphan_dir_bh, 2468 di_blkno, orphan_name, orphan_insert, 2469 false); 2470 if (ret < 0) { 2471 mlog_errno(ret); 2472 goto out; 2473 } 2474 2475 out: 2476 if (ret == 0) { 2477 *ret_orphan_dir = orphan_dir; 2478 *ret_di_blkno = di_blkno; 2479 *ret_inode_ac = inode_ac; 2480 /* 2481 * orphan_name and orphan_insert are already up to 2482 * date via prepare_orphan_dir 2483 */ 2484 } else { 2485 /* Unroll reserve_new_inode* */ 2486 if (inode_ac) 2487 ocfs2_free_alloc_context(inode_ac); 2488 2489 /* Unroll orphan dir locking */ 2490 inode_unlock(orphan_dir); 2491 ocfs2_inode_unlock(orphan_dir, 1); 2492 iput(orphan_dir); 2493 } 2494 2495 brelse(orphan_dir_bh); 2496 2497 return ret; 2498 } 2499 2500 int ocfs2_create_inode_in_orphan(struct inode *dir, 2501 int mode, 2502 struct inode **new_inode) 2503 { 2504 int status, did_quota_inode = 0; 2505 struct inode *inode = NULL; 2506 struct inode *orphan_dir = NULL; 2507 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 2508 handle_t *handle = NULL; 2509 char orphan_name[OCFS2_ORPHAN_NAMELEN + 1]; 2510 struct buffer_head *parent_di_bh = NULL; 2511 struct buffer_head *new_di_bh = NULL; 2512 struct ocfs2_alloc_context *inode_ac = NULL; 2513 struct ocfs2_dir_lookup_result orphan_insert = { NULL, }; 2514 u64 di_blkno, suballoc_loc; 2515 u16 suballoc_bit; 2516 2517 status = ocfs2_inode_lock(dir, &parent_di_bh, 1); 2518 if (status < 0) { 2519 if (status != -ENOENT) 2520 mlog_errno(status); 2521 return status; 2522 } 2523 2524 status = ocfs2_prep_new_orphaned_file(dir, parent_di_bh, 2525 orphan_name, &orphan_dir, 2526 &di_blkno, &orphan_insert, &inode_ac); 2527 if (status < 0) { 2528 if (status != -ENOSPC) 2529 mlog_errno(status); 2530 goto leave; 2531 } 2532 2533 inode = ocfs2_get_init_inode(dir, mode); 2534 if (IS_ERR(inode)) { 2535 status = PTR_ERR(inode); 2536 inode = NULL; 2537 mlog_errno(status); 2538 goto leave; 2539 } 2540 2541 handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb, 0, 0)); 2542 if (IS_ERR(handle)) { 2543 status = PTR_ERR(handle); 2544 handle = NULL; 2545 mlog_errno(status); 2546 goto leave; 2547 } 2548 2549 status = dquot_alloc_inode(inode); 2550 if (status) 2551 goto leave; 2552 did_quota_inode = 1; 2553 2554 status = ocfs2_claim_new_inode_at_loc(handle, dir, inode_ac, 2555 &suballoc_loc, 2556 &suballoc_bit, di_blkno); 2557 if (status < 0) { 2558 mlog_errno(status); 2559 goto leave; 2560 } 2561 2562 clear_nlink(inode); 2563 /* do the real work now. */ 2564 status = __ocfs2_mknod_locked(dir, inode, 2565 0, &new_di_bh, parent_di_bh, handle, 2566 inode_ac, di_blkno, suballoc_loc, 2567 suballoc_bit); 2568 if (status < 0) { 2569 mlog_errno(status); 2570 goto leave; 2571 } 2572 2573 status = ocfs2_orphan_add(osb, handle, inode, new_di_bh, orphan_name, 2574 &orphan_insert, orphan_dir, false); 2575 if (status < 0) { 2576 mlog_errno(status); 2577 goto leave; 2578 } 2579 2580 /* get open lock so that only nodes can't remove it from orphan dir. */ 2581 status = ocfs2_open_lock(inode); 2582 if (status < 0) 2583 mlog_errno(status); 2584 2585 insert_inode_hash(inode); 2586 leave: 2587 if (status < 0 && did_quota_inode) 2588 dquot_free_inode(inode); 2589 if (handle) 2590 ocfs2_commit_trans(osb, handle); 2591 2592 if (orphan_dir) { 2593 /* This was locked for us in ocfs2_prepare_orphan_dir() */ 2594 ocfs2_inode_unlock(orphan_dir, 1); 2595 inode_unlock(orphan_dir); 2596 iput(orphan_dir); 2597 } 2598 2599 if ((status < 0) && inode) { 2600 clear_nlink(inode); 2601 iput(inode); 2602 } 2603 2604 if (inode_ac) 2605 ocfs2_free_alloc_context(inode_ac); 2606 2607 brelse(new_di_bh); 2608 2609 if (!status) 2610 *new_inode = inode; 2611 2612 ocfs2_free_dir_lookup_result(&orphan_insert); 2613 2614 ocfs2_inode_unlock(dir, 1); 2615 brelse(parent_di_bh); 2616 return status; 2617 } 2618 2619 int ocfs2_add_inode_to_orphan(struct ocfs2_super *osb, 2620 struct inode *inode) 2621 { 2622 char orphan_name[OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN + 1]; 2623 struct inode *orphan_dir_inode = NULL; 2624 struct ocfs2_dir_lookup_result orphan_insert = { NULL, }; 2625 struct buffer_head *di_bh = NULL; 2626 int status = 0; 2627 handle_t *handle = NULL; 2628 struct ocfs2_dinode *di = NULL; 2629 2630 status = ocfs2_inode_lock(inode, &di_bh, 1); 2631 if (status < 0) { 2632 mlog_errno(status); 2633 goto bail; 2634 } 2635 2636 di = (struct ocfs2_dinode *) di_bh->b_data; 2637 /* 2638 * Another append dio crashed? 2639 * If so, manually recover it first. 2640 */ 2641 if (unlikely(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL))) { 2642 status = ocfs2_truncate_file(inode, di_bh, i_size_read(inode)); 2643 if (status < 0) { 2644 if (status != -ENOSPC) 2645 mlog_errno(status); 2646 goto bail_unlock_inode; 2647 } 2648 2649 status = ocfs2_del_inode_from_orphan(osb, inode, di_bh, 0, 0); 2650 if (status < 0) { 2651 mlog_errno(status); 2652 goto bail_unlock_inode; 2653 } 2654 } 2655 2656 status = ocfs2_prepare_orphan_dir(osb, &orphan_dir_inode, 2657 OCFS2_I(inode)->ip_blkno, 2658 orphan_name, 2659 &orphan_insert, 2660 true); 2661 if (status < 0) { 2662 mlog_errno(status); 2663 goto bail_unlock_inode; 2664 } 2665 2666 handle = ocfs2_start_trans(osb, 2667 OCFS2_INODE_ADD_TO_ORPHAN_CREDITS); 2668 if (IS_ERR(handle)) { 2669 status = PTR_ERR(handle); 2670 goto bail_unlock_orphan; 2671 } 2672 2673 status = ocfs2_orphan_add(osb, handle, inode, di_bh, orphan_name, 2674 &orphan_insert, orphan_dir_inode, true); 2675 if (status) 2676 mlog_errno(status); 2677 2678 ocfs2_commit_trans(osb, handle); 2679 2680 bail_unlock_orphan: 2681 ocfs2_inode_unlock(orphan_dir_inode, 1); 2682 inode_unlock(orphan_dir_inode); 2683 iput(orphan_dir_inode); 2684 2685 ocfs2_free_dir_lookup_result(&orphan_insert); 2686 2687 bail_unlock_inode: 2688 ocfs2_inode_unlock(inode, 1); 2689 brelse(di_bh); 2690 2691 bail: 2692 return status; 2693 } 2694 2695 int ocfs2_del_inode_from_orphan(struct ocfs2_super *osb, 2696 struct inode *inode, struct buffer_head *di_bh, 2697 int update_isize, loff_t end) 2698 { 2699 struct inode *orphan_dir_inode = NULL; 2700 struct buffer_head *orphan_dir_bh = NULL; 2701 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; 2702 handle_t *handle = NULL; 2703 int status = 0; 2704 2705 orphan_dir_inode = ocfs2_get_system_file_inode(osb, 2706 ORPHAN_DIR_SYSTEM_INODE, 2707 le16_to_cpu(di->i_dio_orphaned_slot)); 2708 if (!orphan_dir_inode) { 2709 status = -ENOENT; 2710 mlog_errno(status); 2711 goto bail; 2712 } 2713 2714 inode_lock(orphan_dir_inode); 2715 status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1); 2716 if (status < 0) { 2717 inode_unlock(orphan_dir_inode); 2718 iput(orphan_dir_inode); 2719 mlog_errno(status); 2720 goto bail; 2721 } 2722 2723 handle = ocfs2_start_trans(osb, 2724 OCFS2_INODE_DEL_FROM_ORPHAN_CREDITS); 2725 if (IS_ERR(handle)) { 2726 status = PTR_ERR(handle); 2727 goto bail_unlock_orphan; 2728 } 2729 2730 BUG_ON(!(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL))); 2731 2732 status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, 2733 inode, orphan_dir_bh, true); 2734 if (status < 0) { 2735 mlog_errno(status); 2736 goto bail_commit; 2737 } 2738 2739 status = ocfs2_journal_access_di(handle, 2740 INODE_CACHE(inode), 2741 di_bh, 2742 OCFS2_JOURNAL_ACCESS_WRITE); 2743 if (status < 0) { 2744 mlog_errno(status); 2745 goto bail_commit; 2746 } 2747 2748 di->i_flags &= ~cpu_to_le32(OCFS2_DIO_ORPHANED_FL); 2749 di->i_dio_orphaned_slot = 0; 2750 2751 if (update_isize) { 2752 status = ocfs2_set_inode_size(handle, inode, di_bh, end); 2753 if (status) 2754 mlog_errno(status); 2755 } else 2756 ocfs2_journal_dirty(handle, di_bh); 2757 2758 bail_commit: 2759 ocfs2_commit_trans(osb, handle); 2760 2761 bail_unlock_orphan: 2762 ocfs2_inode_unlock(orphan_dir_inode, 1); 2763 inode_unlock(orphan_dir_inode); 2764 brelse(orphan_dir_bh); 2765 iput(orphan_dir_inode); 2766 2767 bail: 2768 return status; 2769 } 2770 2771 int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, 2772 struct inode *inode, 2773 struct dentry *dentry) 2774 { 2775 int status = 0; 2776 struct buffer_head *parent_di_bh = NULL; 2777 handle_t *handle = NULL; 2778 struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); 2779 struct ocfs2_dinode *dir_di, *di; 2780 struct inode *orphan_dir_inode = NULL; 2781 struct buffer_head *orphan_dir_bh = NULL; 2782 struct buffer_head *di_bh = NULL; 2783 struct ocfs2_dir_lookup_result lookup = { NULL, }; 2784 2785 trace_ocfs2_mv_orphaned_inode_to_new(dir, dentry, 2786 dentry->d_name.len, dentry->d_name.name, 2787 (unsigned long long)OCFS2_I(dir)->ip_blkno, 2788 (unsigned long long)OCFS2_I(inode)->ip_blkno); 2789 2790 status = ocfs2_inode_lock(dir, &parent_di_bh, 1); 2791 if (status < 0) { 2792 if (status != -ENOENT) 2793 mlog_errno(status); 2794 return status; 2795 } 2796 2797 dir_di = (struct ocfs2_dinode *) parent_di_bh->b_data; 2798 if (!dir_di->i_links_count) { 2799 /* can't make a file in a deleted directory. */ 2800 status = -ENOENT; 2801 goto leave; 2802 } 2803 2804 status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, 2805 dentry->d_name.len); 2806 if (status) 2807 goto leave; 2808 2809 /* get a spot inside the dir. */ 2810 status = ocfs2_prepare_dir_for_insert(osb, dir, parent_di_bh, 2811 dentry->d_name.name, 2812 dentry->d_name.len, &lookup); 2813 if (status < 0) { 2814 mlog_errno(status); 2815 goto leave; 2816 } 2817 2818 orphan_dir_inode = ocfs2_get_system_file_inode(osb, 2819 ORPHAN_DIR_SYSTEM_INODE, 2820 osb->slot_num); 2821 if (!orphan_dir_inode) { 2822 status = -ENOENT; 2823 mlog_errno(status); 2824 goto leave; 2825 } 2826 2827 inode_lock(orphan_dir_inode); 2828 2829 status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1); 2830 if (status < 0) { 2831 mlog_errno(status); 2832 inode_unlock(orphan_dir_inode); 2833 iput(orphan_dir_inode); 2834 goto leave; 2835 } 2836 2837 status = ocfs2_read_inode_block(inode, &di_bh); 2838 if (status < 0) { 2839 mlog_errno(status); 2840 goto orphan_unlock; 2841 } 2842 2843 handle = ocfs2_start_trans(osb, ocfs2_rename_credits(osb->sb)); 2844 if (IS_ERR(handle)) { 2845 status = PTR_ERR(handle); 2846 handle = NULL; 2847 mlog_errno(status); 2848 goto orphan_unlock; 2849 } 2850 2851 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), 2852 di_bh, OCFS2_JOURNAL_ACCESS_WRITE); 2853 if (status < 0) { 2854 mlog_errno(status); 2855 goto out_commit; 2856 } 2857 2858 status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, inode, 2859 orphan_dir_bh, false); 2860 if (status < 0) { 2861 mlog_errno(status); 2862 goto out_commit; 2863 } 2864 2865 di = (struct ocfs2_dinode *)di_bh->b_data; 2866 di->i_flags &= ~cpu_to_le32(OCFS2_ORPHANED_FL); 2867 di->i_orphaned_slot = 0; 2868 set_nlink(inode, 1); 2869 ocfs2_set_links_count(di, inode->i_nlink); 2870 ocfs2_update_inode_fsync_trans(handle, inode, 1); 2871 ocfs2_journal_dirty(handle, di_bh); 2872 2873 status = ocfs2_add_entry(handle, dentry, inode, 2874 OCFS2_I(inode)->ip_blkno, parent_di_bh, 2875 &lookup); 2876 if (status < 0) { 2877 mlog_errno(status); 2878 goto out_commit; 2879 } 2880 2881 status = ocfs2_dentry_attach_lock(dentry, inode, 2882 OCFS2_I(dir)->ip_blkno); 2883 if (status) { 2884 mlog_errno(status); 2885 goto out_commit; 2886 } 2887 2888 d_instantiate(dentry, inode); 2889 status = 0; 2890 out_commit: 2891 ocfs2_commit_trans(osb, handle); 2892 orphan_unlock: 2893 ocfs2_inode_unlock(orphan_dir_inode, 1); 2894 inode_unlock(orphan_dir_inode); 2895 iput(orphan_dir_inode); 2896 leave: 2897 2898 ocfs2_inode_unlock(dir, 1); 2899 2900 brelse(di_bh); 2901 brelse(parent_di_bh); 2902 brelse(orphan_dir_bh); 2903 2904 ocfs2_free_dir_lookup_result(&lookup); 2905 2906 if (status) 2907 mlog_errno(status); 2908 2909 return status; 2910 } 2911 2912 const struct inode_operations ocfs2_dir_iops = { 2913 .create = ocfs2_create, 2914 .lookup = ocfs2_lookup, 2915 .link = ocfs2_link, 2916 .unlink = ocfs2_unlink, 2917 .rmdir = ocfs2_unlink, 2918 .symlink = ocfs2_symlink, 2919 .mkdir = ocfs2_mkdir, 2920 .mknod = ocfs2_mknod, 2921 .rename = ocfs2_rename, 2922 .setattr = ocfs2_setattr, 2923 .getattr = ocfs2_getattr, 2924 .permission = ocfs2_permission, 2925 .listxattr = ocfs2_listxattr, 2926 .fiemap = ocfs2_fiemap, 2927 .get_inode_acl = ocfs2_iop_get_acl, 2928 .set_acl = ocfs2_iop_set_acl, 2929 .fileattr_get = ocfs2_fileattr_get, 2930 .fileattr_set = ocfs2_fileattr_set, 2931 }; 2932