Index: pvfs2_src/src/kernel/linux-2.6/inode.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/inode.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/inode.c	(revision 12178)
@@ -229,6 +229,7 @@
     if (ret)
     {
         /* assume an I/O error and flag inode as bad */
+        gossip_debug(GOSSIP_INODE_DEBUG, "%s:%s:%d calling make bad inode\n", __FILE__,  __func__, __LINE__);
         pvfs2_make_bad_inode(inode);
     }
     return ret;
@@ -277,6 +278,7 @@
     else
     {
         /* assume an I/O error and flag inode as bad */
+        gossip_debug(GOSSIP_INODE_DEBUG, "%s:%s:%d calling make bad inode\n", __FILE__,  __func__, __LINE__);
         pvfs2_make_bad_inode(inode);
     }
     return ret;
@@ -324,6 +326,7 @@
     else
     {
         /* assume an I/O error and flag inode as bad */
+        gossip_debug(GOSSIP_INODE_DEBUG, "%s:%s:%d calling make bad inode\n", __FILE__,  __func__, __LINE__);
         pvfs2_make_bad_inode(inode);
     }
     return ret;
Index: pvfs2_src/src/kernel/linux-2.6/pvfs2-utils.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/pvfs2-utils.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/pvfs2-utils.c	(revision 12178)
@@ -260,7 +260,7 @@
         {
             /* special case: mark the root inode as sticky */
             inode->i_mode |= S_ISVTX;
-            gossip_debug(GOSSIP_ACL_DEBUG, "Marking inode %llu as sticky\n", 
+            gossip_debug(GOSSIP_UTILS_DEBUG, "Marking inode %llu as sticky\n", 
                     llu(get_handle_from_ino(inode)));
         }
 
@@ -438,6 +438,7 @@
         pvfs2_inode = PVFS2_I(inode);
         if (!pvfs2_inode)
         {
+            gossip_debug(GOSSIP_UTILS_DEBUG, "%s:%s:%d failed to resolve to pvfs2_inode\n", __FILE__, __func__, __LINE__);
             return ret;
         }
 
@@ -567,7 +568,7 @@
             new_op, "pvfs2_inode_setattr", 
             get_interruptible_flag(inode));
 
-        gossip_debug(GOSSIP_ACL_DEBUG, "pvfs2_inode_setattr: returning %d\n", ret);
+        gossip_debug(GOSSIP_UTILS_DEBUG, "pvfs2_inode_setattr: returning %d\n", ret);
 
         /* when request is serviced properly, free req op struct */
         op_release(new_op);
@@ -1183,7 +1198,7 @@
         new_op, "pvfs2_create_file", 
         get_interruptible_flag(dir));
 
