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; }