diff options
author | Sage Weil <sage@inktank.com> | 2013-08-15 14:11:45 -0400 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-15 14:11:45 -0400 |
commit | ee3e542fec6e69bc9fb668698889a37d93950ddf (patch) | |
tree | e74ee766a4764769ef1d3d45d266b4dea64101d3 /fs/xfs/xfs_dir2_sf.c | |
parent | fe2a801b50c0bb8039d627e5ae1fec249d10ff39 (diff) | |
parent | f1d6e17f540af37bb1891480143669ba7636c4cf (diff) |
Merge remote-tracking branch 'linus/master' into testing
Diffstat (limited to 'fs/xfs/xfs_dir2_sf.c')
-rw-r--r-- | fs/xfs/xfs_dir2_sf.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/fs/xfs/xfs_dir2_sf.c b/fs/xfs/xfs_dir2_sf.c index 6157424dbf8f..97676a347da1 100644 --- a/fs/xfs/xfs_dir2_sf.c +++ b/fs/xfs/xfs_dir2_sf.c | |||
@@ -768,9 +768,7 @@ xfs_dir2_sf_create( | |||
768 | int /* error */ | 768 | int /* error */ |
769 | xfs_dir2_sf_getdents( | 769 | xfs_dir2_sf_getdents( |
770 | xfs_inode_t *dp, /* incore directory inode */ | 770 | xfs_inode_t *dp, /* incore directory inode */ |
771 | void *dirent, | 771 | struct dir_context *ctx) |
772 | xfs_off_t *offset, | ||
773 | filldir_t filldir) | ||
774 | { | 772 | { |
775 | int i; /* shortform entry number */ | 773 | int i; /* shortform entry number */ |
776 | xfs_mount_t *mp; /* filesystem mount point */ | 774 | xfs_mount_t *mp; /* filesystem mount point */ |
@@ -802,7 +800,7 @@ xfs_dir2_sf_getdents( | |||
802 | /* | 800 | /* |
803 | * If the block number in the offset is out of range, we're done. | 801 | * If the block number in the offset is out of range, we're done. |
804 | */ | 802 | */ |
805 | if (xfs_dir2_dataptr_to_db(mp, *offset) > mp->m_dirdatablk) | 803 | if (xfs_dir2_dataptr_to_db(mp, ctx->pos) > mp->m_dirdatablk) |
806 | return 0; | 804 | return 0; |
807 | 805 | ||
808 | /* | 806 | /* |
@@ -819,22 +817,20 @@ xfs_dir2_sf_getdents( | |||
819 | /* | 817 | /* |
820 | * Put . entry unless we're starting past it. | 818 | * Put . entry unless we're starting past it. |
821 | */ | 819 | */ |
822 | if (*offset <= dot_offset) { | 820 | if (ctx->pos <= dot_offset) { |
823 | if (filldir(dirent, ".", 1, dot_offset & 0x7fffffff, dp->i_ino, DT_DIR)) { | 821 | ctx->pos = dot_offset & 0x7fffffff; |
824 | *offset = dot_offset & 0x7fffffff; | 822 | if (!dir_emit(ctx, ".", 1, dp->i_ino, DT_DIR)) |
825 | return 0; | 823 | return 0; |
826 | } | ||
827 | } | 824 | } |
828 | 825 | ||
829 | /* | 826 | /* |
830 | * Put .. entry unless we're starting past it. | 827 | * Put .. entry unless we're starting past it. |
831 | */ | 828 | */ |
832 | if (*offset <= dotdot_offset) { | 829 | if (ctx->pos <= dotdot_offset) { |
833 | ino = xfs_dir2_sf_get_parent_ino(sfp); | 830 | ino = xfs_dir2_sf_get_parent_ino(sfp); |
834 | if (filldir(dirent, "..", 2, dotdot_offset & 0x7fffffff, ino, DT_DIR)) { | 831 | ctx->pos = dotdot_offset & 0x7fffffff; |
835 | *offset = dotdot_offset & 0x7fffffff; | 832 | if (!dir_emit(ctx, "..", 2, ino, DT_DIR)) |
836 | return 0; | 833 | return 0; |
837 | } | ||
838 | } | 834 | } |
839 | 835 | ||
840 | /* | 836 | /* |
@@ -845,21 +841,20 @@ xfs_dir2_sf_getdents( | |||
845 | off = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, | 841 | off = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, |
846 | xfs_dir2_sf_get_offset(sfep)); | 842 | xfs_dir2_sf_get_offset(sfep)); |
847 | 843 | ||
848 | if (*offset > off) { | 844 | if (ctx->pos > off) { |
849 | sfep = xfs_dir2_sf_nextentry(sfp, sfep); | 845 | sfep = xfs_dir2_sf_nextentry(sfp, sfep); |
850 | continue; | 846 | continue; |
851 | } | 847 | } |
852 | 848 | ||
853 | ino = xfs_dir2_sfe_get_ino(sfp, sfep); | 849 | ino = xfs_dir2_sfe_get_ino(sfp, sfep); |
854 | if (filldir(dirent, (char *)sfep->name, sfep->namelen, | 850 | ctx->pos = off & 0x7fffffff; |
855 | off & 0x7fffffff, ino, DT_UNKNOWN)) { | 851 | if (!dir_emit(ctx, (char *)sfep->name, sfep->namelen, |
856 | *offset = off & 0x7fffffff; | 852 | ino, DT_UNKNOWN)) |
857 | return 0; | 853 | return 0; |
858 | } | ||
859 | sfep = xfs_dir2_sf_nextentry(sfp, sfep); | 854 | sfep = xfs_dir2_sf_nextentry(sfp, sfep); |
860 | } | 855 | } |
861 | 856 | ||
862 | *offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) & | 857 | ctx->pos = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) & |
863 | 0x7fffffff; | 858 | 0x7fffffff; |
864 | return 0; | 859 | return 0; |
865 | } | 860 | } |