mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 12:25:31 +00:00
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: [XFS] Put the correct offset in dirent d_off [XFS] Don't wait for pending I/Os when purging blocks beyond eof.
This commit is contained in:
commit
57680915a6
@ -356,13 +356,13 @@ xfs_file_readdir(
|
||||
|
||||
reclen = sizeof(struct hack_dirent) + de->namlen;
|
||||
size -= reclen;
|
||||
curr_offset = de->offset /* & 0x7fffffff */;
|
||||
de = (struct hack_dirent *)((char *)de + reclen);
|
||||
curr_offset = de->offset /* & 0x7fffffff */;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
if (!error) {
|
||||
if (!error) {
|
||||
if (size == 0)
|
||||
filp->f_pos = offset & 0x7fffffff;
|
||||
else if (de)
|
||||
|
@ -508,7 +508,7 @@ xfs_dir2_block_getdents(
|
||||
continue;
|
||||
|
||||
cook = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,
|
||||
ptr - (char *)block);
|
||||
(char *)dep - (char *)block);
|
||||
ino = be64_to_cpu(dep->inumber);
|
||||
#if XFS_BIG_INUMS
|
||||
ino += mp->m_inoadd;
|
||||
@ -519,9 +519,7 @@ xfs_dir2_block_getdents(
|
||||
*/
|
||||
if (filldir(dirent, dep->name, dep->namelen, cook,
|
||||
ino, DT_UNKNOWN)) {
|
||||
*offset = xfs_dir2_db_off_to_dataptr(mp,
|
||||
mp->m_dirdatablk,
|
||||
(char *)dep - (char *)block);
|
||||
*offset = cook;
|
||||
xfs_da_brelse(NULL, bp);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1091,7 +1091,7 @@ xfs_dir2_leaf_getdents(
|
||||
* Won't fit. Return to caller.
|
||||
*/
|
||||
if (filldir(dirent, dep->name, dep->namelen,
|
||||
xfs_dir2_byte_to_dataptr(mp, curoff + length),
|
||||
xfs_dir2_byte_to_dataptr(mp, curoff),
|
||||
ino, DT_UNKNOWN))
|
||||
break;
|
||||
|
||||
|
@ -752,7 +752,7 @@ xfs_dir2_sf_getdents(
|
||||
#if XFS_BIG_INUMS
|
||||
ino += mp->m_inoadd;
|
||||
#endif
|
||||
if (filldir(dirent, ".", 1, dotdot_offset, ino, DT_DIR)) {
|
||||
if (filldir(dirent, ".", 1, dot_offset, ino, DT_DIR)) {
|
||||
*offset = dot_offset;
|
||||
return 0;
|
||||
}
|
||||
@ -762,13 +762,11 @@ xfs_dir2_sf_getdents(
|
||||
* Put .. entry unless we're starting past it.
|
||||
*/
|
||||
if (*offset <= dotdot_offset) {
|
||||
off = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk,
|
||||
XFS_DIR2_DATA_FIRST_OFFSET);
|
||||
ino = xfs_dir2_sf_get_inumber(sfp, &sfp->hdr.parent);
|
||||
#if XFS_BIG_INUMS
|
||||
ino += mp->m_inoadd;
|
||||
#endif
|
||||
if (filldir(dirent, "..", 2, off, ino, DT_DIR)) {
|
||||
if (filldir(dirent, "..", 2, dotdot_offset, ino, DT_DIR)) {
|
||||
*offset = dotdot_offset;
|
||||
return 0;
|
||||
}
|
||||
@ -793,8 +791,7 @@ xfs_dir2_sf_getdents(
|
||||
#endif
|
||||
|
||||
if (filldir(dirent, sfep->name, sfep->namelen,
|
||||
off + xfs_dir2_data_entsize(sfep->namelen),
|
||||
ino, DT_UNKNOWN)) {
|
||||
off, ino, DT_UNKNOWN)) {
|
||||
*offset = off;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1459,8 +1459,10 @@ xfs_itruncate_start(
|
||||
mp = ip->i_mount;
|
||||
vp = XFS_ITOV(ip);
|
||||
|
||||
vn_iowait(ip); /* wait for the completion of any pending DIOs */
|
||||
|
||||
/* wait for the completion of any pending DIOs */
|
||||
if (new_size < ip->i_size)
|
||||
vn_iowait(ip);
|
||||
|
||||
/*
|
||||
* Call toss_pages or flushinval_pages to get rid of pages
|
||||
* overlapping the region being removed. We have to use
|
||||
|
Loading…
Reference in New Issue
Block a user