diff options
| -rw-r--r-- | fs/xfs/xfs_dir2_readdir.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c index c4e50c6ed584..aead369e1c30 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c | |||
| @@ -674,6 +674,7 @@ xfs_readdir( | |||
| 674 | { | 674 | { |
| 675 | int rval; /* return value */ | 675 | int rval; /* return value */ |
| 676 | int v; /* type-checking value */ | 676 | int v; /* type-checking value */ |
| 677 | uint lock_mode; | ||
| 677 | 678 | ||
| 678 | trace_xfs_readdir(dp); | 679 | trace_xfs_readdir(dp); |
| 679 | 680 | ||
| @@ -683,6 +684,7 @@ xfs_readdir( | |||
| 683 | ASSERT(S_ISDIR(dp->i_d.di_mode)); | 684 | ASSERT(S_ISDIR(dp->i_d.di_mode)); |
| 684 | XFS_STATS_INC(xs_dir_getdents); | 685 | XFS_STATS_INC(xs_dir_getdents); |
| 685 | 686 | ||
| 687 | lock_mode = xfs_ilock_data_map_shared(dp); | ||
| 686 | if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) | 688 | if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) |
| 687 | rval = xfs_dir2_sf_getdents(dp, ctx); | 689 | rval = xfs_dir2_sf_getdents(dp, ctx); |
| 688 | else if ((rval = xfs_dir2_isblock(NULL, dp, &v))) | 690 | else if ((rval = xfs_dir2_isblock(NULL, dp, &v))) |
| @@ -691,5 +693,7 @@ xfs_readdir( | |||
| 691 | rval = xfs_dir2_block_getdents(dp, ctx); | 693 | rval = xfs_dir2_block_getdents(dp, ctx); |
| 692 | else | 694 | else |
| 693 | rval = xfs_dir2_leaf_getdents(dp, ctx, bufsize); | 695 | rval = xfs_dir2_leaf_getdents(dp, ctx, bufsize); |
| 696 | xfs_iunlock(dp, lock_mode); | ||
| 697 | |||
| 694 | return rval; | 698 | return rval; |
| 695 | } | 699 | } |
