diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_iops.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 1df48209d60a..215158cbac43 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -437,29 +437,33 @@ xfs_vn_symlink( | |||
437 | struct dentry *dentry, | 437 | struct dentry *dentry, |
438 | const char *symname) | 438 | const char *symname) |
439 | { | 439 | { |
440 | struct inode *ip; | 440 | struct inode *inode; |
441 | bhv_vnode_t *cvp; /* used to lookup symlink to put in dentry */ | 441 | struct xfs_inode *cip = NULL; |
442 | int error; | 442 | int error; |
443 | mode_t mode; | 443 | mode_t mode; |
444 | 444 | ||
445 | cvp = NULL; | ||
446 | |||
447 | mode = S_IFLNK | | 445 | mode = S_IFLNK | |
448 | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); | 446 | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); |
449 | 447 | ||
450 | error = xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, | 448 | error = xfs_symlink(XFS_I(dir), dentry, (char *)symname, mode, |
451 | &cvp, NULL); | 449 | &cip, NULL); |
452 | if (likely(!error && cvp)) { | 450 | if (unlikely(error)) |
453 | error = xfs_init_security(cvp, dir); | 451 | goto out; |
454 | if (likely(!error)) { | 452 | |
455 | ip = vn_to_inode(cvp); | 453 | inode = cip->i_vnode; |
456 | d_instantiate(dentry, ip); | 454 | |
457 | xfs_validate_fields(dir); | 455 | error = xfs_init_security(inode, dir); |
458 | xfs_validate_fields(ip); | 456 | if (unlikely(error)) |
459 | } else { | 457 | goto out_cleanup_inode; |
460 | xfs_cleanup_inode(dir, cvp, dentry, 0); | 458 | |
461 | } | 459 | d_instantiate(dentry, inode); |
462 | } | 460 | xfs_validate_fields(dir); |
461 | xfs_validate_fields(inode); | ||
462 | return 0; | ||
463 | |||
464 | out_cleanup_inode: | ||
465 | xfs_cleanup_inode(dir, inode, dentry, 0); | ||
466 | out: | ||
463 | return -error; | 467 | return -error; |
464 | } | 468 | } |
465 | 469 | ||
@@ -487,12 +491,9 @@ xfs_vn_rename( | |||
487 | struct dentry *ndentry) | 491 | struct dentry *ndentry) |
488 | { | 492 | { |
489 | struct inode *new_inode = ndentry->d_inode; | 493 | struct inode *new_inode = ndentry->d_inode; |
490 | bhv_vnode_t *tvp; /* target directory */ | ||
491 | int error; | 494 | int error; |
492 | 495 | ||
493 | tvp = vn_from_inode(ndir); | 496 | error = xfs_rename(XFS_I(odir), odentry, XFS_I(ndir), ndentry); |
494 | |||
495 | error = xfs_rename(XFS_I(odir), odentry, tvp, ndentry); | ||
496 | if (likely(!error)) { | 497 | if (likely(!error)) { |
497 | if (new_inode) | 498 | if (new_inode) |
498 | xfs_validate_fields(new_inode); | 499 | xfs_validate_fields(new_inode); |