From: "J. Bruce Fields" <bfields@fieldses.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-fsdevel@vger.kernel.org,
"J. Bruce Fields" <bfields@fieldses.org>,
"J. Bruce Fields" <bfields@citi.umich.edu>
Subject: [PATCH 2/6] locks: provide a file lease method enabling cluster-coherent leases
Date: Fri, 29 Jun 2007 15:21:26 -0400 [thread overview]
Message-ID: <1183144890833-git-send-email-bfields@fieldses.org> (raw)
Message-ID: <59343fe9a0b0bdb9c39ed217185b9c0d6c7d8dae.1183143819.git.bfields@citi.umich.edu> (raw)
In-Reply-To: <11831448902131-git-send-email-bfields@fieldses.org>
In-Reply-To: <6e0beaf3e950494a6903571f0b5c9b61fc7bf650.1183143819.git.bfields@citi.umich.edu>
From: J. Bruce Fields <bfields@fieldses.org>
Currently leases are only kept locally, so there's no way for a distributed
filesystem to enforce them against multiple clients. We're particularly
interested in the case of nfsd exporting a cluster filesystem, in which
case nfsd needs cluster-coherent leases in order to implement delegations
correctly.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
---
fs/locks.c | 7 +++++--
include/linux/fs.h | 1 +
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/locks.c b/fs/locks.c
index 6ad3c7b..8fa4420 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1442,7 +1442,10 @@ int setlease(struct file *filp, long arg, struct file_lock **lease)
int error;
lock_kernel();
- error = __setlease(filp, arg, lease);
+ if (filp->f_op && filp->f_op->setlease)
+ error = filp->f_op->setlease(filp, arg, lease);
+ else
+ error = __setlease(filp, arg, lease);
unlock_kernel();
return error;
@@ -1474,7 +1477,7 @@ int fcntl_setlease(unsigned int fd, struct file *filp, long arg)
lock_kernel();
- error = __setlease(filp, arg, &flp);
+ error = setlease(filp, arg, &flp);
if (error || arg == F_UNLCK)
goto out_unlock;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 6a41f4c..4fbbc7f 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1113,6 +1113,7 @@ struct file_operations {
int (*flock) (struct file *, int, struct file_lock *);
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+ int (*setlease)(struct file *, long, struct file_lock **);
};
struct inode_operations {
--
1.5.2.58.g98ee
next prev parent reply other threads:[~2007-06-29 19:21 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-29 19:21 vfs lease api J. Bruce Fields
2007-06-29 19:21 ` [PATCH 1/6] locks: share more common lease code J. Bruce Fields
2007-06-29 19:21 ` J. Bruce Fields
2007-06-29 19:21 ` J. Bruce Fields [this message]
2007-06-29 19:21 ` [PATCH 2/6] locks: provide a file lease method enabling cluster-coherent leases J. Bruce Fields
2007-06-30 9:26 ` Christoph Hellwig
2007-06-29 19:21 ` [PATCH 3/6] locks: rename lease functions to reflect locks.c conventions J. Bruce Fields
2007-06-29 19:21 ` J. Bruce Fields
2007-06-30 9:22 ` Christoph Hellwig
2007-07-04 21:42 ` J. Bruce Fields
2007-06-29 19:21 ` [PATCH 4/6] locks: fix locks.c lease symbol exports J. Bruce Fields
2007-06-29 19:21 ` J. Bruce Fields
2007-06-30 9:23 ` Christoph Hellwig
2007-07-04 21:42 ` J. Bruce Fields
2007-06-29 19:21 ` [PATCH 5/6] gfs2: stop giving out non-cluster-coherent leases J. Bruce Fields
2007-06-29 19:21 ` J. Bruce Fields
2007-06-30 9:27 ` Christoph Hellwig
2007-07-01 15:00 ` J. Bruce Fields
2007-07-04 21:48 ` J. Bruce Fields
2007-06-29 19:21 ` [PATCH 6/6] nfs: disable leases over NFS J. Bruce Fields
2007-06-29 19:21 ` J. Bruce Fields
2007-06-29 21:16 ` Peter Staubach
2007-06-29 21:39 ` J. Bruce Fields
2007-06-29 22:30 ` Steven Whitehouse
2007-06-29 22:21 ` J. Bruce Fields
2007-06-30 9:25 ` Christoph Hellwig
2007-07-04 23:22 ` J. Bruce Fields
2007-07-05 15:41 ` J. Bruce Fields
2007-07-11 10:20 ` Christoph Hellwig
2007-07-11 23:10 ` J. Bruce Fields
2007-06-30 9:20 ` [PATCH 1/6] locks: share more common lease code Christoph Hellwig
2007-07-03 22:17 ` J. Bruce Fields
2007-07-04 8:26 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1183144890833-git-send-email-bfields@fieldses.org \
--to=bfields@fieldses.org \
--cc=akpm@linux-foundation.org \
--cc=bfields@citi.umich.edu \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.