x
diff --git a/kernel/inode.c b/kernel/inode.c
index 702ef57..ed4f760 100644
--- a/kernel/inode.c
+++ b/kernel/inode.c
@@ -39,7 +39,7 @@
 	unsigned long *tmp;
 	
 	spin_unlock(&fuse_lock);
-	tmp = kmalloc(sizeof(unsigned long) * MAX_CLEARED, GFP_KERNEL);
+	tmp = kmalloc(sizeof(unsigned long) * MAX_CLEARED, GFP_NOFS);
 	spin_lock(&fuse_lock);
 
 	if(!fc->file || fc->cleared != NULL)
@@ -72,7 +72,7 @@
 
 static void fuse_clear_inode(struct inode *inode)
 {
-	struct fuse_conn *fc = inode->i_sb->u.generic_sbp;
+	struct fuse_conn *fc = INO_FC(inode);
 	unsigned long *forget;
 
 	spin_lock(&fuse_lock);
@@ -139,17 +139,11 @@
 
 static struct inode *get_root_inode(struct super_block *sb)
 {
-	struct inode *root;
+	struct fuse_attr attr;
+	memset(&attr, 0, sizeof(attr));
 
-	root = iget(sb, 1);
-	if(root) {
-		struct fuse_attr attr;
-		memset(&attr, 0, sizeof(attr));
-		attr.mode = S_IFDIR;
-		fuse_init_inode(root, &attr);
-	}
-
-	return root;
+	attr.mode = S_IFDIR;
+	return fuse_iget(sb, 1, &attr);
 }
 
 static struct super_block *fuse_read_super(struct super_block *sb,