Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / fs / sysv / inode.c
index 379d424..3ff89cc 100644 (file)
@@ -142,8 +142,9 @@ static inline void write3byte(struct sysv_sb_info *sbi,
 }
 
 static struct inode_operations sysv_symlink_inode_operations = {
-       .readlink       = page_readlink,
-       .follow_link    = page_follow_link,
+       .readlink       = generic_readlink,
+       .follow_link    = page_follow_link_light,
+       .put_link       = page_put_link,
        .getattr        = sysv_getattr,
 };
 
@@ -232,12 +233,12 @@ static struct buffer_head * sysv_update_inode(struct inode * inode)
        if (!ino || ino > sbi->s_ninodes) {
                printk("Bad inode number on dev %s: %d is out of range\n",
                       inode->i_sb->s_id, ino);
-               return 0;
+               return NULL;
        }
        raw_inode = sysv_raw_inode(sb, ino, &bh);
        if (!raw_inode) {
                printk("unable to read i-node block\n");
-               return 0;
+               return NULL;
        }
 
        raw_inode->i_mode = cpu_to_fs16(sbi, inode->i_mode);
@@ -259,13 +260,14 @@ static struct buffer_head * sysv_update_inode(struct inode * inode)
        return bh;
 }
 
-void sysv_write_inode(struct inode * inode, int wait)
+int sysv_write_inode(struct inode * inode, int wait)
 {
        struct buffer_head *bh;
        lock_kernel();
        bh = sysv_update_inode(inode);
        brelse(bh);
        unlock_kernel();
+       return 0;
 }
 
 int sysv_sync_inode(struct inode * inode)
@@ -290,6 +292,7 @@ int sysv_sync_inode(struct inode * inode)
 
 static void sysv_delete_inode(struct inode *inode)
 {
+       truncate_inode_pages(&inode->i_data, 0);
        inode->i_size = 0;
        sysv_truncate(inode);
        lock_kernel();
@@ -339,7 +342,7 @@ int __init sysv_init_icache(void)
 {
        sysv_inode_cachep = kmem_cache_create("sysv_inode_cache",
                        sizeof(struct sysv_inode_info), 0,
-                       SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, 
+                       SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD,
                        init_once, NULL);
        if (!sysv_inode_cachep)
                return -ENOMEM;