|
@@ -38,6 +38,7 @@
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/ratelimit.h>
|
|
#include <linux/ratelimit.h>
|
|
#include <linux/aio.h>
|
|
#include <linux/aio.h>
|
|
|
|
+#include <linux/bitops.h>
|
|
|
|
|
|
#include "ext4_jbd2.h"
|
|
#include "ext4_jbd2.h"
|
|
#include "xattr.h"
|
|
#include "xattr.h"
|
|
@@ -3921,18 +3922,20 @@ int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc)
|
|
void ext4_set_inode_flags(struct inode *inode)
|
|
void ext4_set_inode_flags(struct inode *inode)
|
|
{
|
|
{
|
|
unsigned int flags = EXT4_I(inode)->i_flags;
|
|
unsigned int flags = EXT4_I(inode)->i_flags;
|
|
|
|
+ unsigned int new_fl = 0;
|
|
|
|
|
|
- inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
|
|
|
|
if (flags & EXT4_SYNC_FL)
|
|
if (flags & EXT4_SYNC_FL)
|
|
- inode->i_flags |= S_SYNC;
|
|
|
|
|
|
+ new_fl |= S_SYNC;
|
|
if (flags & EXT4_APPEND_FL)
|
|
if (flags & EXT4_APPEND_FL)
|
|
- inode->i_flags |= S_APPEND;
|
|
|
|
|
|
+ new_fl |= S_APPEND;
|
|
if (flags & EXT4_IMMUTABLE_FL)
|
|
if (flags & EXT4_IMMUTABLE_FL)
|
|
- inode->i_flags |= S_IMMUTABLE;
|
|
|
|
|
|
+ new_fl |= S_IMMUTABLE;
|
|
if (flags & EXT4_NOATIME_FL)
|
|
if (flags & EXT4_NOATIME_FL)
|
|
- inode->i_flags |= S_NOATIME;
|
|
|
|
|
|
+ new_fl |= S_NOATIME;
|
|
if (flags & EXT4_DIRSYNC_FL)
|
|
if (flags & EXT4_DIRSYNC_FL)
|
|
- inode->i_flags |= S_DIRSYNC;
|
|
|
|
|
|
+ new_fl |= S_DIRSYNC;
|
|
|
|
+ set_mask_bits(&inode->i_flags,
|
|
|
|
+ S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC, new_fl);
|
|
}
|
|
}
|
|
|
|
|
|
/* Propagate flags from i_flags to EXT4_I(inode)->i_flags */
|
|
/* Propagate flags from i_flags to EXT4_I(inode)->i_flags */
|