[pve-devel] r6431 - in pve-cluster/trunk: . data data/src debian

svn-commits at proxmox.com svn-commits at proxmox.com
Mon Aug 8 08:54:28 CEST 2011


Author: dietmar
Date: 2011-08-08 08:54:28 +0200 (Mon, 08 Aug 2011)
New Revision: 6431

Modified:
   pve-cluster/trunk/Makefile
   pve-cluster/trunk/data/ChangeLog
   pve-cluster/trunk/data/Makefile.in
   pve-cluster/trunk/data/README
   pve-cluster/trunk/data/src/cfs-plug-func.c
   pve-cluster/trunk/data/src/cfs-plug.h
   pve-cluster/trunk/data/src/pmxcfs.c
   pve-cluster/trunk/debian/changelog
Log:
  * new virtual file to enabe/disable debugging



Modified: pve-cluster/trunk/Makefile
===================================================================
--- pve-cluster/trunk/Makefile	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/Makefile	2011-08-08 06:54:28 UTC (rev 6431)
@@ -2,7 +2,7 @@
 
 PACKAGE=pve-cluster
 PKGVER=1.0
-PKGREL=2
+PKGREL=3
 
 ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
 

Modified: pve-cluster/trunk/data/ChangeLog
===================================================================
--- pve-cluster/trunk/data/ChangeLog	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/data/ChangeLog	2011-08-08 06:54:28 UTC (rev 6431)
@@ -1,3 +1,11 @@
+2011-08-08  Proxmox Support Team  <support at proxmox.com>
+
+	* src/cfs-plug-func.c (cfs_plug_func_new): add write callback (to
+	trigger actions).
+
+	* src/pmxcfs.c (write_debug_setting_cb): implement callback to
+	enable/disable debug mode (.debug file)
+
 2011-08-05  Proxmox Support Team  <support at proxmox.com>
 
 	* PVE/pvecm (create): call keygen with parameter hash

Modified: pve-cluster/trunk/data/Makefile.in
===================================================================
--- pve-cluster/trunk/data/Makefile.in	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/data/Makefile.in	2011-08-08 06:54:28 UTC (rev 6431)
@@ -34,7 +34,7 @@
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
-	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
+	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL \
 	compile depcomp install-sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.in

Modified: pve-cluster/trunk/data/README
===================================================================
--- pve-cluster/trunk/data/README	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/data/README	2011-08-08 06:54:28 UTC (rev 6431)
@@ -1,3 +1,9 @@
+Enable/Disable debugging
+========================
+
+# echo "1" >/etc/pve/.debug 
+# echo "0" >/etc/pve/.debug 
+
 Memory leak debugging (valgrind)
 ================================
 

Modified: pve-cluster/trunk/data/src/cfs-plug-func.c
===================================================================
--- pve-cluster/trunk/data/src/cfs-plug-func.c	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/data/src/cfs-plug-func.c	2011-08-08 06:54:28 UTC (rev 6431)
@@ -81,6 +81,9 @@
 
 	memset(stbuf, 0, sizeof(struct stat));
 
+	if (fplug->data)
+		g_free(fplug->data);
+
 	fplug->data = fplug->update_callback(plug);
 
 	stbuf->st_mode = fplug->mode;
@@ -129,6 +132,50 @@
 }
 
 static int 
