]> Pileus Git - ~andy/linux/blobdiff - fs/ocfs2/file.c
[PATCH] ocfs2: Release mutex in error handling code
[~andy/linux] / fs / ocfs2 / file.c
index 9154c82d3258e5afc4b88fde94ecc68fc0aa91e2..ec2ed15c3daab10894cf249d698a834924d74651 100644 (file)
@@ -1048,6 +1048,10 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
        mlog_entry("(0x%p, '%.*s')\n", dentry,
                   dentry->d_name.len, dentry->d_name.name);
 
+       /* ensuring we don't even attempt to truncate a symlink */
+       if (S_ISLNK(inode->i_mode))
+               attr->ia_valid &= ~ATTR_SIZE;
+
        if (attr->ia_valid & ATTR_MODE)
                mlog(0, "mode change: %d\n", attr->ia_mode);
        if (attr->ia_valid & ATTR_UID)
@@ -1172,7 +1176,7 @@ bail:
        return err;
 }
 
-int ocfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
+int ocfs2_permission(struct inode *inode, int mask)
 {
        int ret;
 
@@ -1762,8 +1766,8 @@ out_inode_unlock:
 out_rw_unlock:
        ocfs2_rw_unlock(inode, 1);
 
-       mutex_unlock(&inode->i_mutex);
 out:
+       mutex_unlock(&inode->i_mutex);
        return ret;
 }
 
@@ -2198,7 +2202,7 @@ static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
 
        ret = generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos);
        if (ret == -EINVAL)
-               mlog(ML_ERROR, "generic_file_aio_read returned -EINVAL\n");
+               mlog(0, "generic_file_aio_read returned -EINVAL\n");
 
        /* buffered aio wouldn't have proper lock coverage today */
        BUG_ON(ret == -EIOCBQUEUED && !(filp->f_flags & O_DIRECT));