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

Reply via email to