]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/dquot.c
NTFS: Fix a bug in address space operations error recovery code paths where
[mv-sheeva.git] / fs / dquot.c
index 11048e0b32c92f3ebe8ec983c9ae118de5606921..37212b039a4ab834770bfd663f503dcaa669a37a 100644 (file)
@@ -1443,6 +1443,7 @@ static int vfs_quota_on_inode(struct inode *inode, int type, int format_id)
        oldflags = inode->i_flags & (S_NOATIME | S_IMMUTABLE | S_NOQUOTA);
        inode->i_flags |= S_NOQUOTA | S_NOATIME | S_IMMUTABLE;
        up_write(&dqopt->dqptr_sem);
+       sb->dq_op->drop(inode);
 
        error = -EIO;
        dqopt->files[type] = igrab(inode);
@@ -1518,14 +1519,22 @@ out_path:
  * This function is used when filesystem needs to initialize quotas
  * during mount time.
  */
-int vfs_quota_on_mount(int type, int format_id, struct dentry *dentry)
+int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
+               int format_id, int type)
 {
+       struct dentry *dentry;
        int error;
 
+       dentry = lookup_one_len(qf_name, sb->s_root, strlen(qf_name));
+       if (IS_ERR(dentry))
+               return PTR_ERR(dentry);
+
        error = security_quota_on(dentry);
-       if (error)
-               return error;
-       return vfs_quota_on_inode(dentry->d_inode, type, format_id);
+       if (!error)
+               error = vfs_quota_on_inode(dentry->d_inode, type, format_id);
+
+       dput(dentry);
+       return error;
 }
 
 /* Generic routine for getting common part of quota structure */