-    gossip_debug(GOSSIP_ACL_DEBUG, "Create Got PVFS2 handle %llu on fsid %d (ret=%d)\n",
+    gossip_debug(GOSSIP_UTILS_DEBUG, "Create Got PVFS2 handle %llu on fsid %d (ret=%d)\n",
                 llu(new_op->downcall.resp.create.refn.handle),
                 new_op->downcall.resp.create.refn.fs_id, ret);
 
@@ -1208,14 +1223,14 @@
 
         dentry->d_op = &pvfs2_dentry_operations;
         d_instantiate(dentry, inode);
-        gossip_debug(GOSSIP_ACL_DEBUG, "Inode (Regular File) %llu -> %s\n",
+        gossip_debug(GOSSIP_UTILS_DEBUG, "Inode (Regular File) %llu -> %s\n",
                 llu(get_handle_from_ino(inode)), dentry->d_name.name);
     }
     else
     {
         *error_code = ret;
 
-        gossip_debug(GOSSIP_ACL_DEBUG, "pvfs2_create_file: failed with error code %d\n",
+        gossip_debug(GOSSIP_UTILS_DEBUG, "pvfs2_create_file: failed with error code %d\n",
                     *error_code);
     }
 
@@ -1295,7 +1310,7 @@
 
         dentry->d_op = &pvfs2_dentry_operations;
         d_instantiate(dentry, inode);
-        gossip_debug(GOSSIP_ACL_DEBUG, "Inode (Directory) %llu -> %s\n",
+        gossip_debug(GOSSIP_UTILS_DEBUG, "Inode (Directory) %llu -> %s\n",
                 llu(get_handle_from_ino(inode)), dentry->d_name.name);
     }
     else
@@ -1391,7 +1406,7 @@
 
         dentry->d_op = &pvfs2_dentry_operations;
         d_instantiate(dentry, inode);
-        gossip_debug(GOSSIP_ACL_DEBUG, "Inode (Symlink) %llu -> %s\n",
+        gossip_debug(GOSSIP_UTILS_DEBUG, "Inode (Symlink) %llu -> %s\n",
                 llu(get_handle_from_ino(inode)), dentry->d_name.name);
     }
     else
Index: pvfs2_src/src/kernel/linux-2.6/super.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/super.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/super.c	(revision 12178)
@@ -240,6 +240,8 @@
     if (pvfs2_inode_getattr(inode, PVFS_ATTR_SYS_ALL_NOHINT) != 0)
     {
         /* assume an I/O error and mark the inode as bad */
+        gossip_debug(GOSSIP_SUPER_DEBUG, "%s:%s:%d calling make bad inode - [%p] (inode = %llu | ct = %d)\n",
+                __FILE__, __func__, __LINE__, pvfs2_inode, llu(get_handle_from_ino(inode)), (int)atomic_read(&inode->i_count));
         pvfs2_make_bad_inode(inode);
     }
 }
@@ -282,6 +284,8 @@
 #endif
         if (pvfs2_inode_getattr(inode, PVFS_ATTR_SYS_ALL_NOHINT) != 0)
         {
+            gossip_debug(GOSSIP_SUPER_DEBUG, "%s:%s:%d calling make bad inode - [%p] (inode = %llu | ct = %d)\n",
+                __FILE__, __func__, __LINE__, pvfs2_inode, llu(get_handle_from_ino(inode)), (int)atomic_read(&inode->i_count));
             pvfs2_make_bad_inode(inode);
         }
         else {
@@ -292,8 +296,9 @@
     }
     else
     {
-        gossip_err("Could not allocate pvfs2_inode from "
-                    "pvfs2_inode_cache\n");
+        gossip_err("%s:%s:%d Could not allocate pvfs2_inode from pvfs2_inode_cache."
+            "calling make bad inode - [%p] (inode = %llu | ct = %d)\n",
+            __FILE__, __func__, __LINE__, pvfs2_inode, llu(get_handle_from_ino(inode)), (int)atomic_read(&inode->i_count));
         pvfs2_make_bad_inode(inode);
     }
 }
Index: pvfs2_src/src/kernel/linux-2.6/dcache.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/dcache.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/dcache.c	(revision 12178)
@@ -79,6 +79,9 @@
         strncpy(new_op->upcall.req.lookup.d_name,
                 dentry->d_name.name, PVFS2_NAME_LEN);
 
+        gossip_debug(GOSSIP_DCACHE_DEBUG, "%s:%s:%d interrupt flag [%d]\n", 
+            __FILE__, __func__, __LINE__, get_interruptible_flag(parent_inode));
+
         ret = service_operation(
             new_op, "pvfs2_lookup", 
             get_interruptible_flag(parent_inode));
@@ -88,12 +91,23 @@
         {
             gossip_debug(
                 GOSSIP_DCACHE_DEBUG,
-                "%s: lookup failure or no match.\n", __func__);
+                "%s:%s:%d lookup failure |%s| or no match |%s|.\n", __FILE__, __func__, __LINE__,
+                (new_op->downcall.status != 0) ? "true" : "false",
+                (!match_handle(new_op->downcall.resp.lookup.refn.handle, inode)) ? "true" : "false");
             op_release(new_op);
+            /* The make_bad_inode sent the RHEL3 system into permission denied on a directory
+             * in some CTRL-C tests where the INTERRUPT signal would cause the directory path
+             * to be walked and all inodes marked as bad. We don't really want to mark as bad
+             * in all cases
+             */
+    
             /* mark the inode as bad so that d_delete will be aggressive
              * about dropping the dentry
              */
