diff options
Diffstat (limited to 'fs/udf/ialloc.c')
-rw-r--r-- | fs/udf/ialloc.c | 32 |
1 files changed, 3 insertions, 29 deletions
diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index fb68c9cd0c3..18cd7111185 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c | |||
@@ -20,7 +20,6 @@ | |||
20 | 20 | ||
21 | #include "udfdecl.h" | 21 | #include "udfdecl.h" |
22 | #include <linux/fs.h> | 22 | #include <linux/fs.h> |
23 | #include <linux/quotaops.h> | ||
24 | #include <linux/sched.h> | 23 | #include <linux/sched.h> |
25 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
26 | 25 | ||
@@ -32,13 +31,6 @@ void udf_free_inode(struct inode *inode) | |||
32 | struct super_block *sb = inode->i_sb; | 31 | struct super_block *sb = inode->i_sb; |
33 | struct udf_sb_info *sbi = UDF_SB(sb); | 32 | struct udf_sb_info *sbi = UDF_SB(sb); |
34 | 33 | ||
35 | /* | ||
36 | * Note: we must free any quota before locking the superblock, | ||
37 | * as writing the quota to disk may need the lock as well. | ||
38 | */ | ||
39 | dquot_free_inode(inode); | ||
40 | dquot_drop(inode); | ||
41 | |||
42 | clear_inode(inode); | 34 | clear_inode(inode); |
43 | 35 | ||
44 | mutex_lock(&sbi->s_alloc_mutex); | 36 | mutex_lock(&sbi->s_alloc_mutex); |
@@ -61,7 +53,7 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
61 | struct super_block *sb = dir->i_sb; | 53 | struct super_block *sb = dir->i_sb; |
62 | struct udf_sb_info *sbi = UDF_SB(sb); | 54 | struct udf_sb_info *sbi = UDF_SB(sb); |
63 | struct inode *inode; | 55 | struct inode *inode; |
64 | int block, ret; | 56 | int block; |
65 | uint32_t start = UDF_I(dir)->i_location.logicalBlockNum; | 57 | uint32_t start = UDF_I(dir)->i_location.logicalBlockNum; |
66 | struct udf_inode_info *iinfo; | 58 | struct udf_inode_info *iinfo; |
67 | struct udf_inode_info *dinfo = UDF_I(dir); | 59 | struct udf_inode_info *dinfo = UDF_I(dir); |
@@ -124,15 +116,8 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
124 | udf_updated_lvid(sb); | 116 | udf_updated_lvid(sb); |
125 | } | 117 | } |
126 | mutex_unlock(&sbi->s_alloc_mutex); | 118 | mutex_unlock(&sbi->s_alloc_mutex); |
127 | inode->i_mode = mode; | 119 | |
128 | inode->i_uid = current_fsuid(); | 120 | inode_init_owner(inode, dir, mode); |
129 | if (dir->i_mode & S_ISGID) { | ||
130 | inode->i_gid = dir->i_gid; | ||
131 | if (S_ISDIR(mode)) | ||
132 | mode |= S_ISGID; | ||
133 | } else { | ||
134 | inode->i_gid = current_fsgid(); | ||
135 | } | ||
136 | 121 | ||
137 | iinfo->i_location.logicalBlockNum = block; | 122 | iinfo->i_location.logicalBlockNum = block; |
138 | iinfo->i_location.partitionReferenceNum = | 123 | iinfo->i_location.partitionReferenceNum = |
@@ -153,17 +138,6 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
153 | insert_inode_hash(inode); | 138 | insert_inode_hash(inode); |
154 | mark_inode_dirty(inode); | 139 | mark_inode_dirty(inode); |
155 | 140 | ||
156 | dquot_initialize(inode); | ||
157 | ret = dquot_alloc_inode(inode); | ||
158 | if (ret) { | ||
159 | dquot_drop(inode); | ||
160 | inode->i_flags |= S_NOQUOTA; | ||
161 | inode->i_nlink = 0; | ||
162 | iput(inode); | ||
163 | *err = ret; | ||
164 | return NULL; | ||
165 | } | ||
166 | |||
167 | *err = 0; | 141 | *err = 0; |
168 | return inode; | 142 | return inode; |
169 | } | 143 | } |