+++ /dev/null
-Index: linux-2.6.5-7.311/include/linux/ext3_fs.h
-===================================================================
---- linux-2.6.5-7.311.orig/include/linux/ext3_fs.h
-+++ linux-2.6.5-7.311/include/linux/ext3_fs.h
-@@ -752,6 +752,13 @@ struct dir_private_info {
- #define ERR_BAD_DX_DIR -75000
-
- /*
-+ * Indicates that ctime should not be updated in ext3_xattr_set_handle()
-+ */
-+#ifndef XATTR_NO_CTIME
-+#define XATTR_NO_CTIME 0x80
-+#endif
-+
-+/*
- * Function prototypes
- */
-
-Index: linux-2.6.5-7.311/fs/ext3/xattr.c
-===================================================================
---- linux-2.6.5-7.311.orig/fs/ext3/xattr.c
-+++ linux-2.6.5-7.311/fs/ext3/xattr.c
-@@ -89,7 +89,7 @@
-
- static int ext3_xattr_set_handle2(handle_t *, struct inode *,
- struct buffer_head *,
-- struct ext3_xattr_header *);
-+ struct ext3_xattr_header *, int);
-
- static int ext3_xattr_cache_insert(struct buffer_head *);
- static struct buffer_head *ext3_xattr_cache_find(struct inode *,
-@@ -1302,7 +1302,7 @@ skip_replace:
- }
- error = ext3_xattr_set_handle2(handle, inode, bh,
- IS_LAST_ENTRY(ENTRY(header+1)) ?
-- NULL : header);
-+ NULL : header, flags);
-
- cleanup:
- brelse(bh);
-@@ -1318,7 +1318,7 @@ cleanup:
- static int
- ext3_xattr_set_handle2(handle_t *handle, struct inode *inode,
- struct buffer_head *old_bh,
-- struct ext3_xattr_header *header)
-+ struct ext3_xattr_header *header, int flags)
- {
- struct super_block *sb = inode->i_sb;
- struct buffer_head *new_bh = NULL;
-@@ -1401,7 +1401,8 @@ getblk_failed:
-
- /* Update the inode. */
- EXT3_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-- inode->i_ctime = CURRENT_TIME;
-+ if (!(flags & XATTR_NO_CTIME))
-+ inode->i_ctime = CURRENT_TIME;
- ext3_mark_inode_dirty(handle, inode);
- if (IS_SYNC(inode))
- handle->h_sync = 1;