diff -urNpd a/linux-3.10.36-vs2.3.6.8/Makefile b/linux-3.10.36-vs2.3.6.8/Makefile --- a/linux-3.10.36-vs2.3.6.8/Makefile 2014-04-03 18:34:32.000000000 -0500 +++ b/linux-3.10.36-vs2.3.6.8/Makefile 2014-04-03 18:45:29.000000000 -0500 @@ -1,7 +1,7 @@ VERSION = 3 PATCHLEVEL = 10 SUBLEVEL = 36 -EXTRAVERSION = +EXTRAVERSION = -vs2.3.6.8 NAME = TOSSUG Baby Fish # *DOCUMENTATION* diff -urNpd a/linux-3.10.36-vs2.3.6.8/fs/ext4/inode.c b/linux-3.10.36-vs2.3.6.8/fs/ext4/inode.c --- a/linux-3.10.36-vs2.3.6.8/fs/ext4/inode.c 2014-04-03 20:09:31.000000000 -0500 +++ b/linux-3.10.36-vs2.3.6.8/fs/ext4/inode.c 2014-04-03 20:11:15.000000000 -0500 @@ -39,6 +39,7 @@ #include #include #include +#include #include "ext4_jbd2.h" #include "xattr.h" @@ -4046,43 +4047,65 @@ void ext4_set_inode_flags(struct inode * { unsigned int flags = EXT4_I(inode)->i_flags; unsigned int new_fl = 0; + unsigned int new_vf = 0; + + if (flags & EXT4_IMMUTABLE_FL) + new_fl |= S_IMMUTABLE; + if (flags & EXT4_IXUNLINK_FL) + new_fl |= S_IXUNLINK; if (flags & EXT4_SYNC_FL) new_fl |= S_SYNC; if (flags & EXT4_APPEND_FL) new_fl |= S_APPEND; - if (flags & EXT4_IMMUTABLE_FL) - new_fl |= S_IMMUTABLE; if (flags & EXT4_NOATIME_FL) new_fl |= S_NOATIME; if (flags & EXT4_DIRSYNC_FL) new_fl |= S_DIRSYNC; set_mask_bits(&inode->i_flags, - S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC, new_fl); + S_IMMUTABLE|S_IXUNLINK|S_SYNC|S_APPEND|S_NOATIME|S_DIRSYNC, + new_fl); + + if (flags & EXT4_BARRIER_FL) + new_vf |= V_BARRIER; + if (flags & EXT4_COW_FL) + new_vf |= V_COW; + set_mask_bits(&inode->i_vflags, V_BARRIER|V_COW, new_vf); } /* Propagate flags from i_flags to EXT4_I(inode)->i_flags */ void ext4_get_inode_flags(struct ext4_inode_info *ei) { - unsigned int vfs_fl; + unsigned int vfs_fl, vfs_vf; unsigned long old_fl, new_fl; do { vfs_fl = ei->vfs_inode.i_flags; + vfs_vf = ei->vfs_inode.i_vflags; old_fl = ei->i_flags; new_fl = old_fl & ~(EXT4_SYNC_FL|EXT4_APPEND_FL| EXT4_IMMUTABLE_FL|EXT4_NOATIME_FL| - EXT4_DIRSYNC_FL); + EXT4_DIRSYNC_FL|EXT4_BARRIER_FL| + EXT4_COW_FL); + + if (vfs_fl & S_IMMUTABLE) + new_fl |= EXT4_IMMUTABLE_FL; + if (vfs_fl & S_IXUNLINK) + new_fl |= EXT4_IXUNLINK_FL; + if (vfs_fl & S_SYNC) new_fl |= EXT4_SYNC_FL; if (vfs_fl & S_APPEND) new_fl |= EXT4_APPEND_FL; - if (vfs_fl & S_IMMUTABLE) - new_fl |= EXT4_IMMUTABLE_FL; if (vfs_fl & S_NOATIME) new_fl |= EXT4_NOATIME_FL; if (vfs_fl & S_DIRSYNC) new_fl |= EXT4_DIRSYNC_FL; + + if (vfs_vf & V_BARRIER) + new_fl |= EXT4_BARRIER_FL; + if (vfs_vf & V_COW) + new_fl |= EXT4_COW_FL; } while (cmpxchg(&ei->i_flags, old_fl, new_fl) != old_fl); }