fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / fs / romfs / inode.c
index 28c863a..d3e243a 100644 (file)
@@ -95,15 +95,16 @@ static inline struct romfs_inode_info *ROMFS_I(struct inode *inode)
        return list_entry(inode, struct romfs_inode_info, vfs_inode);
 }
 
-static __s32
+static __u32
 romfs_checksum(void *data, int size)
 {
-       __s32 sum, *ptr;
+       __u32 sum;
+       __be32 *ptr;
 
        sum = 0; ptr = data;
        size>>=2;
        while (size>0) {
-               sum += ntohl(*ptr++);
+               sum += be32_to_cpu(*ptr++);
                size--;
        }
        return sum;
@@ -131,7 +132,7 @@ static int romfs_fill_super(struct super_block *s, void *data, int silent)
        }
 
        rsb = (struct romfs_super_block *)bh->b_data;
-       sz = ntohl(rsb->size);
+       sz = be32_to_cpu(rsb->size);
        if (rsb->word0 != ROMSB_WORD0 || rsb->word1 != ROMSB_WORD1
           || sz < ROMFH_SIZE) {
                if (!silent)
@@ -160,8 +161,7 @@ static int romfs_fill_super(struct super_block *s, void *data, int silent)
        if (!root)
                goto out;
 
-       s->s_root = d_alloc_root(iget(s, sz));
-
+       s->s_root = d_alloc_root(root);
        if (!s->s_root)
                goto outiput;
 
@@ -179,12 +179,12 @@ outnobh:
 /* That's simple too. */
 
 static int
-romfs_statfs(struct super_block *sb, struct kstatfs *buf)
+romfs_statfs(struct dentry *dentry, struct kstatfs *buf)
 {
        buf->f_type = ROMFS_MAGIC;
        buf->f_bsize = ROMBSIZE;
        buf->f_bfree = buf->f_bavail = buf->f_ffree;
-       buf->f_blocks = (romfs_maxsize(sb)+ROMBSIZE-1)>>ROMBSBITS;
+       buf->f_blocks = (romfs_maxsize(dentry->d_sb)+ROMBSIZE-1)>>ROMBSBITS;
        buf->f_namelen = ROMFS_MAXFN;
        return 0;
 }
@@ -276,7 +276,7 @@ static unsigned char romfs_dtype_table[] = {
 static int
 romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
 {
-       struct inode *i = filp->f_dentry->d_inode;
+       struct inode *i = filp->f_path.dentry->d_inode;
        struct romfs_inode ri;
        unsigned long offset, maxoff;
        int j, ino, nextfh;
@@ -292,7 +292,7 @@ romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                offset = i->i_ino & ROMFH_MASK;
                if (romfs_copyfrom(i, &ri, offset, ROMFH_SIZE) <= 0)
                        goto out;
-               offset = ntohl(ri.spec) & ROMFH_MASK;
+               offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
        }
 
        /* Not really failsafe, but we are read-only... */
@@ -316,9 +316,9 @@ romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                romfs_copyfrom(i, fsname, offset+ROMFH_SIZE, j);
 
                ino = offset;
-               nextfh = ntohl(ri.next);
+               nextfh = be32_to_cpu(ri.next);
                if ((nextfh & ROMFH_TYPE) == ROMFH_HRD)
-                       ino = ntohl(ri.spec);
+                       ino = be32_to_cpu(ri.spec);
                if (filldir(dirent, fsname, j, offset, ino,
                            romfs_dtype_table[nextfh & ROMFH_TYPE]) < 0) {
                        goto out;
@@ -349,7 +349,7 @@ romfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
                goto out;
 
        maxoff = romfs_maxsize(dir->i_sb);
-       offset = ntohl(ri.spec) & ROMFH_MASK;
+       offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
 
        /* OK, now find the file whose name is in "dentry" in the
         * directory specified by "dir".  */
@@ -382,12 +382,12 @@ romfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
                        }
                }
                /* next entry */
-               offset = ntohl(ri.next) & ROMFH_MASK;
+               offset = be32_to_cpu(ri.next) & ROMFH_MASK;
        }
 
        /* Hard link handling */
-       if ((ntohl(ri.next) & ROMFH_TYPE) == ROMFH_HRD)
-               offset = ntohl(ri.spec) & ROMFH_MASK;
+       if ((be32_to_cpu(ri.next) & ROMFH_TYPE) == ROMFH_HRD)
+               offset = be32_to_cpu(ri.spec) & ROMFH_MASK;
 
        if ((inode = iget(dir->i_sb, offset)))
                goto outi;
