[PATCH] rework extent invalidation

Christoph Hellwig <[email protected]> Mon, 26 Aug 2002 17:16:17 +0200
Newsgroups gmane.comp.file-systems.jfs.patches
Message-ID <[email protected]>
All callers of invalidate_metapages() actually have a dxd_t or pxd_t to
invalidate, so add invalidate_pxd_metapages() and invalidate_dxd_metapages()
routines with a common __invalidate_metapages() backend instead.

Start to invalidate the EA/ACL extents, we'll need that soon.


Index: fs/jfs/jfs_imap.c
===================================================================
RCS file: /usr/cvs/jfs/linux24/fs/jfs/jfs_imap.c,v
retrieving revision 1.37
diff -u -p -r1.37 jfs_imap.c
--- fs/jfs/jfs_imap.c	2 Aug 2002 19:10:39 -0000	1.37
+++ fs/jfs/jfs_imap.c	26 Aug 2002 15:08:42 -0000
@@ -919,8 +919,6 @@ int diFree(struct inode *ip)
 	u32 bitmap, mask;
 	struct inode *ipimap = JFS_SBI(ip->i_sb)->ipimap;
 	imap_t *imap = JFS_IP(ipimap)->i_imap;
-	s64 xaddr;
-	s64 xlen;
 	pxd_t freepxd;
 	tid_t tid;
 	struct inode *iplist[3];
@@ -1186,9 +1184,7 @@ int diFree(struct inode *ip)
 	 * invalidate any page of the inode extent freed from buffer cache;
 	 */
 	freepxd = iagp->inoext[extno];
-	xaddr = addressPXD(&iagp->inoext[extno]);
-	xlen = lengthPXD(&iagp->inoext[extno]);
-	invalidate_metapages(JFS_SBI(ip->i_sb)->direct_inode, xaddr, xlen);
+	invalidate_pxd_metapages(JFS_SBI(ip->i_sb)->direct_inode, freepxd);
 
 	/*
 	 *      update iag list(s) (careful update step 2)
Index: fs/jfs/jfs_metapage.c
===================================================================
RCS file: /usr/cvs/jfs/linux24/fs/jfs/jfs_metapage.c,v
retrieving revision 1.38
diff -u -p -r1.38 jfs_metapage.c
--- fs/jfs/jfs_metapage.c	5 Aug 2002 19:29:04 -0000	1.38
+++ fs/jfs/jfs_metapage.c	26 Aug 2002 15:08:43 -0000
@@ -611,8 +611,7 @@ void release_metapage(metapage_t * mp)
 	jFYI(1, ("release_metapage: done\n"));
 }
 
-void invalidate_metapages(struct inode *ip, unsigned long addr,
-			 unsigned long len)
+void __invalidate_metapages(struct inode *ip, s64 addr, int len)
 {
 	metapage_t **hash_ptr;
 	unsigned long lblock;
Index: fs/jfs/jfs_metapage.h
===================================================================
RCS file: /usr/cvs/jfs/linux24/fs/jfs/jfs_metapage.h,v
retrieving revision 1.4
diff -u -p -r1.4 jfs_metapage.h
--- fs/jfs/jfs_metapage.h	7 Jun 2002 18:41:40 -0000	1.4
+++ fs/jfs/jfs_metapage.h	26 Aug 2002 15:08:43 -0000
@@ -107,9 +107,13 @@ static inline void discard_metapage(meta
 }
 
 /*
- * This routine uses hash to explicitly find small number of pages
+ * This routines invalidate all pages for an extent.
  */
-extern void invalidate_metapages(struct inode *, unsigned long, unsigned long);
+extern void __invalidate_metapages(struct inode *, s64, int);
+#define invalidate_pxd_metapages(ip, pxd) \
+	__invalidate_metapages((ip), addressPXD(&(pxd)), lengthPXD(&(pxd)))
+#define invalidate_dxd_metapages(ip, dxd) \
+	__invalidate_metapages((ip), addressDXD(&(dxd)), lengthDXD(&(dxd)))
 
 /*
  * This one uses mp_list to invalidate all pages for an inode
Index: fs/jfs/namei.c
===================================================================
RCS file: /usr/cvs/jfs/linux24/fs/jfs/namei.c,v
retrieving revision 1.37
diff -u -p -r1.37 namei.c
--- fs/jfs/namei.c	5 Aug 2002 19:29:04 -0000	1.37
+++ fs/jfs/namei.c	26 Aug 2002 15:08:44 -0000
@@ -672,17 +672,13 @@ int freeZeroLink(struct inode *ip)
 	 * free EA
 	 */
 	if (JFS_IP(ip)->ea.flag & DXD_EXTENT) {
-		s64 xaddr;
-		int xlen;
+		s64 xaddr = addressDXD(&JFS_IP(ip)->ea);
+		int xlen = lengthDXD(&JFS_IP(ip)->ea);
 		maplock_t maplock;	/* maplock for COMMIT_WMAP */
 		pxdlock_t *pxdlock;	/* maplock for COMMIT_WMAP */
 
 		/* free EA pages from cache */
-		xaddr = addressDXD(&JFS_IP(ip)->ea);
-		xlen = lengthDXD(&JFS_IP(ip)->ea);
-#ifdef _STILL_TO_PORT
-		bmExtentInvalidate(ip, xaddr, xlen);
-#endif
+		invalidate_dxd_metapages(ip, JFS_IP(ip)->ea);
 
 		/* free EA extent from working block map */
 		maplock.index = 1;
@@ -697,17 +693,12 @@ int freeZeroLink(struct inode *ip)
 	 * free ACL
 	 */
 	if (JFS_IP(ip)->acl.flag & DXD_EXTENT) {
-		s64 xaddr;
-		int xlen;
+		s64 xaddr = addressDXD(&JFS_IP(ip)->acl);
+		int xlen = lengthDXD(&JFS_IP(ip)->acl);
 		maplock_t maplock;	/* maplock for COMMIT_WMAP */
 		pxdlock_t *pxdlock;	/* maplock for COMMIT_WMAP */
 
-		/* free ACL pages from cache */
-		xaddr = addressDXD(&JFS_IP(ip)->acl);
-		xlen = lengthDXD(&JFS_IP(ip)->acl);
-#ifdef _STILL_TO_PORT
-		bmExtentInvalidate(ip, xaddr, xlen);
-#endif
+		invalidate_dxd_metapages(ip, JFS_IP(ip)->acl);
 
 		/* free ACL extent from working block map */
 		maplock.index = 1;