Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
file.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9 
10 #include <linux/slab.h>
11 #include <linux/spinlock.h>
12 #include <linux/completion.h>
13 #include <linux/buffer_head.h>
14 #include <linux/pagemap.h>
15 #include <linux/uio.h>
16 #include <linux/blkdev.h>
17 #include <linux/mm.h>
18 #include <linux/mount.h>
19 #include <linux/fs.h>
20 #include <linux/gfs2_ondisk.h>
21 #include <linux/falloc.h>
22 #include <linux/swap.h>
23 #include <linux/crc32.h>
24 #include <linux/writeback.h>
25 #include <asm/uaccess.h>
26 #include <linux/dlm.h>
27 #include <linux/dlm_plock.h>
28 
29 #include "gfs2.h"
30 #include "incore.h"
31 #include "bmap.h"
32 #include "dir.h"
33 #include "glock.h"
34 #include "glops.h"
35 #include "inode.h"
36 #include "log.h"
37 #include "meta_io.h"
38 #include "quota.h"
39 #include "rgrp.h"
40 #include "trans.h"
41 #include "util.h"
42 
55 static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin)
56 {
57  struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
58  struct gfs2_holder i_gh;
59  loff_t error;
60 
61  switch (origin) {
62  case SEEK_END: /* These reference inode->i_size */
63  case SEEK_DATA:
64  case SEEK_HOLE:
65  error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
66  &i_gh);
67  if (!error) {
68  error = generic_file_llseek(file, offset, origin);
69  gfs2_glock_dq_uninit(&i_gh);
70  }
71  break;
72  case SEEK_CUR:
73  case SEEK_SET:
74  error = generic_file_llseek(file, offset, origin);
75  break;
76  default:
77  error = -EINVAL;
78  }
79 
80  return error;
81 }
82 
92 static int gfs2_readdir(struct file *file, void *dirent, filldir_t filldir)
93 {
94  struct inode *dir = file->f_mapping->host;
95  struct gfs2_inode *dip = GFS2_I(dir);
96  struct gfs2_holder d_gh;
97  u64 offset = file->f_pos;
98  int error;
99 
100  gfs2_holder_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
101  error = gfs2_glock_nq(&d_gh);
102  if (error) {
103  gfs2_holder_uninit(&d_gh);
104  return error;
105  }
106 
107  error = gfs2_dir_read(dir, &offset, dirent, filldir, &file->f_ra);
108 
109  gfs2_glock_dq_uninit(&d_gh);
110 
111  file->f_pos = offset;
112 
113  return error;
114 }
115 
126 static u32 fsflags_cvt(const u32 *table, u32 val)
127 {
128  u32 res = 0;
129  while(val) {
130  if (val & 1)
131  res |= *table;
132  table++;
133  val >>= 1;
134  }
135  return res;
136 }
137 
138 static const u32 fsflags_to_gfs2[32] = {
139  [3] = GFS2_DIF_SYNC,
140  [4] = GFS2_DIF_IMMUTABLE,
141  [5] = GFS2_DIF_APPENDONLY,
142  [7] = GFS2_DIF_NOATIME,
143  [12] = GFS2_DIF_EXHASH,
144  [14] = GFS2_DIF_INHERIT_JDATA,
145  [17] = GFS2_DIF_TOPDIR,
146 };
147 
148 static const u32 gfs2_to_fsflags[32] = {
156 };
157 
158 static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
159 {
160  struct inode *inode = filp->f_path.dentry->d_inode;
161  struct gfs2_inode *ip = GFS2_I(inode);
162  struct gfs2_holder gh;
163  int error;
164  u32 fsflags;
165 
166  gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
167  error = gfs2_glock_nq(&gh);
168  if (error)
169  return error;
170 
171  fsflags = fsflags_cvt(gfs2_to_fsflags, ip->i_diskflags);
172  if (!S_ISDIR(inode->i_mode) && ip->i_diskflags & GFS2_DIF_JDATA)
173  fsflags |= FS_JOURNAL_DATA_FL;
174  if (put_user(fsflags, ptr))
175  error = -EFAULT;
176 
177  gfs2_glock_dq(&gh);
178  gfs2_holder_uninit(&gh);
179  return error;
180 }
181 
182 void gfs2_set_inode_flags(struct inode *inode)
183 {
184  struct gfs2_inode *ip = GFS2_I(inode);
185  unsigned int flags = inode->i_flags;
186 
188  if ((ip->i_eattr == 0) && !is_sxid(inode->i_mode))
189  inode->i_flags |= S_NOSEC;
191  flags |= S_IMMUTABLE;
193  flags |= S_APPEND;
194  if (ip->i_diskflags & GFS2_DIF_NOATIME)
195  flags |= S_NOATIME;
196  if (ip->i_diskflags & GFS2_DIF_SYNC)
197  flags |= S_SYNC;
198  inode->i_flags = flags;
199 }
200 
201 /* Flags that can be set by user space */
202 #define GFS2_FLAGS_USER_SET (GFS2_DIF_JDATA| \
203  GFS2_DIF_IMMUTABLE| \
204  GFS2_DIF_APPENDONLY| \
205  GFS2_DIF_NOATIME| \
206  GFS2_DIF_SYNC| \
207  GFS2_DIF_SYSTEM| \
208  GFS2_DIF_TOPDIR| \
209  GFS2_DIF_INHERIT_JDATA)
210 
218 static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
219 {
220  struct inode *inode = filp->f_path.dentry->d_inode;
221  struct gfs2_inode *ip = GFS2_I(inode);
222  struct gfs2_sbd *sdp = GFS2_SB(inode);
223  struct buffer_head *bh;
224  struct gfs2_holder gh;
225  int error;
226  u32 new_flags, flags;
227 
228  error = mnt_want_write_file(filp);
229  if (error)
230  return error;
231 
232  error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
233  if (error)
234  goto out_drop_write;
235 
236  error = -EACCES;
237  if (!inode_owner_or_capable(inode))
238  goto out;
239 
240  error = 0;
241  flags = ip->i_diskflags;
242  new_flags = (flags & ~mask) | (reqflags & mask);
243  if ((new_flags ^ flags) == 0)
244  goto out;
245 
246  error = -EINVAL;
247  if ((new_flags ^ flags) & ~GFS2_FLAGS_USER_SET)
248  goto out;
249 
250  error = -EPERM;
251  if (IS_IMMUTABLE(inode) && (new_flags & GFS2_DIF_IMMUTABLE))
252  goto out;
253  if (IS_APPEND(inode) && (new_flags & GFS2_DIF_APPENDONLY))
254  goto out;
255  if (((new_flags ^ flags) & GFS2_DIF_IMMUTABLE) &&
257  goto out;
258  if (!IS_IMMUTABLE(inode)) {
259  error = gfs2_permission(inode, MAY_WRITE);
260  if (error)
261  goto out;
262  }
263  if ((flags ^ new_flags) & GFS2_DIF_JDATA) {
264  if (flags & GFS2_DIF_JDATA)
265  gfs2_log_flush(sdp, ip->i_gl);
266  error = filemap_fdatawrite(inode->i_mapping);
267  if (error)
268  goto out;
269  error = filemap_fdatawait(inode->i_mapping);
270  if (error)
271  goto out;
272  }
273  error = gfs2_trans_begin(sdp, RES_DINODE, 0);
274  if (error)
275  goto out;
276  error = gfs2_meta_inode_buffer(ip, &bh);
277  if (error)
278  goto out_trans_end;
279  gfs2_trans_add_bh(ip->i_gl, bh, 1);
280  ip->i_diskflags = new_flags;
281  gfs2_dinode_out(ip, bh->b_data);
282  brelse(bh);
283  gfs2_set_inode_flags(inode);
284  gfs2_set_aops(inode);
285 out_trans_end:
286  gfs2_trans_end(sdp);
287 out:
289 out_drop_write:
290  mnt_drop_write_file(filp);
291  return error;
292 }
293 
294 static int gfs2_set_flags(struct file *filp, u32 __user *ptr)
295 {
296  struct inode *inode = filp->f_path.dentry->d_inode;
297  u32 fsflags, gfsflags;
298 
299  if (get_user(fsflags, ptr))
300  return -EFAULT;
301 
302  gfsflags = fsflags_cvt(fsflags_to_gfs2, fsflags);
303  if (!S_ISDIR(inode->i_mode)) {
304  gfsflags &= ~GFS2_DIF_TOPDIR;
305  if (gfsflags & GFS2_DIF_INHERIT_JDATA)
306  gfsflags ^= (GFS2_DIF_JDATA | GFS2_DIF_INHERIT_JDATA);
307  return do_gfs2_set_flags(filp, gfsflags, ~0);
308  }
309  return do_gfs2_set_flags(filp, gfsflags, ~GFS2_DIF_JDATA);
310 }
311 
312 static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
313 {
314  switch(cmd) {
315  case FS_IOC_GETFLAGS:
316  return gfs2_get_flags(filp, (u32 __user *)arg);
317  case FS_IOC_SETFLAGS:
318  return gfs2_set_flags(filp, (u32 __user *)arg);
319  case FITRIM:
320  return gfs2_fitrim(filp, (void __user *)arg);
321  }
322  return -ENOTTY;
323 }
324 
337 static void gfs2_size_hint(struct file *filep, loff_t offset, size_t size)
338 {
339  struct inode *inode = filep->f_dentry->d_inode;
340  struct gfs2_sbd *sdp = GFS2_SB(inode);
341  struct gfs2_inode *ip = GFS2_I(inode);
342  size_t blks = (size + sdp->sd_sb.sb_bsize - 1) >> sdp->sd_sb.sb_bsize_shift;
343  int hint = min_t(size_t, INT_MAX, blks);
344 
345  atomic_set(&ip->i_res->rs_sizehint, hint);
346 }
347 
358 static int gfs2_allocate_page_backing(struct page *page)
359 {
360  struct inode *inode = page->mapping->host;
361  struct buffer_head bh;
362  unsigned long size = PAGE_CACHE_SIZE;
363  u64 lblock = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
364 
365  do {
366  bh.b_state = 0;
367  bh.b_size = size;
368  gfs2_block_map(inode, lblock, &bh, 1);
369  if (!buffer_mapped(&bh))
370  return -EIO;
371  size -= bh.b_size;
372  lblock += (bh.b_size >> inode->i_blkbits);
373  } while(size > 0);
374  return 0;
375 }
376 
386 static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
387 {
388  struct page *page = vmf->page;
389  struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
390  struct gfs2_inode *ip = GFS2_I(inode);
391  struct gfs2_sbd *sdp = GFS2_SB(inode);
392  unsigned long last_index;
393  u64 pos = page->index << PAGE_CACHE_SHIFT;
394  unsigned int data_blocks, ind_blocks, rblocks;
395  struct gfs2_holder gh;
396  loff_t size;
397  int ret;
398 
399  sb_start_pagefault(inode->i_sb);
400 
401  /* Update file times before taking page lock */
403 
404  ret = gfs2_rs_alloc(ip);
405  if (ret)
406  return ret;
407 
408  gfs2_size_hint(vma->vm_file, pos, PAGE_CACHE_SIZE);
409 
410  gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
411  ret = gfs2_glock_nq(&gh);
412  if (ret)
413  goto out;
414 
415  set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
417 
419  lock_page(page);
420  if (!PageUptodate(page) || page->mapping != inode->i_mapping) {
421  ret = -EAGAIN;
422  unlock_page(page);
423  }
424  goto out_unlock;
425  }
426 
427  ret = gfs2_rindex_update(sdp);
428  if (ret)
429  goto out_unlock;
430 
431  ret = gfs2_quota_lock_check(ip);
432  if (ret)
433  goto out_unlock;
434  gfs2_write_calc_reserv(ip, PAGE_CACHE_SIZE, &data_blocks, &ind_blocks);
435  ret = gfs2_inplace_reserve(ip, data_blocks + ind_blocks);
436  if (ret)
437  goto out_quota_unlock;
438 
439  rblocks = RES_DINODE + ind_blocks;
440  if (gfs2_is_jdata(ip))
441  rblocks += data_blocks ? data_blocks : 1;
442  if (ind_blocks || data_blocks) {
443  rblocks += RES_STATFS + RES_QUOTA;
444  rblocks += gfs2_rg_blocks(ip, data_blocks + ind_blocks);
445  }
446  ret = gfs2_trans_begin(sdp, rblocks, 0);
447  if (ret)
448  goto out_trans_fail;
449 
450  lock_page(page);
451  ret = -EINVAL;
452  size = i_size_read(inode);
453  last_index = (size - 1) >> PAGE_CACHE_SHIFT;
454  /* Check page index against inode size */
455  if (size == 0 || (page->index > last_index))
456  goto out_trans_end;
457 
458  ret = -EAGAIN;
459  /* If truncated, we must retry the operation, we may have raced
460  * with the glock demotion code.
461  */
462  if (!PageUptodate(page) || page->mapping != inode->i_mapping)
463  goto out_trans_end;
464 
465  /* Unstuff, if required, and allocate backing blocks for page */
466  ret = 0;
467  if (gfs2_is_stuffed(ip))
468  ret = gfs2_unstuff_dinode(ip, page);
469  if (ret == 0)
470  ret = gfs2_allocate_page_backing(page);
471 
472 out_trans_end:
473  if (ret)
474  unlock_page(page);
475  gfs2_trans_end(sdp);
476 out_trans_fail:
478 out_quota_unlock:
479  gfs2_quota_unlock(ip);
480 out_unlock:
481  gfs2_glock_dq(&gh);
482 out:
483  gfs2_holder_uninit(&gh);
484  if (ret == 0) {
485  set_page_dirty(page);
486  wait_on_page_writeback(page);
487  }
488  sb_end_pagefault(inode->i_sb);
489  return block_page_mkwrite_return(ret);
490 }
491 
492 static const struct vm_operations_struct gfs2_vm_ops = {
493  .fault = filemap_fault,
494  .page_mkwrite = gfs2_page_mkwrite,
495  .remap_pages = generic_file_remap_pages,
496 };
497 
510 static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
511 {
512  struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
513 
514  if (!(file->f_flags & O_NOATIME) &&
515  !IS_NOATIME(&ip->i_inode)) {
516  struct gfs2_holder i_gh;
517  int error;
518 
519  error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
520  &i_gh);
521  if (error)
522  return error;
523  /* grab lock to update inode */
524  gfs2_glock_dq_uninit(&i_gh);
525  file_accessed(file);
526  }
527  vma->vm_ops = &gfs2_vm_ops;
528 
529  return 0;
530 }
531 
540 static int gfs2_open(struct inode *inode, struct file *file)
541 {
542  struct gfs2_inode *ip = GFS2_I(inode);
543  struct gfs2_holder i_gh;
544  struct gfs2_file *fp;
545  int error;
546 
547  fp = kzalloc(sizeof(struct gfs2_file), GFP_KERNEL);
548  if (!fp)
549  return -ENOMEM;
550 
551  mutex_init(&fp->f_fl_mutex);
552 
553  gfs2_assert_warn(GFS2_SB(inode), !file->private_data);
554  file->private_data = fp;
555 
556  if (S_ISREG(ip->i_inode.i_mode)) {
557  error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
558  &i_gh);
559  if (error)
560  goto fail;
561 
562  if (!(file->f_flags & O_LARGEFILE) &&
563  i_size_read(inode) > MAX_NON_LFS) {
564  error = -EOVERFLOW;
565  goto fail_gunlock;
566  }
567 
568  gfs2_glock_dq_uninit(&i_gh);
569  }
570 
571  return 0;
572 
573 fail_gunlock:
574  gfs2_glock_dq_uninit(&i_gh);
575 fail:
576  file->private_data = NULL;
577  kfree(fp);
578  return error;
579 }
580 
589 static int gfs2_release(struct inode *inode, struct file *file)
590 {
591  struct gfs2_inode *ip = GFS2_I(inode);
592 
593  kfree(file->private_data);
594  file->private_data = NULL;
595 
596  if ((file->f_mode & FMODE_WRITE) &&
597  (atomic_read(&inode->i_writecount) == 1))
598  gfs2_rs_delete(ip);
599 
600  return 0;
601 }
602 
624 static int gfs2_fsync(struct file *file, loff_t start, loff_t end,
625  int datasync)
626 {
627  struct address_space *mapping = file->f_mapping;
628  struct inode *inode = mapping->host;
629  int sync_state = inode->i_state & (I_DIRTY_SYNC|I_DIRTY_DATASYNC);
630  struct gfs2_inode *ip = GFS2_I(inode);
631  int ret = 0, ret1 = 0;
632 
633  if (mapping->nrpages) {
634  ret1 = filemap_fdatawrite_range(mapping, start, end);
635  if (ret1 == -EIO)
636  return ret1;
637  }
638 
639  if (datasync)
640  sync_state &= ~I_DIRTY_SYNC;
641 
642  if (sync_state) {
643  ret = sync_inode_metadata(inode, 1);
644  if (ret)
645  return ret;
646  if (gfs2_is_jdata(ip))
647  filemap_write_and_wait(mapping);
648  gfs2_ail_flush(ip->i_gl, 1);
649  }
650 
651  if (mapping->nrpages)
652  ret = filemap_fdatawait_range(mapping, start, end);
653 
654  return ret ? ret : ret1;
655 }
656 
671 static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
672  unsigned long nr_segs, loff_t pos)
673 {
674  struct file *file = iocb->ki_filp;
675  size_t writesize = iov_length(iov, nr_segs);
676  struct dentry *dentry = file->f_dentry;
677  struct gfs2_inode *ip = GFS2_I(dentry->d_inode);
678  int ret;
679 
680  ret = gfs2_rs_alloc(ip);
681  if (ret)
682  return ret;
683 
684  gfs2_size_hint(file, pos, writesize);
685 
686  if (file->f_flags & O_APPEND) {
687  struct gfs2_holder gh;
688 
689  ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
690  if (ret)
691  return ret;
693  }
694 
695  return generic_file_aio_write(iocb, iov, nr_segs, pos);
696 }
697 
698 static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
699  int mode)
700 {
701  struct gfs2_inode *ip = GFS2_I(inode);
702  struct buffer_head *dibh;
703  int error;
704  loff_t size = len;
705  unsigned int nr_blks;
706  sector_t lblock = offset >> inode->i_blkbits;
707 
708  error = gfs2_meta_inode_buffer(ip, &dibh);
709  if (unlikely(error))
710  return error;
711 
712  gfs2_trans_add_bh(ip->i_gl, dibh, 1);
713 
714  if (gfs2_is_stuffed(ip)) {
715  error = gfs2_unstuff_dinode(ip, NULL);
716  if (unlikely(error))
717  goto out;
718  }
719 
720  while (len) {
721  struct buffer_head bh_map = { .b_state = 0, .b_blocknr = 0 };
722  bh_map.b_size = len;
723  set_buffer_zeronew(&bh_map);
724 
725  error = gfs2_block_map(inode, lblock, &bh_map, 1);
726  if (unlikely(error))
727  goto out;
728  len -= bh_map.b_size;
729  nr_blks = bh_map.b_size >> inode->i_blkbits;
730  lblock += nr_blks;
731  if (!buffer_new(&bh_map))
732  continue;
733  if (unlikely(!buffer_zeronew(&bh_map))) {
734  error = -EIO;
735  goto out;
736  }
737  }
738  if (offset + size > inode->i_size && !(mode & FALLOC_FL_KEEP_SIZE))
739  i_size_write(inode, offset + size);
740 
741  mark_inode_dirty(inode);
742 
743 out:
744  brelse(dibh);
745  return error;
746 }
747 
748 static void calc_max_reserv(struct gfs2_inode *ip, loff_t max, loff_t *len,
749  unsigned int *data_blocks, unsigned int *ind_blocks)
750 {
751  const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
752  unsigned int max_blocks = ip->i_rgd->rd_free_clone;
753  unsigned int tmp, max_data = max_blocks - 3 * (sdp->sd_max_height - 1);
754 
755  for (tmp = max_data; tmp > sdp->sd_diptrs;) {
756  tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs);
757  max_data -= tmp;
758  }
759  /* This calculation isn't the exact reverse of gfs2_write_calc_reserve,
760  so it might end up with fewer data blocks */
761  if (max_data <= *data_blocks)
762  return;
763  *data_blocks = max_data;
764  *ind_blocks = max_blocks - max_data;
765  *len = ((loff_t)max_data - 3) << sdp->sd_sb.sb_bsize_shift;
766  if (*len > max) {
767  *len = max;
768  gfs2_write_calc_reserv(ip, max, data_blocks, ind_blocks);
769  }
770 }
771 
772 static long gfs2_fallocate(struct file *file, int mode, loff_t offset,
773  loff_t len)
774 {
775  struct inode *inode = file->f_path.dentry->d_inode;
776  struct gfs2_sbd *sdp = GFS2_SB(inode);
777  struct gfs2_inode *ip = GFS2_I(inode);
778  unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
779  loff_t bytes, max_bytes;
780  int error;
781  const loff_t pos = offset;
782  const loff_t count = len;
783  loff_t bsize_mask = ~((loff_t)sdp->sd_sb.sb_bsize - 1);
784  loff_t next = (offset + len - 1) >> sdp->sd_sb.sb_bsize_shift;
785  loff_t max_chunk_size = UINT_MAX & bsize_mask;
786  next = (next + 1) << sdp->sd_sb.sb_bsize_shift;
787 
788  /* We only support the FALLOC_FL_KEEP_SIZE mode */
789  if (mode & ~FALLOC_FL_KEEP_SIZE)
790  return -EOPNOTSUPP;
791 
792  offset &= bsize_mask;
793 
794  len = next - offset;
795  bytes = sdp->sd_max_rg_data * sdp->sd_sb.sb_bsize / 2;
796  if (!bytes)
797  bytes = UINT_MAX;
798  bytes &= bsize_mask;
799  if (bytes == 0)
800  bytes = sdp->sd_sb.sb_bsize;
801 
802  error = gfs2_rs_alloc(ip);
803  if (error)
804  return error;
805 
806  gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ip->i_gh);
807  error = gfs2_glock_nq(&ip->i_gh);
808  if (unlikely(error))
809  goto out_uninit;
810 
811  gfs2_size_hint(file, offset, len);
812 
813  while (len > 0) {
814  if (len < bytes)
815  bytes = len;
816  if (!gfs2_write_alloc_required(ip, offset, bytes)) {
817  len -= bytes;
818  offset += bytes;
819  continue;
820  }
821  error = gfs2_quota_lock_check(ip);
822  if (error)
823  goto out_unlock;
824 
825 retry:
826  gfs2_write_calc_reserv(ip, bytes, &data_blocks, &ind_blocks);
827 
828  error = gfs2_inplace_reserve(ip, data_blocks + ind_blocks);
829  if (error) {
830  if (error == -ENOSPC && bytes > sdp->sd_sb.sb_bsize) {
831  bytes >>= 1;
832  bytes &= bsize_mask;
833  if (bytes == 0)
834  bytes = sdp->sd_sb.sb_bsize;
835  goto retry;
836  }
837  goto out_qunlock;
838  }
839  max_bytes = bytes;
840  calc_max_reserv(ip, (len > max_chunk_size)? max_chunk_size: len,
841  &max_bytes, &data_blocks, &ind_blocks);
842 
843  rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
844  RES_RG_HDR + gfs2_rg_blocks(ip, data_blocks + ind_blocks);
845  if (gfs2_is_jdata(ip))
846  rblocks += data_blocks ? data_blocks : 1;
847 
848  error = gfs2_trans_begin(sdp, rblocks,
849  PAGE_CACHE_SIZE/sdp->sd_sb.sb_bsize);
850  if (error)
851  goto out_trans_fail;
852 
853  error = fallocate_chunk(inode, offset, max_bytes, mode);
854  gfs2_trans_end(sdp);
855 
856  if (error)
857  goto out_trans_fail;
858 
859  len -= max_bytes;
860  offset += max_bytes;
862  gfs2_quota_unlock(ip);
863  }
864 
865  if (error == 0)
866  error = generic_write_sync(file, pos, count);
867  goto out_unlock;
868 
869 out_trans_fail:
871 out_qunlock:
872  gfs2_quota_unlock(ip);
873 out_unlock:
874  gfs2_glock_dq(&ip->i_gh);
875 out_uninit:
876  gfs2_holder_uninit(&ip->i_gh);
877  return error;
878 }
879 
880 #ifdef CONFIG_GFS2_FS_LOCKING_DLM
881 
897 static int gfs2_setlease(struct file *file, long arg, struct file_lock **fl)
898 {
899  return -EINVAL;
900 }
901 
911 static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)
912 {
913  struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
914  struct gfs2_sbd *sdp = GFS2_SB(file->f_mapping->host);
915  struct lm_lockstruct *ls = &sdp->sd_lockstruct;
916 
917  if (!(fl->fl_flags & FL_POSIX))
918  return -ENOLCK;
919  if (__mandatory_lock(&ip->i_inode) && fl->fl_type != F_UNLCK)
920  return -ENOLCK;
921 
922  if (cmd == F_CANCELLK) {
923  /* Hack: */
924  cmd = F_SETLK;
925  fl->fl_type = F_UNLCK;
926  }
927  if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
928  return -EIO;
929  if (IS_GETLK(cmd))
930  return dlm_posix_get(ls->ls_dlm, ip->i_no_addr, file, fl);
931  else if (fl->fl_type == F_UNLCK)
932  return dlm_posix_unlock(ls->ls_dlm, ip->i_no_addr, file, fl);
933  else
934  return dlm_posix_lock(ls->ls_dlm, ip->i_no_addr, file, cmd, fl);
935 }
936 
937 static int do_flock(struct file *file, int cmd, struct file_lock *fl)
938 {
939  struct gfs2_file *fp = file->private_data;
940  struct gfs2_holder *fl_gh = &fp->f_fl_gh;
941  struct gfs2_inode *ip = GFS2_I(file->f_path.dentry->d_inode);
942  struct gfs2_glock *gl;
943  unsigned int state;
944  int flags;
945  int error = 0;
946 
947  state = (fl->fl_type == F_WRLCK) ? LM_ST_EXCLUSIVE : LM_ST_SHARED;
948  flags = (IS_SETLKW(cmd) ? 0 : LM_FLAG_TRY) | GL_EXACT | GL_NOCACHE;
949 
950  mutex_lock(&fp->f_fl_mutex);
951 
952  gl = fl_gh->gh_gl;
953  if (gl) {
954  if (fl_gh->gh_state == state)
955  goto out;
957  &(struct file_lock){.fl_type = F_UNLCK});
958  gfs2_glock_dq_wait(fl_gh);
959  gfs2_holder_reinit(state, flags, fl_gh);
960  } else {
961  error = gfs2_glock_get(GFS2_SB(&ip->i_inode), ip->i_no_addr,
962  &gfs2_flock_glops, CREATE, &gl);
963  if (error)
964  goto out;
965  gfs2_holder_init(gl, state, flags, fl_gh);
966  gfs2_glock_put(gl);
967  }
968  error = gfs2_glock_nq(fl_gh);
969  if (error) {
970  gfs2_holder_uninit(fl_gh);
971  if (error == GLR_TRYFAILED)
972  error = -EAGAIN;
973  } else {
974  error = flock_lock_file_wait(file, fl);
975  gfs2_assert_warn(GFS2_SB(&ip->i_inode), !error);
976  }
977 
978 out:
979  mutex_unlock(&fp->f_fl_mutex);
980  return error;
981 }
982 
983 static void do_unflock(struct file *file, struct file_lock *fl)
984 {
985  struct gfs2_file *fp = file->private_data;
986  struct gfs2_holder *fl_gh = &fp->f_fl_gh;
987 
988  mutex_lock(&fp->f_fl_mutex);
989  flock_lock_file_wait(file, fl);
990  if (fl_gh->gh_gl) {
991  gfs2_glock_dq_wait(fl_gh);
992  gfs2_holder_uninit(fl_gh);
993  }
994  mutex_unlock(&fp->f_fl_mutex);
995 }
996 
1006 static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl)
1007 {
1008  if (!(fl->fl_flags & FL_FLOCK))
1009  return -ENOLCK;
1010  if (fl->fl_type & LOCK_MAND)
1011  return -EOPNOTSUPP;
1012 
1013  if (fl->fl_type == F_UNLCK) {
1014  do_unflock(file, fl);
1015  return 0;
1016  } else {
1017  return do_flock(file, cmd, fl);
1018  }
1019 }
1020 
1021 const struct file_operations gfs2_file_fops = {
1022  .llseek = gfs2_llseek,
1023  .read = do_sync_read,
1024  .aio_read = generic_file_aio_read,
1025  .write = do_sync_write,
1026  .aio_write = gfs2_file_aio_write,
1027  .unlocked_ioctl = gfs2_ioctl,
1028  .mmap = gfs2_mmap,
1029  .open = gfs2_open,
1030  .release = gfs2_release,
1031  .fsync = gfs2_fsync,
1032  .lock = gfs2_lock,
1033  .flock = gfs2_flock,
1034  .splice_read = generic_file_splice_read,
1035  .splice_write = generic_file_splice_write,
1036  .setlease = gfs2_setlease,
1037  .fallocate = gfs2_fallocate,
1038 };
1039 
1040 const struct file_operations gfs2_dir_fops = {
1041  .readdir = gfs2_readdir,
1042  .unlocked_ioctl = gfs2_ioctl,
1043  .open = gfs2_open,
1044  .release = gfs2_release,
1045  .fsync = gfs2_fsync,
1046  .lock = gfs2_lock,
1047  .flock = gfs2_flock,
1048  .llseek = default_llseek,
1049 };
1050 
1051 #endif /* CONFIG_GFS2_FS_LOCKING_DLM */
1052 
1054  .llseek = gfs2_llseek,
1055  .read = do_sync_read,
1056  .aio_read = generic_file_aio_read,
1057  .write = do_sync_write,
1058  .aio_write = gfs2_file_aio_write,
1059  .unlocked_ioctl = gfs2_ioctl,
1060  .mmap = gfs2_mmap,
1061  .open = gfs2_open,
1062  .release = gfs2_release,
1063  .fsync = gfs2_fsync,
1064  .splice_read = generic_file_splice_read,
1065  .splice_write = generic_file_splice_write,
1066  .setlease = generic_setlease,
1067  .fallocate = gfs2_fallocate,
1068 };
1069 
1071  .readdir = gfs2_readdir,
1072  .unlocked_ioctl = gfs2_ioctl,
1073  .open = gfs2_open,
1074  .release = gfs2_release,
1075  .fsync = gfs2_fsync,
1076  .llseek = default_llseek,
1077 };
1078