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