-            pvfs2_make_bad_inode(inode);
+            //pvfs2_make_bad_inode(inode);
+            gossip_debug(GOSSIP_DCACHE_DEBUG, "%s:%s:%d setting revalidate_failed = 1\n", __FILE__, __func__, __LINE__);
+            PVFS2_I(inode)->revalidate_failed = 1;
+
             goto invalid_exit;
         }
 
@@ -111,11 +125,12 @@
                  __func__, inode, llu(get_handle_from_ino(inode)));
     ret = pvfs2_inode_getattr(inode, PVFS_ATTR_SYS_ALL_NOHINT);
     gossip_debug(GOSSIP_DCACHE_DEBUG,
-                 "%s: getattr %s (ret = %d), returning %s for dentry\n",
+                 "%s: getattr %s (ret = %d), returning %s for dentry i_count=%d\n",
                  __func__,
                  (ret == 0 ? "succeeded" : "failed"),
                  ret,
-                 (ret == 0 ? "valid" : "INVALID"));
+                 (ret == 0 ? "valid" : "INVALID"),
+                 atomic_read(&inode->i_count));
     if(ret != 0)
     {
         goto invalid_exit;
@@ -132,7 +147,8 @@
 {
     gossip_debug(GOSSIP_DCACHE_DEBUG,
                  "%s: called on dentry %p.\n", __func__, dentry);
-    if(dentry->d_inode && is_bad_inode(dentry->d_inode))
+    //if(dentry->d_inode && is_bad_inode(dentry->d_inode))
+    if(dentry->d_inode && PVFS2_I(dentry->d_inode)->revalidate_failed == 1)
     {
         gossip_debug(GOSSIP_DCACHE_DEBUG,
                      "%s: returning 1 (bad inode).\n", __func__);
Index: pvfs2_src/src/kernel/linux-2.6/file.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/file.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/file.c	(revision 12178)
@@ -102,6 +102,7 @@
             }
             else
             {
+                gossip_debug(GOSSIP_FILE_DEBUG, "%s:%s:%d calling make bad inode\n", __FILE__,  __func__, __LINE__);
                 pvfs2_make_bad_inode(inode);
                 gossip_debug(GOSSIP_FILE_DEBUG, "pvfs2_file_open returning error: %d\n", ret);
                 return(ret);
@@ -3077,6 +3078,7 @@
         ret = pvfs2_inode_getattr(inode, PVFS_ATTR_SYS_SIZE);
         if (ret)
         {
+            gossip_debug(GOSSIP_FILE_DEBUG, "%s:%s:%d calling make bad inode\n", __FILE__,  __func__, __LINE__);
             pvfs2_make_bad_inode(inode);
             return ret;
         }
Index: pvfs2_src/src/kernel/linux-2.6/pvfs2-kernel.h
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/pvfs2-kernel.h	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/pvfs2-kernel.h	(revision 12178)
@@ -384,6 +384,7 @@
 #endif
     sector_t last_failed_block_index_read;
     int error_code;
+    int revalidate_failed;
 
     /* State of in-memory attributes not yet flushed to disk associated with this object */
     unsigned long pinode_flags;
Index: pvfs2_src/src/kernel/linux-2.6/xattr-default.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/xattr-default.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/xattr-default.c	(revision 12178)
@@ -29,7 +29,8 @@
     if (!S_ISREG(inode->i_mode) &&
        (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
     {
-       return -EPERM;
+        gossip_err("pvfs2_xattr_set_default: Returning EPERM for inode %p.\n", inode);
+        return -EPERM;
     }
     gossip_debug(GOSSIP_XATTR_DEBUG, "pvfs2_setxattr_default %s\n", name);
     internal_flag = convert_to_internal_xattr_flags(flags);
Index: pvfs2_src/src/kernel/linux-2.6/namei.c
===================================================================
--- pvfs2_src/src/kernel/linux-2.6/namei.c	(revision 12177)
+++ pvfs2_src/src/kernel/linux-2.6/namei.c	(revision 12178)
@@ -112,6 +112,8 @@
         if (parent && parent->refn.handle != PVFS_HANDLE_NULL 
                 && parent->refn.fs_id != PVFS_FS_ID_NULL)
         {
+            gossip_debug(GOSSIP_NAME_DEBUG, "%s:%s:%d using parent %llu\n",
+              __FILE__, __func__, __LINE__, llu(parent->refn.handle));
             new_op->upcall.req.lookup.parent_refn = parent->refn;
         }
         else
@@ -198,6 +200,8 @@
     inode = pvfs2_iget(sb, &new_op->downcall.resp.lookup.refn);
     if (inode && !is_bad_inode(inode))
     {
+        gossip_debug(GOSSIP_NAME_DEBUG, "%s:%s:%d Found good inode [%lu] with count [%d]\n", 
+            __FILE__, __func__, __LINE__, inode->i_ino, (int)atomic_read(&inode->i_count));
         struct dentry *res;
 
         /* update dentry/inode pair into dcache */
@@ -219,6 +223,8 @@
     }
     else if (inode && is_bad_inode(inode))
     {
+        gossip_debug(GOSSIP_NAME_DEBUG, "%s:%s:%d Found bad inode [%lu] with count [%d]. Returning error [%d]", 
+            __FILE__, __func__, __LINE__, inode->i_ino, (int)atomic_read(&inode->i_count), ret);
         ret = -EACCES;
         found_pvfs2_inode = PVFS2_I(inode);
         /* look for an error code, possibly set by pvfs2_read_inode(),
@@ -237,7 +243,7 @@
      * from pvfs2_iget was null...just return EACCESS
      */
     op_release(new_op);
-    gossip_debug(GOSSIP_NAME_DEBUG, "Returning -EACCES\n");
+    gossip_debug(GOSSIP_NAME_DEBUG, "Returning -EACCES for NULL inode\n");
     return ERR_PTR(-EACCES);
 }
 
Index: pvfs2_src/src/server/set-attr.sm
===================================================================
--- pvfs2_src/src/server/set-attr.sm	(revision 12177)
+++ pvfs2_src/src/server/set-attr.sm	(revision 12178)
@@ -276,7 +276,7 @@
     {
         if (dspace_a_p->perms != 0 && ((a_p->mask & PVFS_ATTR_COMMON_PERM) && (dspace_a_p->perms != a_p->perms)))
         {
-            gossip_debug(GOSSIP_SETATTR_DEBUG, "Cannot change perms of symlink: Permission denied\n");
+            gossip_err("Cannot change perms of symlink: Permission denied\n");
             js_p->error_code = -PVFS_EPERM;
             return SM_ACTION_COMPLETE;
         }
Index: pvfs2_src/src/client/sysint/sys-truncate.sm
===================================================================
--- pvfs2_src/src/client/sysint/sys-truncate.sm	(revision 12177)
+++ pvfs2_src/src/client/sysint/sys-truncate.sm	(revision 12178)
@@ -179,6 +179,7 @@
     if ((attr->u.meta.hint.flags & PVFS_IMMUTABLE_FL)
         || (attr->u.meta.hint.flags & PVFS_APPEND_FL))
     {
+        gossip_err("Cannot truncate an append-only or immutable file. Returning EPERM\n");
         js_p->error_code = -PVFS_EPERM;
         return 1;
     }
Index: pvfs2_src/src/client/sysint/sys-io.sm
===================================================================
--- pvfs2_src/src/client/sysint/sys-io.sm	(revision 12177)
+++ pvfs2_src/src/client/sysint/sys-io.sm	(revision 12178)
@@ -441,6 +441,7 @@
     if (sm_p->u.io.io_type == PVFS_IO_WRITE
         && (attr->u.meta.hint.flags & PVFS_IMMUTABLE_FL))
     {
+        gossip_err("Cannot write to a immutable file. Returning EPERM\n");
         js_p->error_code = -PVFS_EPERM;
         goto exit;
     }
