Merge commit 'v2.6.27-rc1' into x86/core
[linux-2.6-block.git] / fs / jfs / jfs_metapage.c
index b27fa117f229b86a636769b8de6d9f2ee3dfe080..c350057087dd39db3809992338432ac07120bd16 100644 (file)
 
 #include <linux/fs.h>
 #include <linux/mm.h>
+#include <linux/module.h>
 #include <linux/bio.h>
 #include <linux/init.h>
 #include <linux/buffer_head.h>
 #include <linux/mempool.h>
+#include <linux/seq_file.h>
 #include "jfs_incore.h"
 #include "jfs_superblock.h"
 #include "jfs_filsys.h"
@@ -39,11 +41,11 @@ static struct {
 #endif
 
 #define metapage_locked(mp) test_bit(META_locked, &(mp)->flag)
-#define trylock_metapage(mp) test_and_set_bit(META_locked, &(mp)->flag)
+#define trylock_metapage(mp) test_and_set_bit_lock(META_locked, &(mp)->flag)
 
 static inline void unlock_metapage(struct metapage *mp)
 {
-       clear_bit(META_locked, &mp->flag);
+       clear_bit_unlock(META_locked, &mp->flag);
        wake_up(&mp->wait);
 }
 
@@ -88,7 +90,7 @@ struct meta_anchor {
 };
 #define mp_anchor(page) ((struct meta_anchor *)page_private(page))
 
-static inline struct metapage *page_to_mp(struct page *page, uint offset)
+static inline struct metapage *page_to_mp(struct page *page, int offset)
 {
        if (!PagePrivate(page))
                return NULL;
@@ -153,7 +155,7 @@ static inline void dec_io(struct page *page, void (*handler) (struct page *))
 }
 
 #else
-static inline struct metapage *page_to_mp(struct page *page, uint offset)
+static inline struct metapage *page_to_mp(struct page *page, int offset)
 {
        return PagePrivate(page) ? (struct metapage *)page_private(page) : NULL;
 }
@@ -180,7 +182,7 @@ static inline void remove_metapage(struct page *page, struct metapage *mp)
 
 #endif
 
-static void init_once(struct kmem_cache *cachep, void *foo)
+static void init_once(void *foo)
 {
        struct metapage *mp = (struct metapage *)foo;
 
@@ -249,7 +251,7 @@ static inline void drop_metapage(struct page *page, struct metapage *mp)
  */
 
 static sector_t metapage_get_blocks(struct inode *inode, sector_t lblock,
-                                   unsigned int *len)
+                                   int *len)
 {
        int rc = 0;
        int xflag;
@@ -352,11 +354,11 @@ static void metapage_write_end_io(struct bio *bio, int err)
 static int metapage_writepage(struct page *page, struct writeback_control *wbc)
 {
        struct bio *bio = NULL;
-       unsigned int block_offset;      /* block offset of mp within page */
+       int block_offset;       /* block offset of mp within page */
        struct inode *inode = page->mapping->host;
-       unsigned int blocks_per_mp = JFS_SBI(inode->i_sb)->nbperpage;
-       unsigned int len;
-       unsigned int xlen;
+       int blocks_per_mp = JFS_SBI(inode->i_sb)->nbperpage;
+       int len;
+       int xlen;
        struct metapage *mp;
        int redirty = 0;
        sector_t lblock;
@@ -366,7 +368,7 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc)
        sector_t page_start;
        unsigned long bio_bytes = 0;
        unsigned long bio_offset = 0;
-       unsigned int offset;
+       int offset;
 
        page_start = (sector_t)page->index <<
                     (PAGE_CACHE_SHIFT - inode->i_blkbits);
@@ -428,7 +430,7 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc)
                        continue;
                }
                set_bit(META_io, &mp->flag);
-               len = min(xlen, (uint) JFS_SBI(inode->i_sb)->nbperpage);
+               len = min(xlen, (int)JFS_SBI(inode->i_sb)->nbperpage);
 
                bio = bio_alloc(GFP_NOFS, 1);
                bio->bi_bdev = inode->i_sb->s_bdev;
@@ -480,13 +482,13 @@ static int metapage_readpage(struct file *fp, struct page *page)
 {
        struct inode *inode = page->mapping->host;
        struct bio *bio = NULL;
-       unsigned int block_offset;
-       unsigned int blocks_per_page = PAGE_CACHE_SIZE >> inode->i_blkbits;
+       int block_offset;
+       int blocks_per_page = PAGE_CACHE_SIZE >> inode->i_blkbits;
        sector_t page_start;    /* address of page in fs blocks */
        sector_t pblock;
-       unsigned int xlen;
+       int xlen;
        unsigned int len;
-       unsigned int offset;
+       int offset;
 
        BUG_ON(!PageLocked(page));
        page_start = (sector_t)page->index <<
@@ -535,7 +537,7 @@ static int metapage_releasepage(struct page *page, gfp_t gfp_mask)
 {
        struct metapage *mp;
        int ret = 1;
-       unsigned int offset;
+       int offset;
 
        for (offset = 0; offset < PAGE_CACHE_SIZE; offset += PSIZE) {
                mp = page_to_mp(page, offset);
@@ -804,13 +806,9 @@ void __invalidate_metapages(struct inode *ip, s64 addr, int len)
 }
 
 #ifdef CONFIG_JFS_STATISTICS
-int jfs_mpstat_read(char *buffer, char **start, off_t offset, int length,
-                   int *eof, void *data)
+static int jfs_mpstat_proc_show(struct seq_file *m, void *v)
 {
-       int len = 0;
-       off_t begin;
-
-       len += sprintf(buffer,
+       seq_printf(m,
                       "JFS Metapage statistics\n"
                       "=======================\n"
                       "page allocations = %d\n"
@@ -819,19 +817,19 @@ int jfs_mpstat_read(char *buffer, char **start, off_t offset, int length,
                       mpStat.pagealloc,
                       mpStat.pagefree,
                       mpStat.lockwait);
+       return 0;
+}
 
-       begin = offset;
-       *start = buffer + begin;
-       len -= begin;
-
-       if (len > length)
-               len = length;
-       else
-               *eof = 1;
-
-       if (len < 0)
-               len = 0;
-
-       return len;
+static int jfs_mpstat_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, jfs_mpstat_proc_show, NULL);
 }
+
+const struct file_operations jfs_mpstat_proc_fops = {
+       .owner          = THIS_MODULE,
+       .open           = jfs_mpstat_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
 #endif