diff -NurpP --minimal linux-2.6.26.3-vs2.3.0.35.2/fs/ocfs2/inode.c linux-2.6.26.3-vs2.3.0.35.3/fs/ocfs2/inode.c --- linux-2.6.26.3-vs2.3.0.35.2/fs/ocfs2/inode.c 2008-07-16 22:41:36.000000000 -0400 +++ linux-2.6.26.3-vs2.3.0.35.3/fs/ocfs2/inode.c 2008-09-04 14:53:38.000000000 -0400 @@ -134,7 +134,6 @@ void ocfs2_get_inode_flags(struct ocfs2_ int ocfs2_sync_flags(struct inode *inode) { - struct ocfs2_inode_info *ocfs2_inode = OCFS2_I(inode); struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); handle_t *handle = NULL; struct buffer_head *bh = NULL; diff -NurpP --minimal linux-2.6.26.3-vs2.3.0.35.2/fs/ocfs2/ioctl.c linux-2.6.26.3-vs2.3.0.35.3/fs/ocfs2/ioctl.c --- linux-2.6.26.3-vs2.3.0.35.2/fs/ocfs2/ioctl.c 2008-07-16 22:41:36.000000000 -0400 +++ linux-2.6.26.3-vs2.3.0.35.3/fs/ocfs2/ioctl.c 2008-09-04 14:49:35.000000000 -0400 @@ -52,8 +52,6 @@ int ocfs2_set_inode_attr(struct inode *i unsigned oldflags; int status; - mutex_lock(&inode->i_mutex); - status = ocfs2_inode_lock(inode, &bh, 1); if (status < 0) { mlog_errno(status); @@ -105,8 +103,6 @@ int ocfs2_set_inode_attr(struct inode *i bail_unlock: ocfs2_inode_unlock(inode, 1); bail: - mutex_unlock(&inode->i_mutex); - if (bh) brelse(bh); @@ -114,6 +110,17 @@ bail: return status; } +static inline int ocfs2_set_inode_attr_lock(struct inode *inode, + unsigned flags, unsigned mask) +{ + int ret; + + mutex_lock(&inode->i_mutex); + ret = ocfs2_set_inode_attr(inode, flags, mask); + mutex_unlock(&inode->i_mutex); + return ret; +} + long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct inode *inode = filp->f_path.dentry->d_inode; @@ -138,7 +145,7 @@ long ocfs2_ioctl(struct file *filp, unsi status = mnt_want_write(filp->f_path.mnt); if (status) return status; - status = ocfs2_set_inode_attr(inode, flags, + status = ocfs2_set_inode_attr_lock(inode, flags, OCFS2_FL_MODIFIABLE); mnt_drop_write(filp->f_path.mnt); return status;