+cfs_plug_func_write(
+	cfs_plug_t *plug, 
+	const char *path, 
+	const char *buf, 
+	size_t size,
+	off_t offset, 
+	struct fuse_file_info *fi)
+{
+	(void) fi;
+
+	g_return_val_if_fail(plug != NULL, PARAM_CHECK_ERRNO);
+	g_return_val_if_fail(plug->ops == &cfs_ops, PARAM_CHECK_ERRNO);
+	g_return_val_if_fail(path != NULL, PARAM_CHECK_ERRNO);
+	g_return_val_if_fail(buf != NULL, PARAM_CHECK_ERRNO);
+
+	cfs_debug("enter cfs_plug_func_write");
+
+	cfs_plug_func_t *fplug = (cfs_plug_func_t *)plug;
+
+	if (offset != 0 || !fplug->write_callback)
+		return -EIO;
+
+	return fplug->write_callback(plug, buf, size);
+}
+
+static int 
+cfs_plug_func_truncate(
+	cfs_plug_t *plug, 
+	const char *path, 
+	off_t size)
+{
+	g_return_val_if_fail(plug != NULL, PARAM_CHECK_ERRNO);
+	g_return_val_if_fail(plug->ops == &cfs_ops, PARAM_CHECK_ERRNO);
+	g_return_val_if_fail(path != NULL, PARAM_CHECK_ERRNO);
+
+	cfs_plug_func_t *fplug = (cfs_plug_func_t *)plug;
+
+	if (fplug->write_callback)
+		return 0;
+
+	return -EIO;
+}
+
+static int 
 cfs_plug_func_open(
 	cfs_plug_t *plug, 
 	const char *path, 
@@ -147,6 +194,8 @@
 static struct cfs_operations cfs_ops = {
 	.getattr = cfs_plug_func_getattr,
 	.read = cfs_plug_func_read,
+	.write = cfs_plug_func_write,
+	.truncate = cfs_plug_func_truncate,
 	.open = cfs_plug_func_open,
 };
 
@@ -155,7 +204,8 @@
 cfs_plug_func_new(
 	const char *name, 
 	mode_t mode,
-	cfs_plug_func_udpate_data_fn_t update_callback)
+	cfs_plug_func_udpate_data_fn_t update_callback,
+	cfs_plug_func_write_data_fn_t write_callback)
 {
 	g_return_val_if_fail(name != NULL, NULL);
 	g_return_val_if_fail(update_callback != NULL, NULL);
@@ -170,6 +220,10 @@
 	fplug->plug.name = g_strdup(name);
 
 	fplug->update_callback = update_callback;
+	fplug->write_callback = write_callback;
+	if (!write_callback)
+		mode = mode & ~0222;
+
 	fplug->mode = S_IFREG | mode;
 
 	return fplug;

Modified: pve-cluster/trunk/data/src/cfs-plug.h
===================================================================
--- pve-cluster/trunk/data/src/cfs-plug.h	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/data/src/cfs-plug.h	2011-08-08 06:54:28 UTC (rev 6431)
@@ -77,11 +77,17 @@
 } cfs_plug_link_t;
 
 typedef char *(*cfs_plug_func_udpate_data_fn_t)(cfs_plug_t *plug);
+typedef int (*cfs_plug_func_write_data_fn_t)(
+	cfs_plug_t *plug, 
+	const char *buf,
+	size_t size);
+
 typedef struct {
 	cfs_plug_t plug;
 	char *data;
 	mode_t mode;
 	cfs_plug_func_udpate_data_fn_t update_callback;
+	cfs_plug_func_write_data_fn_t write_callback;
 } cfs_plug_func_t;
 
 cfs_plug_base_t *cfs_plug_base_new(const char *name, cfs_plug_t *base);
@@ -91,7 +97,8 @@
 cfs_plug_func_t *cfs_plug_func_new(
 	const char *name, 
 	mode_t mode,
-	cfs_plug_func_udpate_data_fn_t update_callback);
+	cfs_plug_func_udpate_data_fn_t update_callback,
+	cfs_plug_func_write_data_fn_t write_callback);
 
 
 #endif /* _PVE_CFS_PLUG_H_ */

Modified: pve-cluster/trunk/data/src/pmxcfs.c
===================================================================
--- pve-cluster/trunk/data/src/pmxcfs.c	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/data/src/pmxcfs.c	2011-08-08 06:54:28 UTC (rev 6431)
@@ -320,13 +320,12 @@
 	char *subpath = NULL;
 	cfs_plug_t *plug = find_plug(path, &subpath);
 	
-	if (!plug)
-		goto ret;
-
-	if (subpath && plug->ops && plug->ops->write)
-		ret = plug->ops->write(plug, subpath, buf, size, offset, fi);
+	if (plug && plug->ops) { 
+		if ((subpath || !plug->ops->readdir) && plug->ops->write)
+		ret = plug->ops->write(plug, subpath ? subpath : "", 
+				       buf, size, offset, fi);
+	}
 	
-ret:
 	cfs_debug("leave cfs_fuse_write %s (%d)", path, ret);
 
 	if (subpath)
