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