mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
[XFS] merge xfs_imap into xfs_dilocate
xfs_imap is the only caller of xfs_dilocate and doesn't add any significant value. Merge the two functions and document the various cases we have for inode cluster lookup in the new xfs_imap. Also remove the unused im_agblkno and im_ioffset fields from struct xfs_imap while we're at it. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Niv Sardi <xaiki@sgi.com>
This commit is contained in:
parent
a194189503
commit
94e1b69d1a
5 changed files with 88 additions and 120 deletions
|
@ -266,7 +266,7 @@ xfs_inotobp(
|
|||
* in once, thus we can use the mapping information stored in the inode
|
||||
* rather than calling xfs_imap(). This allows us to avoid the overhead
|
||||
* of looking at the inode btree for small block file systems
|
||||
* (see xfs_dilocate()).
|
||||
* (see xfs_imap()).
|
||||
*/
|
||||
int
|
||||
xfs_itobp(
|
||||
|
@ -2508,64 +2508,6 @@ xfs_idata_realloc(
|
|||
ASSERT(ifp->if_bytes <= XFS_IFORK_SIZE(ip, whichfork));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Map inode to disk block and offset.
|
||||
*
|
||||
* mp -- the mount point structure for the current file system
|
||||
* tp -- the current transaction
|
||||
* ino -- the inode number of the inode to be located
|
||||
* imap -- this structure is filled in with the information necessary
|
||||
* to retrieve the given inode from disk
|
||||
* flags -- flags to pass to xfs_dilocate indicating whether or not
|
||||
* lookups in the inode btree were OK or not
|
||||
*/
|
||||
int
|
||||
xfs_imap(
|
||||
xfs_mount_t *mp,
|
||||
xfs_trans_t *tp,
|
||||
xfs_ino_t ino,
|
||||
xfs_imap_t *imap,
|
||||
uint flags)
|
||||
{
|
||||
xfs_fsblock_t fsbno;
|
||||
int len;
|
||||
int off;
|
||||
int error;
|
||||
|
||||
fsbno = imap->im_blkno ?
|
||||
XFS_DADDR_TO_FSB(mp, imap->im_blkno) : NULLFSBLOCK;
|
||||
error = xfs_dilocate(mp, tp, ino, &fsbno, &len, &off, flags);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
imap->im_blkno = XFS_FSB_TO_DADDR(mp, fsbno);
|
||||
imap->im_len = XFS_FSB_TO_BB(mp, len);
|
||||
imap->im_agblkno = XFS_FSB_TO_AGBNO(mp, fsbno);
|
||||
imap->im_ioffset = (ushort)off;
|
||||
imap->im_boffset = (ushort)(off << mp->m_sb.sb_inodelog);
|
||||
|
||||
/*
|
||||
* If the inode number maps to a block outside the bounds
|
||||
* of the file system then return NULL rather than calling
|
||||
* read_buf and panicing when we get an error from the
|
||||
* driver.
|
||||
*/
|
||||
if ((imap->im_blkno + imap->im_len) >
|
||||
XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks)) {
|
||||
xfs_fs_cmn_err(CE_ALERT, mp, "xfs_imap: "
|
||||
"(imap->im_blkno (0x%llx) + imap->im_len (0x%llx)) > "
|
||||
" XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks) (0x%llx)",
|
||||
(unsigned long long) imap->im_blkno,
|
||||
(unsigned long long) imap->im_len,
|
||||
XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks));
|
||||
return EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
xfs_idestroy_fork(
|
||||
xfs_inode_t *ip,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue