diff options
Diffstat (limited to 'fs/gfs2/ops_file.c')
-rw-r--r-- | fs/gfs2/ops_file.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c index 3a747f8e2188..289c5f54ba53 100644 --- a/fs/gfs2/ops_file.c +++ b/fs/gfs2/ops_file.c | |||
@@ -39,7 +39,6 @@ | |||
39 | #include "util.h" | 39 | #include "util.h" |
40 | #include "eaops.h" | 40 | #include "eaops.h" |
41 | #include "ops_address.h" | 41 | #include "ops_address.h" |
42 | #include "ops_inode.h" | ||
43 | 42 | ||
44 | /** | 43 | /** |
45 | * gfs2_llseek - seek to a location in a file | 44 | * gfs2_llseek - seek to a location in a file |
@@ -158,8 +157,8 @@ static int gfs2_get_flags(struct file *filp, u32 __user *ptr) | |||
158 | if (error) | 157 | if (error) |
159 | return error; | 158 | return error; |
160 | 159 | ||
161 | fsflags = fsflags_cvt(gfs2_to_fsflags, ip->i_di.di_flags); | 160 | fsflags = fsflags_cvt(gfs2_to_fsflags, ip->i_diskflags); |
162 | if (!S_ISDIR(inode->i_mode) && ip->i_di.di_flags & GFS2_DIF_JDATA) | 161 | if (!S_ISDIR(inode->i_mode) && ip->i_diskflags & GFS2_DIF_JDATA) |
163 | fsflags |= FS_JOURNAL_DATA_FL; | 162 | fsflags |= FS_JOURNAL_DATA_FL; |
164 | if (put_user(fsflags, ptr)) | 163 | if (put_user(fsflags, ptr)) |
165 | error = -EFAULT; | 164 | error = -EFAULT; |
@@ -172,17 +171,16 @@ static int gfs2_get_flags(struct file *filp, u32 __user *ptr) | |||
172 | void gfs2_set_inode_flags(struct inode *inode) | 171 | void gfs2_set_inode_flags(struct inode *inode) |
173 | { | 172 | { |
174 | struct gfs2_inode *ip = GFS2_I(inode); | 173 | struct gfs2_inode *ip = GFS2_I(inode); |
175 | struct gfs2_dinode_host *di = &ip->i_di; | ||
176 | unsigned int flags = inode->i_flags; | 174 | unsigned int flags = inode->i_flags; |
177 | 175 | ||
178 | flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC); | 176 | flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC); |
179 | if (di->di_flags & GFS2_DIF_IMMUTABLE) | 177 | if (ip->i_diskflags & GFS2_DIF_IMMUTABLE) |
180 | flags |= S_IMMUTABLE; | 178 | flags |= S_IMMUTABLE; |
181 | if (di->di_flags & GFS2_DIF_APPENDONLY) | 179 | if (ip->i_diskflags & GFS2_DIF_APPENDONLY) |
182 | flags |= S_APPEND; | 180 | flags |= S_APPEND; |
183 | if (di->di_flags & GFS2_DIF_NOATIME) | 181 | if (ip->i_diskflags & GFS2_DIF_NOATIME) |
184 | flags |= S_NOATIME; | 182 | flags |= S_NOATIME; |
185 | if (di->di_flags & GFS2_DIF_SYNC) | 183 | if (ip->i_diskflags & GFS2_DIF_SYNC) |
186 | flags |= S_SYNC; | 184 | flags |= S_SYNC; |
187 | inode->i_flags = flags; | 185 | inode->i_flags = flags; |
188 | } | 186 | } |
@@ -221,7 +219,7 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask) | |||
221 | if (error) | 219 | if (error) |
222 | goto out_drop_write; | 220 | goto out_drop_write; |
223 | 221 | ||
224 | flags = ip->i_di.di_flags; | 222 | flags = ip->i_diskflags; |
225 | new_flags = (flags & ~mask) | (reqflags & mask); | 223 | new_flags = (flags & ~mask) | (reqflags & mask); |
226 | if ((new_flags ^ flags) == 0) | 224 | if ((new_flags ^ flags) == 0) |
227 | goto out; | 225 | goto out; |
@@ -260,7 +258,7 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask) | |||
260 | if (error) | 258 | if (error) |
261 | goto out_trans_end; | 259 | goto out_trans_end; |
262 | gfs2_trans_add_bh(ip->i_gl, bh, 1); | 260 | gfs2_trans_add_bh(ip->i_gl, bh, 1); |
263 | ip->i_di.di_flags = new_flags; | 261 | ip->i_diskflags = new_flags; |
264 | gfs2_dinode_out(ip, bh->b_data); | 262 | gfs2_dinode_out(ip, bh->b_data); |
265 | brelse(bh); | 263 | brelse(bh); |
266 | gfs2_set_inode_flags(inode); | 264 | gfs2_set_inode_flags(inode); |
@@ -357,7 +355,6 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page) | |||
357 | goto out; | 355 | goto out; |
358 | 356 | ||
359 | set_bit(GIF_SW_PAGED, &ip->i_flags); | 357 | set_bit(GIF_SW_PAGED, &ip->i_flags); |
360 | gfs2_write_calc_reserv(ip, PAGE_CACHE_SIZE, &data_blocks, &ind_blocks); | ||
361 | ret = gfs2_write_alloc_required(ip, pos, PAGE_CACHE_SIZE, &alloc_required); | 358 | ret = gfs2_write_alloc_required(ip, pos, PAGE_CACHE_SIZE, &alloc_required); |
362 | if (ret || !alloc_required) | 359 | if (ret || !alloc_required) |
363 | goto out_unlock; | 360 | goto out_unlock; |
@@ -369,6 +366,7 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct page *page) | |||
369 | ret = gfs2_quota_lock_check(ip); | 366 | ret = gfs2_quota_lock_check(ip); |
370 | if (ret) | 367 | if (ret) |
371 | goto out_alloc_put; | 368 | goto out_alloc_put; |
369 | gfs2_write_calc_reserv(ip, PAGE_CACHE_SIZE, &data_blocks, &ind_blocks); | ||
372 | al->al_requested = data_blocks + ind_blocks; | 370 | al->al_requested = data_blocks + ind_blocks; |
373 | ret = gfs2_inplace_reserve(ip); | 371 | ret = gfs2_inplace_reserve(ip); |
374 | if (ret) | 372 | if (ret) |
@@ -479,7 +477,7 @@ static int gfs2_open(struct inode *inode, struct file *file) | |||
479 | goto fail; | 477 | goto fail; |
480 | 478 | ||
481 | if (!(file->f_flags & O_LARGEFILE) && | 479 | if (!(file->f_flags & O_LARGEFILE) && |
482 | ip->i_di.di_size > MAX_NON_LFS) { | 480 | ip->i_disksize > MAX_NON_LFS) { |
483 | error = -EOVERFLOW; | 481 | error = -EOVERFLOW; |
484 | goto fail_gunlock; | 482 | goto fail_gunlock; |
485 | } | 483 | } |