aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/ops_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/ops_file.c')
-rw-r--r--fs/gfs2/ops_file.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index e6ae2551b0cb..d30c6db46241 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -19,10 +19,13 @@
19#include <linux/smp_lock.h> 19#include <linux/smp_lock.h>
20#include <linux/gfs2_ioctl.h> 20#include <linux/gfs2_ioctl.h>
21#include <linux/fs.h> 21#include <linux/fs.h>
22#include <linux/gfs2_ondisk.h>
22#include <asm/semaphore.h> 23#include <asm/semaphore.h>
23#include <asm/uaccess.h> 24#include <asm/uaccess.h>
24 25
25#include "gfs2.h" 26#include "gfs2.h"
27#include "lm_interface.h"
28#include "incore.h"
26#include "bmap.h" 29#include "bmap.h"
27#include "dir.h" 30#include "dir.h"
28#include "glock.h" 31#include "glock.h"
@@ -36,6 +39,7 @@
36#include "quota.h" 39#include "quota.h"
37#include "rgrp.h" 40#include "rgrp.h"
38#include "trans.h" 41#include "trans.h"
42#include "util.h"
39 43
40/* "bad" is for NFS support */ 44/* "bad" is for NFS support */
41struct filldir_bad_entry { 45struct filldir_bad_entry {
@@ -125,7 +129,7 @@ int gfs2_internal_read(struct gfs2_inode *ip, struct file_ra_state *ra_state,
125 129
126static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin) 130static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin)
127{ 131{
128 struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); 132 struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
129 struct gfs2_holder i_gh; 133 struct gfs2_holder i_gh;
130 loff_t error; 134 loff_t error;
131 135
@@ -172,7 +176,7 @@ static ssize_t __gfs2_file_aio_read(struct kiocb *iocb,
172 unsigned long nr_segs, loff_t *ppos) 176 unsigned long nr_segs, loff_t *ppos)
173{ 177{
174 struct file *filp = iocb->ki_filp; 178 struct file *filp = iocb->ki_filp;
175 struct gfs2_inode *ip = get_v2ip(filp->f_mapping->host); 179 struct gfs2_inode *ip = filp->f_mapping->host->u.generic_ip;
176 struct gfs2_holder gh; 180 struct gfs2_holder gh;
177 ssize_t retval; 181 ssize_t retval;
178 unsigned long seg; 182 unsigned long seg;
@@ -354,7 +358,7 @@ static int filldir_reg_func(void *opaque, const char *name, unsigned int length,
354 358
355static int readdir_reg(struct file *file, void *dirent, filldir_t filldir) 359static int readdir_reg(struct file *file, void *dirent, filldir_t filldir)
356{ 360{
357 struct gfs2_inode *dip = get_v2ip(file->f_mapping->host); 361 struct gfs2_inode *dip = file->f_mapping->host->u.generic_ip;
358 struct filldir_reg fdr; 362 struct filldir_reg fdr;
359 struct gfs2_holder d_gh; 363 struct gfs2_holder d_gh;
360 uint64_t offset = file->f_pos; 364 uint64_t offset = file->f_pos;
@@ -443,7 +447,7 @@ static int filldir_bad_func(void *opaque, const char *name, unsigned int length,
443 447
444static int readdir_bad(struct file *file, void *dirent, filldir_t filldir) 448static int readdir_bad(struct file *file, void *dirent, filldir_t filldir)
445{ 449{
446 struct gfs2_inode *dip = get_v2ip(file->f_mapping->host); 450 struct gfs2_inode *dip = file->f_mapping->host->u.generic_ip;
447 struct gfs2_sbd *sdp = dip->i_sbd; 451 struct gfs2_sbd *sdp = dip->i_sbd;
448 struct filldir_reg fdr; 452 struct filldir_reg fdr;
449 unsigned int entries, size; 453 unsigned int entries, size;
@@ -608,7 +612,7 @@ out:
608static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd, 612static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
609 unsigned long arg) 613 unsigned long arg)
610{ 614{
611 struct gfs2_inode *ip = get_v2ip(inode); 615 struct gfs2_inode *ip = inode->u.generic_ip;
612 616
613 switch (cmd) { 617 switch (cmd) {
614 case GFS2_IOCTL_SETFLAGS: 618 case GFS2_IOCTL_SETFLAGS:
@@ -630,7 +634,7 @@ static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
630 634
631static int gfs2_mmap(struct file *file, struct vm_area_struct *vma) 635static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
632{ 636{
633 struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); 637 struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
634 struct gfs2_holder i_gh; 638 struct gfs2_holder i_gh;
635 int error; 639 int error;
636 640
@@ -665,7 +669,7 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
665 669
666static int gfs2_open(struct inode *inode, struct file *file) 670static int gfs2_open(struct inode *inode, struct file *file)
667{ 671{
668 struct gfs2_inode *ip = get_v2ip(inode); 672 struct gfs2_inode *ip = inode->u.generic_ip;
669 struct gfs2_holder i_gh; 673 struct gfs2_holder i_gh;
670 struct gfs2_file *fp; 674 struct gfs2_file *fp;
671 int error; 675 int error;
@@ -679,8 +683,8 @@ static int gfs2_open(struct inode *inode, struct file *file)
679 fp->f_inode = ip; 683 fp->f_inode = ip;
680 fp->f_vfile = file; 684 fp->f_vfile = file;
681 685
682 gfs2_assert_warn(ip->i_sbd, !get_v2fp(file)); 686 gfs2_assert_warn(ip->i_sbd, !file->private_data);
683 set_v2fp(file, fp); 687 file->private_data = fp;
684 688
685 if (S_ISREG(ip->i_di.di_mode)) { 689 if (S_ISREG(ip->i_di.di_mode)) {
686 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, 690 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
@@ -708,7 +712,7 @@ static int gfs2_open(struct inode *inode, struct file *file)
708 gfs2_glock_dq_uninit(&i_gh); 712 gfs2_glock_dq_uninit(&i_gh);
709 713
710 fail: 714 fail:
711 set_v2fp(file, NULL); 715 file->private_data = NULL;
712 kfree(fp); 716 kfree(fp);
713 717
714 return error; 718 return error;
@@ -724,11 +728,11 @@ static int gfs2_open(struct inode *inode, struct file *file)
724 728
725static int gfs2_close(struct inode *inode, struct file *file) 729static int gfs2_close(struct inode *inode, struct file *file)
726{ 730{
727 struct gfs2_sbd *sdp = get_v2sdp(inode->i_sb); 731 struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;
728 struct gfs2_file *fp; 732 struct gfs2_file *fp;
729 733
730 fp = get_v2fp(file); 734 fp = file->private_data;
731 set_v2fp(file, NULL); 735 file->private_data = NULL;
732 736
733 if (gfs2_assert_warn(sdp, fp)) 737 if (gfs2_assert_warn(sdp, fp))
734 return -EIO; 738 return -EIO;
@@ -748,7 +752,7 @@ static int gfs2_close(struct inode *inode, struct file *file)
748 752
749static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync) 753static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync)
750{ 754{
751 struct gfs2_inode *ip = get_v2ip(dentry->d_inode); 755 struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
752 756
753 gfs2_log_flush_glock(ip->i_gl); 757 gfs2_log_flush_glock(ip->i_gl);
754 758
@@ -766,7 +770,7 @@ static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync)
766 770
767static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl) 771static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)
768{ 772{
769 struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); 773 struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
770 struct gfs2_sbd *sdp = ip->i_sbd; 774 struct gfs2_sbd *sdp = ip->i_sbd;
771 struct lm_lockname name = 775 struct lm_lockname name =
772 { .ln_number = ip->i_num.no_addr, 776 { .ln_number = ip->i_num.no_addr,
@@ -824,7 +828,7 @@ static ssize_t gfs2_sendfile(struct file *in_file, loff_t *offset, size_t count,
824 828
825static int do_flock(struct file *file, int cmd, struct file_lock *fl) 829static int do_flock(struct file *file, int cmd, struct file_lock *fl)
826{ 830{
827 struct gfs2_file *fp = get_v2fp(file); 831 struct gfs2_file *fp = file->private_data;
828 struct gfs2_holder *fl_gh = &fp->f_fl_gh; 832 struct gfs2_holder *fl_gh = &fp->f_fl_gh;
829 struct gfs2_inode *ip = fp->f_inode; 833 struct gfs2_inode *ip = fp->f_inode;
830 struct gfs2_glock *gl; 834 struct gfs2_glock *gl;
@@ -874,7 +878,7 @@ static int do_flock(struct file *file, int cmd, struct file_lock *fl)
874 878
875static void do_unflock(struct file *file, struct file_lock *fl) 879static void do_unflock(struct file *file, struct file_lock *fl)
876{ 880{
877 struct gfs2_file *fp = get_v2fp(file); 881 struct gfs2_file *fp = file->private_data;
878 struct gfs2_holder *fl_gh = &fp->f_fl_gh; 882 struct gfs2_holder *fl_gh = &fp->f_fl_gh;
879 883
880 mutex_lock(&fp->f_fl_mutex); 884 mutex_lock(&fp->f_fl_mutex);
@@ -895,7 +899,7 @@ static void do_unflock(struct file *file, struct file_lock *fl)
895 899
896static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl) 900static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl)
897{ 901{
898 struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); 902 struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
899 struct gfs2_sbd *sdp = ip->i_sbd; 903 struct gfs2_sbd *sdp = ip->i_sbd;
900 904
901 if (!(fl->fl_flags & FL_FLOCK)) 905 if (!(fl->fl_flags & FL_FLOCK))