Commit 4eea22f0 authored by Mandy Kirkconnell's avatar Mandy Kirkconnell Committed by Nathan Scott

[XFS] 929045 567344 This mod re-organizes some of the in-core file extent

code to prepare for an upcoming mod which will introduce multi-level
in-core extent allocations. Although the in-core extent management is
using a new code path in this mod, the functionality remains the same. 
Major changes include:	- Introduce 10 new subroutines which re-orgainze
the existing code but	do NOT change functionality:	    
xfs_iext_get_ext()	   xfs_iext_insert()	     xfs_iext_add()	  
 xfs_iext_remove()	   xfs_iext_remove_inline()	   
xfs_iext_remove_direct()	 xfs_iext_realloc_direct()	  
xfs_iext_direct_to_inline()	    xfs_iext_inline_to_direct()        
xfs_iext_destroy() - Remove 2 subroutines (functionality moved to new
subroutines above):	    xfs_iext_realloc() -replaced by xfs_iext_add()
and xfs_iext_remove()	      xfs_bmap_insert_exlist() - replaced by
xfs_iext_insert()	  xfs_bmap_delete_exlist() - replaced by
xfs_iext_remove() - Replace all hard-coded (indexed) extent assignments
with a call to	 xfs_iext_get_ext() - Replace all extent record pointer
arithmetic (ep++, ep--, base + lastx,..)   with calls to
xfs_iext_get_ext() - Update comments to remove the idea of a single
"extent list" and   introduce "extent record" terminology instead

SGI-PV: 928864
SGI-Modid: xfs-linux-melb:xfs-kern:207390a
Signed-off-by: default avatarMandy Kirkconnell <alkirkco@sgi.com>
Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent 9f989c94
...@@ -1704,9 +1704,9 @@ xfs_qm_get_rtblks( ...@@ -1704,9 +1704,9 @@ xfs_qm_get_rtblks(
xfs_qcnt_t *O_rtblks) xfs_qcnt_t *O_rtblks)
{ {
xfs_filblks_t rtblks; /* total rt blks */ xfs_filblks_t rtblks; /* total rt blks */
xfs_extnum_t idx; /* extent record index */
xfs_ifork_t *ifp; /* inode fork pointer */ xfs_ifork_t *ifp; /* inode fork pointer */
xfs_extnum_t nextents; /* number of extent entries */ xfs_extnum_t nextents; /* number of extent entries */
xfs_bmbt_rec_t *base; /* base of extent array */
xfs_bmbt_rec_t *ep; /* pointer to an extent entry */ xfs_bmbt_rec_t *ep; /* pointer to an extent entry */
int error; int error;
...@@ -1717,10 +1717,11 @@ xfs_qm_get_rtblks( ...@@ -1717,10 +1717,11 @@ xfs_qm_get_rtblks(
return error; return error;
} }
rtblks = 0; rtblks = 0;
nextents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t); nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t);
base = &ifp->if_u1.if_extents[0]; for (idx = 0; idx < nextents; idx++) {
for (ep = base; ep < &base[nextents]; ep++) ep = xfs_iext_get_ext(ifp, idx);
rtblks += xfs_bmbt_get_blockcount(ep); rtblks += xfs_bmbt_get_blockcount(ep);
}
*O_rtblks = (xfs_qcnt_t)rtblks; *O_rtblks = (xfs_qcnt_t)rtblks;
return 0; return 0;
} }
......
This diff is collapsed.
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
struct getbmap; struct getbmap;
struct xfs_bmbt_irec; struct xfs_bmbt_irec;
struct xfs_ifork;
struct xfs_inode; struct xfs_inode;
struct xfs_mount; struct xfs_mount;
struct xfs_trans; struct xfs_trans;
...@@ -347,7 +348,8 @@ xfs_bmap_count_blocks( ...@@ -347,7 +348,8 @@ xfs_bmap_count_blocks(
*/ */
int int
xfs_check_nostate_extents( xfs_check_nostate_extents(
xfs_bmbt_rec_t *ep, struct xfs_ifork *ifp,
xfs_extnum_t idx,
xfs_extnum_t num); xfs_extnum_t num);
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -2754,7 +2754,7 @@ xfs_bmbt_update( ...@@ -2754,7 +2754,7 @@ xfs_bmbt_update(
} }
/* /*
* Check an extent list, which has just been read, for * Check extent records, which have just been read, for
* any bit in the extent flag field. ASSERT on debug * any bit in the extent flag field. ASSERT on debug
* kernels, as this condition should not occur. * kernels, as this condition should not occur.
* Return an error condition (1) if any flags found, * Return an error condition (1) if any flags found,
...@@ -2763,10 +2763,14 @@ xfs_bmbt_update( ...@@ -2763,10 +2763,14 @@ xfs_bmbt_update(
int int
xfs_check_nostate_extents( xfs_check_nostate_extents(
xfs_bmbt_rec_t *ep, xfs_ifork_t *ifp,
xfs_extnum_t idx,
xfs_extnum_t num) xfs_extnum_t num)
{ {
for (; num > 0; num--, ep++) { xfs_bmbt_rec_t *ep;
for (; num > 0; num--, idx++) {
ep = xfs_iext_get_ext(ifp, idx);
if ((ep->l0 >> if ((ep->l0 >>
(64 - BMBT_EXNTFLAG_BITLEN)) != 0) { (64 - BMBT_EXNTFLAG_BITLEN)) != 0) {
ASSERT(0); ASSERT(0);
......
This diff is collapsed.
...@@ -70,12 +70,6 @@ typedef struct xfs_ifork { ...@@ -70,12 +70,6 @@ typedef struct xfs_ifork {
*/ */
#define XFS_IMAP_LOOKUP 0x1 #define XFS_IMAP_LOOKUP 0x1
/*
* Maximum number of extent pointers in if_u1.if_extents.
*/
#define XFS_MAX_INCORE_EXTENTS 32768
#ifdef __KERNEL__ #ifdef __KERNEL__
struct bhv_desc; struct bhv_desc;
struct cred; struct cred;
...@@ -440,6 +434,18 @@ xfs_inode_t *xfs_vtoi(struct vnode *vp); ...@@ -440,6 +434,18 @@ xfs_inode_t *xfs_vtoi(struct vnode *vp);
void xfs_synchronize_atime(xfs_inode_t *); void xfs_synchronize_atime(xfs_inode_t *);
xfs_bmbt_rec_t *xfs_iext_get_ext(xfs_ifork_t *, xfs_extnum_t);
void xfs_iext_insert(xfs_ifork_t *, xfs_extnum_t, xfs_extnum_t,
xfs_bmbt_irec_t *);
void xfs_iext_add(xfs_ifork_t *, xfs_extnum_t, int);
void xfs_iext_remove(xfs_ifork_t *, xfs_extnum_t, int);
void xfs_iext_remove_inline(xfs_ifork_t *, xfs_extnum_t, int);
void xfs_iext_remove_direct(xfs_ifork_t *, xfs_extnum_t, int);
void xfs_iext_realloc_direct(xfs_ifork_t *, int);
void xfs_iext_direct_to_inline(xfs_ifork_t *, xfs_extnum_t);
void xfs_iext_inline_to_direct(xfs_ifork_t *, int);
void xfs_iext_destroy(xfs_ifork_t *);
#define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount)) #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount))
#ifdef DEBUG #ifdef DEBUG
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment