diff options
Diffstat (limited to 'fs/xfs/xfs_inode.c')
-rw-r--r-- | fs/xfs/xfs_inode.c | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 872191b46784..4e664f57860b 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -2450,78 +2450,6 @@ xfs_idestroy_fork( | |||
2450 | } | 2450 | } |
2451 | 2451 | ||
2452 | /* | 2452 | /* |
2453 | * This is called free all the memory associated with an inode. | ||
2454 | * It must free the inode itself and any buffers allocated for | ||
2455 | * if_extents/if_data and if_broot. It must also free the lock | ||
2456 | * associated with the inode. | ||
2457 | * | ||
2458 | * Note: because we don't initialise everything on reallocation out | ||
2459 | * of the zone, we must ensure we nullify everything correctly before | ||
2460 | * freeing the structure. | ||
2461 | */ | ||
2462 | void | ||
2463 | xfs_idestroy( | ||
2464 | xfs_inode_t *ip) | ||
2465 | { | ||
2466 | switch (ip->i_d.di_mode & S_IFMT) { | ||
2467 | case S_IFREG: | ||
2468 | case S_IFDIR: | ||
2469 | case S_IFLNK: | ||
2470 | xfs_idestroy_fork(ip, XFS_DATA_FORK); | ||
2471 | break; | ||
2472 | } | ||
2473 | if (ip->i_afp) | ||
2474 | xfs_idestroy_fork(ip, XFS_ATTR_FORK); | ||
2475 | |||
2476 | #ifdef XFS_INODE_TRACE | ||
2477 | ktrace_free(ip->i_trace); | ||
2478 | #endif | ||
2479 | #ifdef XFS_BMAP_TRACE | ||
2480 | ktrace_free(ip->i_xtrace); | ||
2481 | #endif | ||
2482 | #ifdef XFS_BTREE_TRACE | ||
2483 | ktrace_free(ip->i_btrace); | ||
2484 | #endif | ||
2485 | #ifdef XFS_RW_TRACE | ||
2486 | ktrace_free(ip->i_rwtrace); | ||
2487 | #endif | ||
2488 | #ifdef XFS_ILOCK_TRACE | ||
2489 | ktrace_free(ip->i_lock_trace); | ||
2490 | #endif | ||
2491 | #ifdef XFS_DIR2_TRACE | ||
2492 | ktrace_free(ip->i_dir_trace); | ||
2493 | #endif | ||
2494 | if (ip->i_itemp) { | ||
2495 | /* | ||
2496 | * Only if we are shutting down the fs will we see an | ||
2497 | * inode still in the AIL. If it is there, we should remove | ||
2498 | * it to prevent a use-after-free from occurring. | ||
2499 | */ | ||
2500 | xfs_log_item_t *lip = &ip->i_itemp->ili_item; | ||
2501 | struct xfs_ail *ailp = lip->li_ailp; | ||
2502 | |||
2503 | ASSERT(((lip->li_flags & XFS_LI_IN_AIL) == 0) || | ||
2504 | XFS_FORCED_SHUTDOWN(ip->i_mount)); | ||
2505 | if (lip->li_flags & XFS_LI_IN_AIL) { | ||
2506 | spin_lock(&ailp->xa_lock); | ||
2507 | if (lip->li_flags & XFS_LI_IN_AIL) | ||
2508 | xfs_trans_ail_delete(ailp, lip); | ||
2509 | else | ||
2510 | spin_unlock(&ailp->xa_lock); | ||
2511 | } | ||
2512 | xfs_inode_item_destroy(ip); | ||
2513 | ip->i_itemp = NULL; | ||
2514 | } | ||
2515 | /* asserts to verify all state is correct here */ | ||
2516 | ASSERT(atomic_read(&ip->i_iocount) == 0); | ||
2517 | ASSERT(atomic_read(&ip->i_pincount) == 0); | ||
2518 | ASSERT(!spin_is_locked(&ip->i_flags_lock)); | ||
2519 | ASSERT(completion_done(&ip->i_flush)); | ||
2520 | kmem_zone_free(xfs_inode_zone, ip); | ||
2521 | } | ||
2522 | |||
2523 | |||
2524 | /* | ||
2525 | * Increment the pin count of the given buffer. | 2453 | * Increment the pin count of the given buffer. |
2526 | * This value is protected by ipinlock spinlock in the mount structure. | 2454 | * This value is protected by ipinlock spinlock in the mount structure. |
2527 | */ | 2455 | */ |