nfs: disable leases over NFS
As Peter Staubach says elsewhere (http://marc.info/?l=linux-kernel&m=118113649526444&w=2): > The problem is that some file system such as NFSv2 and NFSv3 do > not have sufficient support to be able to support leases correctly. > In particular for these two file systems, there is no over the wire > protocol support. > > Currently, these two file systems fail the fcntl(F_SETLEASE) call > accidentally, due to a reference counting difference. These file > systems should fail more consciously, with a proper error to > indicate that the call is invalid for them. Define an nfs setlease method that just returns -EINVAL. If someone can demonstrate a real need, perhaps we could reenable them in the presence of the "nolock" mount option. Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu> Cc: Peter Staubach <staubach@redhat.com> Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Родитель
60446067ba
Коммит
370f6599e8
|
@ -53,6 +53,7 @@ static int nfs_fsync(struct file *, struct dentry *dentry, int datasync);
|
||||||
static int nfs_check_flags(int flags);
|
static int nfs_check_flags(int flags);
|
||||||
static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl);
|
static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl);
|
||||||
static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl);
|
static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl);
|
||||||
|
static int nfs_setlease(struct file *file, long arg, struct file_lock **fl);
|
||||||
|
|
||||||
const struct file_operations nfs_file_operations = {
|
const struct file_operations nfs_file_operations = {
|
||||||
.llseek = nfs_file_llseek,
|
.llseek = nfs_file_llseek,
|
||||||
|
@ -69,6 +70,7 @@ const struct file_operations nfs_file_operations = {
|
||||||
.flock = nfs_flock,
|
.flock = nfs_flock,
|
||||||
.splice_read = nfs_file_splice_read,
|
.splice_read = nfs_file_splice_read,
|
||||||
.check_flags = nfs_check_flags,
|
.check_flags = nfs_check_flags,
|
||||||
|
.setlease = nfs_setlease,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations nfs_file_inode_operations = {
|
const struct inode_operations nfs_file_inode_operations = {
|
||||||
|
@ -558,3 +560,13 @@ static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl)
|
||||||
return do_unlk(filp, cmd, fl);
|
return do_unlk(filp, cmd, fl);
|
||||||
return do_setlk(filp, cmd, fl);
|
return do_setlk(filp, cmd, fl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nfs_setlease(struct file *file, long arg, struct file_lock **fl)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* There is no protocol support for leases, so we have no way
|
||||||
|
* to implement them correctly in the face of opens by other
|
||||||
|
* clients.
|
||||||
|
*/
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче