[CIFS] small piece missing from previous patch
authorSteve French <sfrench@us.ibm.com>
Mon, 26 Feb 2007 20:06:29 +0000 (20:06 +0000)
committerSteve French <sfrench@us.ibm.com>
Mon, 26 Feb 2007 20:06:29 +0000 (20:06 +0000)
There were two i_size_writes in the new truncate
function - we missed one in the last patch.
Noticed by Shaggy when he reviewed.

Thank you Shaggy ...

CC: Shaggy <shaggy@us.ibm.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/inode.c

index 24df13a256e50e335895e2c6e0323556e8a75e92..03ade0f972b4d2e34c8444d067328636fd6dc2a5 100644 (file)
@@ -1139,15 +1139,17 @@ int cifs_vmtruncate(struct inode * inode, loff_t offset)
        struct address_space *mapping = inode->i_mapping;
        unsigned long limit;
 
+       spin_lock(&inode->i_lock);
        if (inode->i_size < offset)
                goto do_expand;
        /*
         * truncation of in-use swapfiles is disallowed - it would cause
         * subsequent swapout to scribble on the now-freed blocks.
         */
-       if (IS_SWAPFILE(inode))
+       if (IS_SWAPFILE(inode)) {
+               spin_unlock(&inode->i_lock);
                goto out_busy;
-       spin_lock(&inode->i_lock);              
+       }
        i_size_write(inode, offset);
        spin_unlock(&inode->i_lock);
        unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1);
@@ -1156,12 +1158,16 @@ int cifs_vmtruncate(struct inode * inode, loff_t offset)
 
 do_expand:
        limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur;
-       if (limit != RLIM_INFINITY && offset > limit)
+       if (limit != RLIM_INFINITY && offset > limit) {
+               spin_unlock(&inode->i_lock);
                goto out_sig;
-       if (offset > inode->i_sb->s_maxbytes)
+       }
+       if (offset > inode->i_sb->s_maxbytes) {
+               spin_unlock(&inode->i_lock);
                goto out_big;
+       }
        i_size_write(inode, offset);
-
+       spin_unlock(&inode->i_lock);
 out_truncate:
        if (inode->i_op && inode->i_op->truncate)
                inode->i_op->truncate(inode);