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