diff options
Diffstat (limited to 'fs/nfs/file.c')
| -rw-r--r-- | fs/nfs/file.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 8689b736fdd9..c87dc713b5d7 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
| @@ -53,6 +53,7 @@ static int nfs_fsync(struct file *, struct dentry *dentry, int datasync); | |||
| 53 | static int nfs_check_flags(int flags); | 53 | static int nfs_check_flags(int flags); |
| 54 | static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl); | 54 | static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl); |
| 55 | static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl); | 55 | static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl); |
| 56 | static int nfs_setlease(struct file *file, long arg, struct file_lock **fl); | ||
| 56 | 57 | ||
| 57 | const struct file_operations nfs_file_operations = { | 58 | const struct file_operations nfs_file_operations = { |
| 58 | .llseek = nfs_file_llseek, | 59 | .llseek = nfs_file_llseek, |
| @@ -69,6 +70,7 @@ const struct file_operations nfs_file_operations = { | |||
| 69 | .flock = nfs_flock, | 70 | .flock = nfs_flock, |
| 70 | .splice_read = nfs_file_splice_read, | 71 | .splice_read = nfs_file_splice_read, |
| 71 | .check_flags = nfs_check_flags, | 72 | .check_flags = nfs_check_flags, |
| 73 | .setlease = nfs_setlease, | ||
| 72 | }; | 74 | }; |
| 73 | 75 | ||
| 74 | const struct inode_operations nfs_file_inode_operations = { | 76 | const struct inode_operations nfs_file_inode_operations = { |
| @@ -400,7 +402,9 @@ static int do_getlk(struct file *filp, int cmd, struct file_lock *fl) | |||
| 400 | 402 | ||
| 401 | lock_kernel(); | 403 | lock_kernel(); |
| 402 | /* Try local locking first */ | 404 | /* Try local locking first */ |
| 403 | if (posix_test_lock(filp, fl)) { | 405 | posix_test_lock(filp, fl); |
| 406 | if (fl->fl_type != F_UNLCK) { | ||
| 407 | /* found a conflict */ | ||
| 404 | goto out; | 408 | goto out; |
| 405 | } | 409 | } |
| 406 | 410 | ||
| @@ -558,3 +562,13 @@ static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl) | |||
| 558 | return do_unlk(filp, cmd, fl); | 562 | return do_unlk(filp, cmd, fl); |
| 559 | return do_setlk(filp, cmd, fl); | 563 | return do_setlk(filp, cmd, fl); |
| 560 | } | 564 | } |
| 565 | |||
| 566 | static int nfs_setlease(struct file *file, long arg, struct file_lock **fl) | ||
| 567 | { | ||
| 568 | /* | ||
| 569 | * There is no protocol support for leases, so we have no way | ||
| 570 | * to implement them correctly in the face of opens by other | ||
| 571 | * clients. | ||
| 572 | */ | ||
| 573 | return -EINVAL; | ||
| 574 | } | ||
