From: Wendy Cheng <wcheng@redhat.com>
To: NFS list <linux-nfs@vger.kernel.org>, cluster-devel@redhat.com
Subject: [PATCH 1/3] NLM add resume procfs file
Date: Fri, 25 Jan 2008 00:15:05 -0500 [thread overview]
Message-ID: <47997059.704@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 216 bytes --]
Add a new nfsd procfs file "resume_ip" to enable per-ip base lockd grace
period:
Example Usage:
root-shell> echo 10.1.1.64 > /proc/fs/nfsd/resume_ip
Only support IPV4 address for this patch submission.
-- Wendy
[-- Attachment #2: resume_001.patch --]
[-- Type: text/x-patch, Size: 4357 bytes --]
Add a new nfsd procfs file "resume_ip" to enable per-ip base lockd grace
period:
Example Usage:
root-shell> echo 10.1.1.64 > /proc/fs/nfsd/resume_ip
Only support IPV4 address for this patch submission.
Signed-off-by: S. Wendy Cheng <wcheng@redhat.com>
Signed-off-by: Lon Hohberger <lhh@redhat.com>
fs/lockd/svcsubs.c | 9 +++++++++
fs/nfsd/nfsctl.c | 43 ++++++++++++++++++++++++++++++++++++++-----
include/linux/lockd/lockd.h | 1 +
3 files changed, 48 insertions(+), 5 deletions(-)
--- linux-1/fs/nfsd/nfsctl.c 2008-01-22 10:36:24.000000000 -0500
+++ linux-2/fs/nfsd/nfsctl.c 2008-01-24 17:03:12.000000000 -0500
@@ -56,6 +56,7 @@ enum {
NFSD_Fh,
NFSD_FO_UnlockIP,
NFSD_FO_UnlockFS,
+ NFSD_FO_ResumeIP,
NFSD_Threads,
NFSD_Pool_Threads,
NFSD_Versions,
@@ -94,6 +95,7 @@ static ssize_t write_recoverydir(struct
static ssize_t failover_unlock_ip(struct file *file, char *buf, size_t size);
static ssize_t failover_unlock_fs(struct file *file, char *buf, size_t size);
+static ssize_t failover_resume_ip(struct file *file, char *buf, size_t size);
static ssize_t (*write_op[])(struct file *, char *, size_t) = {
[NFSD_Svc] = write_svc,
@@ -106,6 +108,7 @@ static ssize_t (*write_op[])(struct file
[NFSD_Fh] = write_filehandle,
[NFSD_FO_UnlockIP] = failover_unlock_ip,
[NFSD_FO_UnlockFS] = failover_unlock_fs,
+ [NFSD_FO_ResumeIP] = failover_resume_ip,
[NFSD_Threads] = write_threads,
[NFSD_Pool_Threads] = write_pool_threads,
[NFSD_Versions] = write_versions,
@@ -297,11 +300,13 @@ static ssize_t write_getfd(struct file *
return err;
}
-static ssize_t failover_unlock_ip(struct file *file, char *buf, size_t size)
+static int failover_parse_ip(struct file *file,
+ char *buf,
+ size_t size,
+ __be32 *server_ip)
{
- __be32 server_ip;
char *fo_path, c;
- int b1, b2, b3, b4;
+ int b1, b2, b3, b4, len;
/* sanity check */
if (size == 0)
@@ -315,13 +320,39 @@ static ssize_t failover_unlock_ip(struct
return -EINVAL;
/* get ipv4 address */
- if (sscanf(fo_path, "%u.%u.%u.%u%c", &b1, &b2, &b3, &b4, &c) != 4)
+ len = sscanf(fo_path, "%u.%u.%u.%u%c", &b1, &b2, &b3, &b4, &c);
+ if (len != 4)
return -EINVAL;
- server_ip = htonl((((((b1<<8)|b2)<<8)|b3)<<8)|b4);
+
+ *server_ip = htonl((((((b1<<8)|b2)<<8)|b3)<<8)|b4);
+
+ return len;
+}
+
+static ssize_t failover_unlock_ip(struct file *file, char *buf, size_t size)
+{
+ __be32 server_ip;
+ int rc;
+
+ rc = failover_parse_ip(file, buf, size, &server_ip);
+ if (rc < 0)
+ return rc;
return nlmsvc_failover_ip(server_ip);
}
+static ssize_t failover_resume_ip(struct file *file, char *buf, size_t size)
+{
+ __be32 server_ip;
+ int len;
+
+ len = failover_parse_ip(file, buf, size, &server_ip);
+ if (len < 0)
+ return len;
+
+ return nlmsvc_failover_setgrace(&server_ip, len);
+}
+
static ssize_t failover_unlock_fs(struct file *file, char *buf, size_t size)
{
struct nameidata nd;
@@ -711,6 +742,8 @@ static int nfsd_fill_super(struct super_
&transaction_ops, S_IWUSR|S_IRUSR},
[NFSD_FO_UnlockFS] = {"unlock_filesystem",
&transaction_ops, S_IWUSR|S_IRUSR},
+ [NFSD_FO_ResumeIP] = {"resume_ip",
+ &transaction_ops, S_IWUSR|S_IRUSR},
[NFSD_Fh] = {"filehandle", &transaction_ops, S_IWUSR|S_IRUSR},
[NFSD_Threads] = {"threads", &transaction_ops, S_IWUSR|S_IRUSR},
[NFSD_Pool_Threads] = {"pool_threads", &transaction_ops, S_IWUSR|S_IRUSR},
--- linux-1/fs/lockd/svcsubs.c 2008-01-22 10:36:24.000000000 -0500
+++ linux-2/fs/lockd/svcsubs.c 2008-01-22 11:45:44.000000000 -0500
@@ -422,3 +422,12 @@ nlmsvc_failover_ip(__be32 server_addr)
nlmsvc_failover_file_ok_ip);
}
EXPORT_SYMBOL_GPL(nlmsvc_failover_ip);
+
+int
+nlmsvc_failover_setgrace(void *server_ip, int ip_size)
+{
+ /* implemented by resume_002.patch */
+ return ENOSYS;
+}
+EXPORT_SYMBOL_GPL(nlmsvc_failover_setgrace);
+
--- linux-1/include/linux/lockd/lockd.h 2008-01-22 10:36:24.000000000 -0500
+++ linux-2/include/linux/lockd/lockd.h 2008-01-22 11:45:44.000000000 -0500
@@ -220,6 +220,7 @@ void nlmsvc_invalidate_all(void);
*/
int nlmsvc_failover_path(struct nameidata *nd);
int nlmsvc_failover_ip(__be32 server_addr);
+int nlmsvc_failover_setgrace(void *server_ip, int ip_size);
static __inline__ struct inode *
nlmsvc_file_inode(struct nlm_file *file)
next reply other threads:[~2008-01-25 5:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-25 5:15 Wendy Cheng [this message]
2008-01-29 2:19 ` [PATCH 1/3] NLM add resume procfs file J. Bruce Fields
2008-01-29 2:29 ` J. Bruce Fields
2008-01-30 16:43 ` Wendy Cheng
2008-02-01 17:24 ` J. Bruce Fields
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=47997059.704@redhat.com \
--to=wcheng@redhat.com \
--cc=cluster-devel@redhat.com \
--cc=linux-nfs@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox