]> git.neil.brown.name Git - history.git/commitdiff
JFS: rework extent invalidation
authorDave Kleikamp <shaggy@kleikamp.austin.ibm.com>
Thu, 29 Aug 2002 11:39:47 +0000 (06:39 -0500)
committerDave Kleikamp <shaggy@kleikamp.austin.ibm.com>
Thu, 29 Aug 2002 11:39:47 +0000 (06:39 -0500)
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.

Submitted by Christoph Hellwig

fs/jfs/jfs_imap.c
fs/jfs/jfs_metapage.c
fs/jfs/jfs_metapage.h
fs/jfs/namei.c

index 05eaaebffd65586fe41895097a1901d27da3a9ea..b0e1b81d9cf11825ee9addd2bd9d9f3f53b78ac2 100644 (file)
@@ -914,8 +914,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];
@@ -1181,9 +1179,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 6aa919f481b0864795a815b24a3b8bb9c9d12628..f07105cd3e92fa2a83ac4b603953d517c8c8fb54 100644 (file)
@@ -557,8 +557,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 fe06c31cf58a82024ce291e47b49221ae6f6c059..7c82e8798b1232cb1d1e6e7597bd6483d75cec8f 100644 (file)
@@ -107,9 +107,13 @@ static inline void discard_metapage(metapage_t *mp)
 }
 
 /*
- * 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 8c432e89afdefc19d0be6c99d4438f42fcc78894..48853454054ec72b64ef0141abec9f6b50de784f 100644 (file)
@@ -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;