diff options
Diffstat (limited to 'main/nfs-utils/0004-nfsexport-talk-to-kernel-using-file-descriptors-inst.patch')
-rw-r--r-- | main/nfs-utils/0004-nfsexport-talk-to-kernel-using-file-descriptors-inst.patch | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/main/nfs-utils/0004-nfsexport-talk-to-kernel-using-file-descriptors-inst.patch b/main/nfs-utils/0004-nfsexport-talk-to-kernel-using-file-descriptors-inst.patch deleted file mode 100644 index 8cd1e3b474..0000000000 --- a/main/nfs-utils/0004-nfsexport-talk-to-kernel-using-file-descriptors-inst.patch +++ /dev/null @@ -1,135 +0,0 @@ -From 9be231f2dde111d4841549140c7fd7aa2c6f3b9e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi> -Date: Thu, 2 Oct 2014 16:17:30 +0300 -Subject: [PATCH v2 4/5] nfsexport: talk to kernel using file descriptors - instead of FILE -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Timo Teräs <timo.teras@iki.fi> ---- - support/nfs/nfsexport.c | 77 ++++++++++++++++++++++++++++--------------------- - 1 file changed, 44 insertions(+), 33 deletions(-) - -diff --git a/support/nfs/nfsexport.c b/support/nfs/nfsexport.c -index f129fd2..afd7c90 100644 ---- a/support/nfs/nfsexport.c -+++ b/support/nfs/nfsexport.c -@@ -18,6 +18,7 @@ - #include <fcntl.h> - - #include "nfslib.h" -+#include "misc.h" - - /* if /proc/net/rpc/... exists, then - * write to it, as that interface is more stable. -@@ -32,62 +33,72 @@ - static int - exp_unexp(struct nfsctl_export *exp, int export) - { -- FILE *f; -+ char buf[RPC_CHAN_BUF_SIZE], *bp; - struct stat stb; - __u32 fsid; - char fsidstr[8]; - __u16 dev; - __u32 inode; -- int err; -+ int err = 0, f, blen; - -+ f = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY); -+ if (f < 0) return -1; - -- f = fopen("/proc/net/rpc/nfsd.export/channel", "w"); -- if (f == NULL) return -1; -- qword_print(f, exp->ex_client); -- qword_print(f, exp->ex_path); -+ bp = buf; blen = sizeof(buf); -+ qword_add(&bp, &blen, exp->ex_client); -+ qword_add(&bp, &blen, exp->ex_path); - if (export) { -- qword_printint(f, 0x7fffffff); -- qword_printint(f, exp->ex_flags); -- qword_printint(f, exp->ex_anon_uid); -- qword_printint(f, exp->ex_anon_gid); -- qword_printint(f, exp->ex_dev); -+ qword_addint(&bp, &blen, 0x7fffffff); -+ qword_addint(&bp, &blen, exp->ex_flags); -+ qword_addint(&bp, &blen, exp->ex_anon_uid); -+ qword_addint(&bp, &blen, exp->ex_anon_gid); -+ qword_addint(&bp, &blen, exp->ex_dev); - } else -- qword_printint(f, 1); -- -- err = qword_eol(f); -- fclose(f); -+ qword_addint(&bp, &blen, 1); -+ qword_addeol(&bp, &blen); -+ if (blen <= 0 || write(f, buf, bp - buf) != bp - buf) -+ err = -1; -+ close(f); - - if (stat(exp->ex_path, &stb) != 0) - return -1; -- f = fopen("/proc/net/rpc/nfsd.fh/channel", "w"); -- if (f==NULL) return -1; -+ -+ f = open("/proc/net/rpc/nfsd.fh/channel", O_WRONLY); -+ if (f < 0) return -1; - if (exp->ex_flags & NFSEXP_FSID) { -- qword_print(f,exp->ex_client); -- qword_printint(f,1); -+ bp = buf; blen = sizeof(buf); -+ qword_add(&bp, &blen, exp->ex_client); -+ qword_addint(&bp, &blen, 1); - fsid = exp->ex_dev; -- qword_printhex(f, (char*)&fsid, 4); -+ qword_addhex(&bp, &blen, (char*)&fsid, 4); - if (export) { -- qword_printint(f, 0x7fffffff); -- qword_print(f, exp->ex_path); -+ qword_addint(&bp, &blen, 0x7fffffff); -+ qword_add(&bp, &blen, exp->ex_path); - } else -- qword_printint(f, 1); -- -- err = qword_eol(f) || err; -+ qword_addint(&bp, &blen, 1); -+ qword_addeol(&bp, &blen); -+ if (blen <= 0 || write(f, buf, bp - buf) != bp - buf) -+ err = -1; - } -- qword_print(f,exp->ex_client); -- qword_printint(f,0); -+ -+ bp = buf; blen = sizeof(buf); -+ qword_add(&bp, &blen, exp->ex_client); -+ qword_addint(&bp, &blen, 0); - dev = htons(major(stb.st_dev)); memcpy(fsidstr, &dev, 2); - dev = htons(minor(stb.st_dev)); memcpy(fsidstr+2, &dev, 2); - inode = stb.st_ino; memcpy(fsidstr+4, &inode, 4); - -- qword_printhex(f, fsidstr, 8); -+ qword_addhex(&bp, &blen, fsidstr, 8); - if (export) { -- qword_printint(f, 0x7fffffff); -- qword_print(f, exp->ex_path); -+ qword_addint(&bp, &blen, 0x7fffffff); -+ qword_add(&bp, &blen, exp->ex_path); - } else -- qword_printint(f, 1); -- err = qword_eol(f) || err; -- fclose(f); -+ qword_addint(&bp, &blen, 1); -+ qword_addeol(&bp, &blen); -+ if (blen <= 0 || write(f, buf, bp - buf) != bp - buf) -+ err = -1; -+ close(f); -+ - return err; - } - --- -2.1.2 - |