@@ -344,13 +343,11 @@
 	char *subpath = NULL;
 	cfs_plug_t *plug = find_plug(path, &subpath);
 	
-	if (!plug)
-		goto ret;
+	if (plug && plug->ops) { 
+		if ((subpath || !plug->ops->readdir) && plug->ops->truncate)
+			ret = plug->ops->truncate(plug, subpath ? subpath : "", size);
+	}
 
-	if (subpath && plug->ops && plug->ops->truncate)
-		ret = plug->ops->truncate(plug, subpath, size);
-
-ret:
 	cfs_debug("leave cfs_fuse_truncate %s (%d)", path, ret);
 
 	if (subpath)
@@ -559,6 +556,40 @@
 	return data;
 }
 
+static char *
+read_debug_setting_cb(cfs_plug_t *plug)
+{
+	return g_strdup_printf("%d\n", !!cfs.debug); 
+}
+
+static int write_debug_setting_cb(
+	cfs_plug_t *plug, 
+	const char *buf,
+	size_t size)
+{
+	int res = -EIO;
+
+	if (size < 2)
+		return res;
+
+	if (strncmp(buf, "0\n", 2) == 0) {
+		if (cfs.debug) {
+			cfs_message("disable debug mode");
+			cfs.debug = 0;
+		}
+		return 2;
+	} else if (strncmp(buf, "1\n", 2) == 0) {
+		if (!cfs.debug) {
+			cfs_message("enable debug mode");
+			cfs.debug = 1;
+		}
+		return 2;
+	}
+
+	return res;
+}
+
+
 static void 
 create_symlinks(cfs_plug_base_t *bplug, const char *nodename)
 {
@@ -580,20 +611,25 @@
 	g_free(lnktarget);
 	cfs_plug_base_insert(bplug, (cfs_plug_t*)lnk);
 
-	cfs_plug_func_t *fplug = cfs_plug_func_new(".version", 0440, create_dot_version_cb);
+	cfs_plug_func_t *fplug = cfs_plug_func_new(".version", 0440, create_dot_version_cb, NULL);
 	cfs_plug_base_insert(bplug, (cfs_plug_t*)fplug);
 	
-	fplug = cfs_plug_func_new(".members", 0440, create_dot_members_cb);
+	fplug = cfs_plug_func_new(".members", 0440, create_dot_members_cb, NULL);
 	cfs_plug_base_insert(bplug, (cfs_plug_t*)fplug);
 
-	fplug = cfs_plug_func_new(".vmlist", 0440, create_dot_vmlist_cb);
+	fplug = cfs_plug_func_new(".vmlist", 0440, create_dot_vmlist_cb, NULL);
 	cfs_plug_base_insert(bplug, (cfs_plug_t*)fplug);
 
-	fplug = cfs_plug_func_new(".rrd", 0440, create_dot_rrd_cb);
+	fplug = cfs_plug_func_new(".rrd", 0440, create_dot_rrd_cb, NULL);
 	cfs_plug_base_insert(bplug, (cfs_plug_t*)fplug);
 
-	fplug = cfs_plug_func_new(".clusterlog", 0440, create_dot_clusterlog_cb);
+	fplug = cfs_plug_func_new(".clusterlog", 0440, create_dot_clusterlog_cb, NULL);
 	cfs_plug_base_insert(bplug, (cfs_plug_t*)fplug);
+
+	fplug = cfs_plug_func_new(".debug", 0640, read_debug_setting_cb, write_debug_setting_cb);
+	cfs_plug_base_insert(bplug, (cfs_plug_t*)fplug);
+
+
 }
 
 static char *

Modified: pve-cluster/trunk/debian/changelog
===================================================================
--- pve-cluster/trunk/debian/changelog	2011-08-08 04:37:11 UTC (rev 6430)
+++ pve-cluster/trunk/debian/changelog	2011-08-08 06:54:28 UTC (rev 6431)
@@ -1,3 +1,9 @@
+pve-cluster (1.0-3) unstable; urgency=low
+
+  * new virtual file to enabe/disable debugging
+
+ -- Proxmox Support Team <support at proxmox.com>  Mon, 08 Aug 2011 08:54:06 +0200
+
 pve-cluster (1.0-2) unstable; urgency=low
 
   * fix 'pvecm create'



More information about the pve-devel mailing list