@@ -418,7 +418,7 @@ static int
 romfs_readpage(struct file *file, struct page * page)
 {
        struct inode *inode = page->mapping->host;
-       unsigned long offset, avail, readlen;
+       loff_t offset, avail, readlen;
        void *buf;
        int result = -EIO;
 
@@ -429,8 +429,8 @@ romfs_readpage(struct file *file, struct page * page)
                goto err_out;
 
        /* 32 bit warning -- but not for us :) */
-       offset = page->index << PAGE_CACHE_SHIFT;
-       if (offset < inode->i_size) {
+       offset = page_offset(page);
+       if (offset < i_size_read(inode)) {
                avail = inode->i_size-offset;
                readlen = min_t(unsigned long, avail, PAGE_SIZE);
                if (romfs_copyfrom(inode, buf, ROMFS_I(inode)->i_dataoffset+offset, readlen) == readlen) {
@@ -459,11 +459,11 @@ err_out:
 
 /* Mapping from our types to the kernel */
 
-static struct address_space_operations romfs_aops = {
+static const struct address_space_operations romfs_aops = {
        .readpage = romfs_readpage
 };
 
-static struct file_operations romfs_dir_operations = {
+static const struct file_operations romfs_dir_operations = {
        .read           = generic_read_dir,
        .readdir        = romfs_readdir,
 };
@@ -495,15 +495,15 @@ romfs_read_inode(struct inode *i)
                }
                /* XXX: do romfs_checksum here too (with name) */
 
-               nextfh = ntohl(ri.next);
+               nextfh = be32_to_cpu(ri.next);
                if ((nextfh & ROMFH_TYPE) != ROMFH_HRD)
                        break;
 
-               ino = ntohl(ri.spec) & ROMFH_MASK;
+               ino = be32_to_cpu(ri.spec) & ROMFH_MASK;
        }
 
        i->i_nlink = 1;         /* Hard to decide.. */
-       i->i_size = ntohl(ri.size);
+       i->i_size = be32_to_cpu(ri.size);
        i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0;
        i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0;
        i->i_uid = i->i_gid = 0;
@@ -544,18 +544,18 @@ romfs_read_inode(struct inode *i)
                        break;
                default:
                        /* depending on MBZ for sock/fifos */
-                       nextfh = ntohl(ri.spec);
+                       nextfh = be32_to_cpu(ri.spec);
                        init_special_inode(i, ino,
                                        MKDEV(nextfh>>16,nextfh&0xffff));
        }
 }
 
-static kmem_cache_t * romfs_inode_cachep;
+static struct kmem_cache * romfs_inode_cachep;
 
 static struct inode *romfs_alloc_inode(struct super_block *sb)
 {
        struct romfs_inode_info *ei;
-       ei = (struct romfs_inode_info *)kmem_cache_alloc(romfs_inode_cachep, SLAB_KERNEL);
+       ei = (struct romfs_inode_info *)kmem_cache_alloc(romfs_inode_cachep, GFP_KERNEL);
        if (!ei)
                return NULL;
        return &ei->vfs_inode;
@@ -566,7 +566,7 @@ static void romfs_destroy_inode(struct inode *inode)
        kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode));
 }
 
-static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
+static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags)
 {
        struct romfs_inode_info *ei = (struct romfs_inode_info *) foo;
 
@@ -579,7 +579,8 @@ static int init_inodecache(void)
 {
        romfs_inode_cachep = kmem_cache_create("romfs_inode_cache",
                                             sizeof(struct romfs_inode_info),
-                                            0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+                                            0, (SLAB_RECLAIM_ACCOUNT|
+                                               SLAB_MEM_SPREAD),
                                             init_once, NULL);
        if (romfs_inode_cachep == NULL)
                return -ENOMEM;
@@ -588,8 +589,7 @@ static int init_inodecache(void)
 
 static void destroy_inodecache(void)
 {
-       if (kmem_cache_destroy(romfs_inode_cachep))
-               printk(KERN_INFO "romfs_inode_cache: not all structures were freed\n");
+       kmem_cache_destroy(romfs_inode_cachep);
 }
 
 static int romfs_remount(struct super_block *sb, int *flags, char *data)
@@ -606,10 +606,11 @@ static struct super_operations romfs_ops = {
        .remount_fs     = romfs_remount,
 };
 
-static struct super_block *romfs_get_sb(struct file_system_type *fs_type,
-       int flags, const char *dev_name, void *data)
+static int romfs_get_sb(struct file_system_type *fs_type,
+       int flags, const char *dev_name, void *data, struct vfsmount *mnt)
 {
-       return get_sb_bdev(fs_type, flags, dev_name, data, romfs_fill_super);
+       return get_sb_bdev(fs_type, flags, dev_name, data, romfs_fill_super,
+                          mnt);
 }
 
 static struct file_system_type romfs_fs_type = {