ocfs2: add ext2 attributes
Support immutable, and other attributes. Some renaming and other minor fixes done by myself. Signed-off-by: Herbert Poetzl <herbert@13thfloor.at> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:

committed by
Mark Fasheh

parent
b4c98f625f
commit
ca4d147e62
@@ -71,6 +71,26 @@ static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
|
||||
struct inode *inode,
|
||||
struct buffer_head *fe_bh);
|
||||
|
||||
void ocfs2_set_inode_flags(struct inode *inode)
|
||||
{
|
||||
unsigned int flags = OCFS2_I(inode)->ip_attr;
|
||||
|
||||
inode->i_flags &= ~(S_IMMUTABLE |
|
||||
S_SYNC | S_APPEND | S_NOATIME | S_DIRSYNC);
|
||||
|
||||
if (flags & OCFS2_IMMUTABLE_FL)
|
||||
inode->i_flags |= S_IMMUTABLE;
|
||||
|
||||
if (flags & OCFS2_SYNC_FL)
|
||||
inode->i_flags |= S_SYNC;
|
||||
if (flags & OCFS2_APPEND_FL)
|
||||
inode->i_flags |= S_APPEND;
|
||||
if (flags & OCFS2_NOATIME_FL)
|
||||
inode->i_flags |= S_NOATIME;
|
||||
if (flags & OCFS2_DIRSYNC_FL)
|
||||
inode->i_flags |= S_DIRSYNC;
|
||||
}
|
||||
|
||||
struct inode *ocfs2_ilookup_for_vote(struct ocfs2_super *osb,
|
||||
u64 blkno,
|
||||
int delete_vote)
|
||||
@@ -260,7 +280,6 @@ int ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
|
||||
inode->i_blocks =
|
||||
ocfs2_align_bytes_to_sectors(le64_to_cpu(fe->i_size));
|
||||
inode->i_mapping->a_ops = &ocfs2_aops;
|
||||
inode->i_flags |= S_NOATIME;
|
||||
inode->i_atime.tv_sec = le64_to_cpu(fe->i_atime);
|
||||
inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
|
||||
inode->i_mtime.tv_sec = le64_to_cpu(fe->i_mtime);
|
||||
@@ -276,6 +295,7 @@ int ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
|
||||
|
||||
OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
|
||||
OCFS2_I(inode)->ip_orphaned_slot = OCFS2_INVALID_SLOT;
|
||||
OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
|
||||
|
||||
if (create_ino)
|
||||
inode->i_ino = ino_from_blkno(inode->i_sb,
|
||||
@@ -330,6 +350,9 @@ int ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
|
||||
ocfs2_inode_lock_res_init(&OCFS2_I(inode)->ip_data_lockres,
|
||||
OCFS2_LOCK_TYPE_DATA, inode);
|
||||
|
||||
ocfs2_set_inode_flags(inode);
|
||||
inode->i_flags |= S_NOATIME;
|
||||
|
||||
status = 0;
|
||||
bail:
|
||||
mlog_exit(status);
|
||||
@@ -1131,6 +1154,7 @@ int ocfs2_mark_inode_dirty(struct ocfs2_journal_handle *handle,
|
||||
|
||||
spin_lock(&OCFS2_I(inode)->ip_lock);
|
||||
fe->i_clusters = cpu_to_le32(OCFS2_I(inode)->ip_clusters);
|
||||
fe->i_attr = cpu_to_le32(OCFS2_I(inode)->ip_attr);
|
||||
spin_unlock(&OCFS2_I(inode)->ip_lock);
|
||||
|
||||
fe->i_size = cpu_to_le64(i_size_read(inode));
|
||||
@@ -1169,6 +1193,8 @@ void ocfs2_refresh_inode(struct inode *inode,
|
||||
spin_lock(&OCFS2_I(inode)->ip_lock);
|
||||
|
||||
OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
|
||||
OCFS2_I(inode)->ip_attr = le32_to_cpu(fe->i_attr);
|
||||
ocfs2_set_inode_flags(inode);
|
||||
i_size_write(inode, le64_to_cpu(fe->i_size));
|
||||
inode->i_nlink = le16_to_cpu(fe->i_links_count);
|
||||
inode->i_uid = le32_to_cpu(fe->i_uid);
|
||||
|
Reference in New Issue
Block a user