diff options
author | JP Abgrall <jpa@google.com> | 2012-05-08 16:49:25 -0700 |
---|---|---|
committer | JP Abgrall <jpa@google.com> | 2012-05-08 16:49:25 -0700 |
commit | 36c97064196c4549f7f5353fdce970d62b4795f9 (patch) | |
tree | ac39335466302c267a5485232da7c1df13e2a76b /fs/nfsd | |
parent | 11e410cc6d1483328839cd3df8b554299e86aede (diff) | |
parent | 52f91d889a2c2a0f9e0b5e97fa7be8b584834016 (diff) | |
download | kernel_samsung_crespo-36c97064196c4549f7f5353fdce970d62b4795f9.zip kernel_samsung_crespo-36c97064196c4549f7f5353fdce970d62b4795f9.tar.gz kernel_samsung_crespo-36c97064196c4549f7f5353fdce970d62b4795f9.tar.bz2 |
Merge remote-tracking branch 'common/android-3.0' into android-samsung-30-wip-mergedown
* common/android-3.0: (49 commits)
Linux 3.0.31
hfsplus: Fix potential buffer overflows
sched: Fix nohz load accounting -- again!
wl1251: fix crash on remove due to leftover work item
wl1251: fix crash on remove due to premature kfree
rtlwifi: Fix oops on unload
mac80211: fix AP mode EAP tx for VLAN stations
ipw2200: Fix race condition in the command completion acknowledge
i2c: pnx: Disable clk in suspend
libata: skip old error history when counting probe trials
hwmon: (coretemp) fix oops on cpu unplug
hwmon: (coretemp) Increase CPU core limit
efivars: Improve variable validation
efi: Validate UEFI boot variables
efivars: fix warnings when CONFIG_PSTORE=n
efivars: String functions
efi: Add new variable attributes
SCSI: libsas: fix false positive 'device attached' conditions
SCSI: libsas: fix sas_find_bcast_phy() in the presence of 'vacant' phys
ARM: 7403/1: tls: remove covert channel via TPIDRURW
...
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4proc.c | 7 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 23 |
2 files changed, 13 insertions, 17 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 0b8830c..d06a02c 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -812,6 +812,7 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_setattr *setattr) { __be32 status = nfs_ok; + int err; if (setattr->sa_iattr.ia_valid & ATTR_SIZE) { nfs4_lock_state(); @@ -823,9 +824,9 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, return status; } } - status = mnt_want_write(cstate->current_fh.fh_export->ex_path.mnt); - if (status) - return status; + err = mnt_want_write(cstate->current_fh.fh_export->ex_path.mnt); + if (err) + return nfserrno(err); status = nfs_ok; status = check_attr_support(rqstp, cstate, setattr->sa_bmval, diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index ecd8152..92f7eb7 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3956,16 +3956,14 @@ out: * vfs_test_lock. (Arguably perhaps test_lock should be done with an * inode operation.) */ -static int nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock) +static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock) { struct file *file; - int err; - - err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_READ, &file); - if (err) - return err; - err = vfs_test_lock(file, lock); - nfsd_close(file); + __be32 err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_READ, &file); + if (!err) { + err = nfserrno(vfs_test_lock(file, lock)); + nfsd_close(file); + } return err; } @@ -3978,7 +3976,6 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, { struct inode *inode; struct file_lock file_lock; - int error; __be32 status; if (locks_in_grace()) @@ -4030,12 +4027,10 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, nfs4_transform_lock_offset(&file_lock); - status = nfs_ok; - error = nfsd_test_lock(rqstp, &cstate->current_fh, &file_lock); - if (error) { - status = nfserrno(error); + status = nfsd_test_lock(rqstp, &cstate->current_fh, &file_lock); + if (status) goto out; - } + if (file_lock.fl_type != F_UNLCK) { status = nfserr_denied; nfs4_set_lock_denied(&file_lock, &lockt->lt_denied); |