These are all pretty minor:
mod-parm-desc.patch:
--------------------
The pvfs2 kernel module is missing the parameter description for the
op_timeout_secs option that can be set at insmod time.
server-gossip-errno.patch:
--------------------------
The pvfs2-server is trying to use errno to propigate errors from
gossip_enable_file(), but this function returns its error code in the
return value. I think maybe the errno handling logic may have just been
mistakenly pasted from the fopen() error handling earlir in this same file.
mgmt-getconfig-wait.patch:
--------------------------
I don't think this makes a significant difference, but all of the
mgmt*.sm state machines are using mgmt_wait and mgmt_release to handle
their operations, except for mgmt-getconfig which is using sys_wait and
sys_release. This patch updates mgmt-getconfig to match the other mgmt
state machines.
pvfs2-rm.patch:
---------------
This is an old patch that apparently just forgot to submit a long time
ago. At any rate, it makes two changes to pvfs2-rm. First of all, it
updates pvfs2-rm to use the gen_credentials() function to fill in its
credentials rather than manually setting the credential fields. It also
introduces some extra sanity checking on removal of objects that appear
to be directories. I think some error handling has been beefed up
elsewhere since the time this patch was generated, so the sanity check
isn't as important any more- but it does still result in a better error
message if you try to remove a normal file as if it is a directory.
-Phil
diff -Naur pvfs2/src/client/sysint/mgmt-get-config.c pvfs2-patched/src/client/sysint/mgmt-get-config.c
--- pvfs2/src/client/sysint/mgmt-get-config.c 2007-04-05 10:59:20.000000000 -0400
+++ pvfs2-patched/src/client/sysint/mgmt-get-config.c 2007-04-05 16:17:24.000000000 -0400
@@ -94,10 +94,10 @@
}
else
{
- ret = PVFS_sys_wait(op_id, "X-get_config", &error);
+ ret = PVFS_mgmt_wait(op_id, "X-get_config", &error);
if (ret)
{
- PVFS_perror_gossip("PVFS_sys_wait call", ret);
+ PVFS_perror_gossip("PVFS_mgmt_wait call", ret);
error = ret;
}
}
@@ -129,7 +129,7 @@
sm_p->u.get_config.server_config_buf = NULL;
}
- PVFS_sys_release(op_id);
+ PVFS_mgmt_release(op_id);
return error;
}
diff -Naur pvfs2/src/kernel/linux-2.6/pvfs2-mod.c pvfs2-patched/src/kernel/linux-2.6/pvfs2-mod.c
--- pvfs2/src/kernel/linux-2.6/pvfs2-mod.c 2006-09-13 16:22:55.000000000 -0400
+++ pvfs2-patched/src/kernel/linux-2.6/pvfs2-mod.c 2007-04-05 16:04:03.000000000 -0400
@@ -31,6 +31,7 @@
MODULE_AUTHOR("PVFS2 Development Team");
MODULE_DESCRIPTION("The Linux Kernel VFS interface to PVFS2");
MODULE_PARM_DESC(debug, "debugging level (0 for none, 1 for verbose)");
+MODULE_PARM_DESC(op_timeout_secs, "Operation timeout in seconds");
MODULE_PARM_DESC(hash_table_size, "size of hash table for operations in progress");
#ifdef PVFS2_LINUX_KERNEL_2_4
diff -Naur pvfs2/src/apps/admin/pvfs2-rm.c pvfs2-patched/src/apps/admin/pvfs2-rm.c
--- pvfs2/src/apps/admin/pvfs2-rm.c 2005-07-22 16:39:12.000000000 -0400
+++ pvfs2-patched/src/apps/admin/pvfs2-rm.c 2007-04-05 15:19:13.000000000 -0400
@@ -39,6 +39,7 @@
{
int ret = -1, i = 0;
struct options *user_opts = NULL;
+ PVFS_sysresp_getattr resp_getattr;
/* look at command line arguments */
user_opts = parse_args(argc, argv);
@@ -70,6 +71,9 @@
PVFS_sysresp_lookup resp_lookup;
PVFS_credentials credentials;
PVFS_object_ref parent_ref;
+ int tmp_len = 0;
+
+ PVFS_util_gen_credentials(&credentials);
/* Translate path into pvfs2 relative path */
rc = PVFS_util_resolve(working_file, &cur_fs, pvfs_path,
@@ -81,6 +85,46 @@
break;
}
+ tmp_len = strlen(pvfs_path);
+ if(pvfs_path[tmp_len - 1] == '/')
+ {
+ /* User requested removal of something with a trailing slash.
+ * Strip slashes, but then confirm that the target is in fact a
+ * directory, or else the request is invalid
+ */
+ while(tmp_len > 1 && pvfs_path[tmp_len - 1] == '/')
+ {
+ pvfs_path[tmp_len - 1] = '\0';
+ tmp_len--;
+ }
+
+ memset(&resp_lookup, 0, sizeof(PVFS_sysresp_lookup));
+ rc = PVFS_sys_lookup(cur_fs, pvfs_path, &credentials,
+ &resp_lookup, PVFS2_LOOKUP_LINK_NO_FOLLOW);
+ if (rc)
+ {
+ PVFS_perror("PVFS_sys_lookup", rc);
+ ret = -1;
+ break;
+ }
+
+ memset(&resp_getattr, 0, sizeof(PVFS_sysresp_getattr));
+ rc = PVFS_sys_getattr(resp_lookup.ref, PVFS_ATTR_SYS_TYPE,
+ &credentials, &resp_getattr);
+ if (rc)
+ {
+ PVFS_perror("PVFS_sys_getattr", rc);
+ ret = -1;
+ break;
+ }
+ if (resp_getattr.attr.objtype != PVFS_TYPE_DIRECTORY)
+ {
+ fprintf(stderr, "Error: object is not a directory.\n");
+ ret = -1;
+ break;
+ }
+ }
+
/* break into file and directory */
rc = PINT_get_base_dir(pvfs_path, directory, PVFS_NAME_MAX);
if(rc < 0)
@@ -100,9 +144,6 @@
break;
}
- credentials.uid = getuid();
- credentials.gid = getuid();
-
memset(&resp_lookup, 0, sizeof(PVFS_sysresp_lookup));
rc = PVFS_sys_lookup(cur_fs, directory, &credentials,
&resp_lookup, PVFS2_LOOKUP_LINK_NO_FOLLOW);
diff -Naur pvfs2/src/server/pvfs2-server.c pvfs2-patched/src/server/pvfs2-server.c
--- pvfs2/src/server/pvfs2-server.c 2007-04-05 10:59:22.000000000 -0400
+++ pvfs2-patched/src/server/pvfs2-server.c 2007-04-05 16:10:40.000000000 -0400
@@ -768,10 +768,9 @@
ret = gossip_enable_file(server_config.logfile, "a");
if (ret < 0)
{
- int tmp_errno = errno;
gossip_lerr("error opening log file %s\n",
server_config.logfile);
- return -tmp_errno;
+ return ret;
}
/* log starting message again so it appears in log file, not just
* console
_______________________________________________
Pvfs2-developers mailing list
Pvfs2-developers@beowulf-underground.org
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers