diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 23:34:17 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 23:34:17 -0400 |
| commit | c15a2434ed4868cad99278ac4d4ae4de9de62e02 (patch) | |
| tree | 9d08692fda903f92f5bd426147a4bf00043a2ad1 /fs/xfs/xfs_utils.c | |
| parent | a94a630a4c69430bb4562ab8252104449bba9a67 (diff) | |
| parent | adaa693b845373296631766176ebf0f73a342e10 (diff) | |
Merge branch 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6
* 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6: (24 commits)
[XFS] Fix build failure after enabling CONFIG_XFS_DEBUG
[XFS] remove dmapi cruft in xfs_file.c
[XFS] remove sendfile leftovers
[XFS] allow enabling CONFIG_XFS_DEBUG
[XFS] Don't initialise new inode generation numbers to zero
[XFS] Fix check for block zero access in xfs_write_iomap_allocate()
[XFS] Don't double count reserved block changes on UP.
[XFS] remove xfs_log_ticket_zone on rmmod
[XFS] fix non-smp xfs build
[XFS] Fix broken HAVE_SPLICE removal commit.
[XFS] kill XFS_ICSB_SB_LOCKED
[XFS] split xfs_icsb_balance_counter
[XFS] Add xfs_icsb_sync_counters_locked for when m_sb_lock already held
[XFS] Cleanup xfs_attr a bit with xfs_name and remove cred
[XFS] kill usesless IHOLD calls in xfs_remove and xfs_rmdir
[XFS] kill parent == child checks in xfs_remove and xfs_rmdir
[XFS] kill usesless IHOLD calls in xfs_rename
[XFS] remove manual lookup from xfs_rename and simplify locking
[XFS] shrink mrlock_t
[XFS] simplify xfs_lookup
...
Diffstat (limited to 'fs/xfs/xfs_utils.c')
| -rw-r--r-- | fs/xfs/xfs_utils.c | 45 |
1 files changed, 1 insertions, 44 deletions
diff --git a/fs/xfs/xfs_utils.c b/fs/xfs/xfs_utils.c index 2b8dc7e40772..98e5f110ba5f 100644 --- a/fs/xfs/xfs_utils.c +++ b/fs/xfs/xfs_utils.c | |||
| @@ -41,49 +41,6 @@ | |||
| 41 | #include "xfs_utils.h" | 41 | #include "xfs_utils.h" |
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | int | ||
| 45 | xfs_dir_lookup_int( | ||
| 46 | xfs_inode_t *dp, | ||
| 47 | uint lock_mode, | ||
| 48 | struct xfs_name *name, | ||
| 49 | xfs_ino_t *inum, | ||
| 50 | xfs_inode_t **ipp) | ||
| 51 | { | ||
| 52 | int error; | ||
| 53 | |||
| 54 | xfs_itrace_entry(dp); | ||
| 55 | |||
| 56 | error = xfs_dir_lookup(NULL, dp, name, inum); | ||
| 57 | if (!error) { | ||
| 58 | /* | ||
| 59 | * Unlock the directory. We do this because we can't | ||
| 60 | * hold the directory lock while doing the vn_get() | ||
| 61 | * in xfs_iget(). Doing so could cause us to hold | ||
| 62 | * a lock while waiting for the inode to finish | ||
| 63 | * being inactive while it's waiting for a log | ||
| 64 | * reservation in the inactive routine. | ||
| 65 | */ | ||
| 66 | xfs_iunlock(dp, lock_mode); | ||
| 67 | error = xfs_iget(dp->i_mount, NULL, *inum, 0, 0, ipp, 0); | ||
| 68 | xfs_ilock(dp, lock_mode); | ||
| 69 | |||
| 70 | if (error) { | ||
| 71 | *ipp = NULL; | ||
| 72 | } else if ((*ipp)->i_d.di_mode == 0) { | ||
| 73 | /* | ||
| 74 | * The inode has been freed. Something is | ||
| 75 | * wrong so just get out of here. | ||
| 76 | */ | ||
| 77 | xfs_iunlock(dp, lock_mode); | ||
| 78 | xfs_iput_new(*ipp, 0); | ||
| 79 | *ipp = NULL; | ||
| 80 | xfs_ilock(dp, lock_mode); | ||
| 81 | error = XFS_ERROR(ENOENT); | ||
| 82 | } | ||
| 83 | } | ||
| 84 | return error; | ||
| 85 | } | ||
| 86 | |||
| 87 | /* | 44 | /* |
| 88 | * Allocates a new inode from disk and return a pointer to the | 45 | * Allocates a new inode from disk and return a pointer to the |
| 89 | * incore copy. This routine will internally commit the current | 46 | * incore copy. This routine will internally commit the current |
| @@ -310,7 +267,7 @@ xfs_bump_ino_vers2( | |||
| 310 | { | 267 | { |
| 311 | xfs_mount_t *mp; | 268 | xfs_mount_t *mp; |
| 312 | 269 | ||
| 313 | ASSERT(ismrlocked (&ip->i_lock, MR_UPDATE)); | 270 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); |
| 314 | ASSERT(ip->i_d.di_version == XFS_DINODE_VERSION_1); | 271 | ASSERT(ip->i_d.di_version == XFS_DINODE_VERSION_1); |
| 315 | 272 | ||
| 316 | ip->i_d.di_version = XFS_DINODE_VERSION_2; | 273 | ip->i_d.di_version = XFS_DINODE_VERSION_2; |
