Index: src/kernel/linux-2.6/file.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/kernel/linux-2.6/file.c,v
retrieving revision 1.137
diff -u -a -p -r1.137 file.c
--- src/kernel/linux-2.6/file.c 19 Aug 2007 18:20:27 -0000      1.137
+++ src/kernel/linux-2.6/file.c 20 Aug 2007 01:40:27 -0000
@@ -2855,8 +2855,51 @@ int pvfs2_ioctl(
     unsigned long arg)
 {
     int ret = -ENOTTY;
+    uint64_t val = 0;
 
     gossip_debug(GOSSIP_FILE_DEBUG, "pvfs2_ioctl: called with cmd %d\n", cmd);
+
+    /* we understand some general ioctls on files, such as the immutable
+     * and append flags
+     */
+    if(cmd == FS_IOC_GETFLAGS)
+    {
+        ret = pvfs2_xattr_get_default(inode,
+                                      "user.pvfs2.meta_hint",
+                                      &val, sizeof(uint64_t));
+        if(ret == -ENODATA)
+        {
+            val = 0;
+            return put_user(0, (int __user *)arg);
+        }
+        if(ret >= 0)
+        {
+            return put_user(val, (int __user *)arg);
+        }
+    }
+    else if(cmd == FS_IOC_SETFLAGS)
+    {
+        if(arg & FS_IMMUTABLE_FL)
+        {
+            val |= PVFS_IMMUTABLE_FL;
+        }
+        if(arg & FS_APPEND_FL)
+        {
+            val |= PVFS_IMMUTABLE_FL;
+        }
+        if(arg & FS_NOATIME_FL)
+        {
+            val |= PVFS_NOATIME_FL;
+        }
+
+        if(val != 0)
+        {
+            ret = pvfs2_xattr_set_default(inode, 
+                                          "user.pvfs2.meta_hint",
+                                          &val, sizeof(uint64_t), XATTR_CREATE);
+        }
+    }
+
     return ret;
 }

