diff options
Diffstat (limited to 'fs/nfsd/vfs.c')
-rw-r--r-- | fs/nfsd/vfs.c | 53 |
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 | |||
736 | nfsd_sync(struct file *filp) | 736 | nfsd_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); |
889 | out: | 889 | out: |
@@ -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 | } |