aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/vfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/vfs.c')
-rw-r--r--fs/nfsd/vfs.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index bb4d926e4487..4883d7586229 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -736,10 +736,10 @@ static int
736nfsd_sync(struct file *filp) 736nfsd_sync(struct file *filp)
737{ 737{
738 int err; 738 int err;
739 struct inode *inode = filp->f_dentry->d_inode; 739 struct inode *inode = filp->f_path.dentry->d_inode;
740 dprintk("nfsd: sync file %s\n", filp->f_dentry->d_name.name); 740 dprintk("nfsd: sync file %s\n", filp->f_path.dentry->d_name.name);
741 mutex_lock(&inode->i_mutex); 741 mutex_lock(&inode->i_mutex);
742 err=nfsd_dosync(filp, filp->f_dentry, filp->f_op); 742 err=nfsd_dosync(filp, filp->f_path.dentry, filp->f_op);
743 mutex_unlock(&inode->i_mutex); 743 mutex_unlock(&inode->i_mutex);
744 744
745 return err; 745 return err;
@@ -845,7 +845,7 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
845 int host_err; 845 int host_err;
846 846
847 err = nfserr_perm; 847 err = nfserr_perm;
848 inode = file->f_dentry->d_inode; 848 inode = file->f_path.dentry->d_inode;
849#ifdef MSNFS 849#ifdef MSNFS
850 if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && 850 if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) &&
851 (!lock_may_read(inode, offset, *count))) 851 (!lock_may_read(inode, offset, *count)))
@@ -883,7 +883,7 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
883 nfsdstats.io_read += host_err; 883 nfsdstats.io_read += host_err;
884 *count = host_err; 884 *count = host_err;
885 err = 0; 885 err = 0;
886 fsnotify_access(file->f_dentry); 886 fsnotify_access(file->f_path.dentry);
887 } else 887 } else
888 err = nfserrno(host_err); 888 err = nfserrno(host_err);
889out: 889out:
@@ -917,11 +917,11 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
917 err = nfserr_perm; 917 err = nfserr_perm;
918 918
919 if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && 919 if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) &&
920 (!lock_may_write(file->f_dentry->d_inode, offset, cnt))) 920 (!lock_may_write(file->f_path.dentry->d_inode, offset, cnt)))
921 goto out; 921 goto out;
922#endif 922#endif
923 923
924 dentry = file->f_dentry; 924 dentry = file->f_path.dentry;
925 inode = dentry->d_inode; 925 inode = dentry->d_inode;
926 exp = fhp->fh_export; 926 exp = fhp->fh_export;
927 927
@@ -950,7 +950,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
950 set_fs(oldfs); 950 set_fs(oldfs);
951 if (host_err >= 0) { 951 if (host_err >= 0) {
952 nfsdstats.io_write += cnt; 952 nfsdstats.io_write += cnt;
953 fsnotify_modify(file->f_dentry); 953 fsnotify_modify(file->f_path.dentry);
954 } 954 }
955 955
956 /* clear setuid/setgid flag after write */ 956 /* clear setuid/setgid flag after write */
@@ -1885,28 +1885,27 @@ nfsd_racache_init(int cache_size)
1885 return 0; 1885 return 0;
1886 if (cache_size < 2*RAPARM_HASH_SIZE) 1886 if (cache_size < 2*RAPARM_HASH_SIZE)
1887 cache_size = 2*RAPARM_HASH_SIZE; 1887 cache_size = 2*RAPARM_HASH_SIZE;
1888 raparml = kmalloc(sizeof(struct raparms) * cache_size, GFP_KERNEL); 1888 raparml = kcalloc(cache_size, sizeof(struct raparms), GFP_KERNEL);
1889 1889
1890 if (raparml != NULL) { 1890 if (!raparml) {
1891 dprintk("nfsd: allocating %d readahead buffers.\n",
1892 cache_size);
1893 for (i = 0 ; i < RAPARM_HASH_SIZE ; i++) {
1894 raparm_hash[i].pb_head = NULL;
1895 spin_lock_init(&raparm_hash[i].pb_lock);
1896 }
1897 nperbucket = cache_size >> RAPARM_HASH_BITS;
1898 memset(raparml, 0, sizeof(struct raparms) * cache_size);
1899 for (i = 0; i < cache_size - 1; i++) {
1900 if (i % nperbucket == 0)
1901 raparm_hash[j++].pb_head = raparml + i;
1902 if (i % nperbucket < nperbucket-1)
1903 raparml[i].p_next = raparml + i + 1;
1904 }
1905 } else {
1906 printk(KERN_WARNING 1891 printk(KERN_WARNING
1907 "nfsd: Could not allocate memory read-ahead cache.\n"); 1892 "nfsd: Could not allocate memory read-ahead cache.\n");
1908 return -ENOMEM; 1893 return -ENOMEM;
1909 } 1894 }
1895
1896 dprintk("nfsd: allocating %d readahead buffers.\n", cache_size);
1897 for (i = 0 ; i < RAPARM_HASH_SIZE ; i++) {
1898 raparm_hash[i].pb_head = NULL;
1899 spin_lock_init(&raparm_hash[i].pb_lock);
1900 }
1901 nperbucket = cache_size >> RAPARM_HASH_BITS;
1902 for (i = 0; i < cache_size - 1; i++) {
1903 if (i % nperbucket == 0)
1904 raparm_hash[j++].pb_head = raparml + i;
1905 if (i % nperbucket < nperbucket-1)
1906 raparml[i].p_next = raparml + i + 1;
1907 }
1908
1910 nfsdstats.ra_size = cache_size; 1909 nfsdstats.ra_size = cache_size;
1911 return 0; 1910 return 0;
1912} 1911}