]> err.no Git - linux-2.6/blobdiff - fs/hostfs/hostfs_kern.c
[PATCH] Consolidate the asm-ppc*/fcntl.h files into asm-powerpc
[linux-2.6] / fs / hostfs / hostfs_kern.c
index e6c63d9cac7bd473f8b7dd00734eea0682cf9658..b2d18200a003f0feb8cdd41fb7ad9cb0ed18dc15 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/pagemap.h>
 #include <linux/blkdev.h>
 #include <linux/list.h>
-#include <linux/root_dev.h>
 #include <linux/statfs.h>
 #include <linux/kdev_t.h>
 #include <asm/uaccess.h>
@@ -23,7 +22,6 @@
 #include "kern_util.h"
 #include "kern.h"
 #include "user_util.h"
-#include "2_5compat.h"
 #include "init.h"
 
 struct hostfs_inode_info {
@@ -161,8 +159,6 @@ static int read_name(struct inode *ino, char *name)
        ino->i_size = i_size;
        ino->i_blksize = i_blksize;
        ino->i_blocks = i_blocks;
-       if((ino->i_sb->s_dev == ROOT_DEV) && (ino->i_uid == getuid()))
-               ino->i_uid = 0;
        return(0);
 }
 
@@ -386,7 +382,7 @@ int hostfs_file_open(struct inode *ino, struct file *file)
 
 int hostfs_fsync(struct file *file, struct dentry *dentry, int datasync)
 {
-       return(0);
+       return fsync_file(HOSTFS_I(dentry->d_inode)->fd, datasync);
 }
 
 static struct file_operations hostfs_file_fops = {
@@ -842,16 +838,10 @@ int hostfs_setattr(struct dentry *dentry, struct iattr *attr)
                attrs.ia_mode = attr->ia_mode;
        }
        if(attr->ia_valid & ATTR_UID){
-               if((dentry->d_inode->i_sb->s_dev == ROOT_DEV) &&
-                  (attr->ia_uid == 0))
-                       attr->ia_uid = getuid();
                attrs.ia_valid |= HOSTFS_ATTR_UID;
                attrs.ia_uid = attr->ia_uid;
        }
        if(attr->ia_valid & ATTR_GID){
-               if((dentry->d_inode->i_sb->s_dev == ROOT_DEV) &&
-                  (attr->ia_gid == 0))
-                       attr->ia_gid = getgid();
                attrs.ia_valid |= HOSTFS_ATTR_GID;
                attrs.ia_gid = attr->ia_gid;
        }
@@ -991,13 +981,17 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
                goto out_put;
 
        err = read_inode(root_inode);
-       if(err)
-               goto out_put;
+       if(err){
+                /* No iput in this case because the dput does that for us */
+                dput(sb->s_root);
+                sb->s_root = NULL;
+               goto out_free;
+        }
 
        return(0);
 
  out_put:
-       iput(root_inode);
+        iput(root_inode);
  out_free:
        kfree(name);
  out: