]> err.no Git - linux-2.6/commitdiff
NTFS: Optimise/reorganise some error handling code in fs/ntfs/aops.c.
authorAnton Altaparmakov <aia21@cantab.net>
Thu, 13 Jan 2005 16:03:38 +0000 (16:03 +0000)
committerAnton Altaparmakov <aia21@cantab.net>
Thu, 5 May 2005 09:48:11 +0000 (10:48 +0100)
Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
fs/ntfs/aops.c

index 92215228eeaba68ef83aa8b8355b410c496c30be..812d53e9335426f4748a4276310096134b77c33e 100644 (file)
@@ -1392,14 +1392,11 @@ static int ntfs_writepage(struct page *page, struct writeback_control *wbc)
 
        attr_len = le32_to_cpu(ctx->attr->data.resident.value_length);
        i_size = i_size_read(vi);
-       kaddr = kmap_atomic(page, KM_USER0);
        if (unlikely(attr_len > i_size)) {
-               /* Zero out of bounds area in the mft record. */
-               memset((u8*)ctx->attr + le16_to_cpu(
-                               ctx->attr->data.resident.value_offset) +
-                               i_size, 0, attr_len - i_size);
                attr_len = i_size;
+               ctx->attr->data.resident.value_length = cpu_to_le32(attr_len);
        }
+       kaddr = kmap_atomic(page, KM_USER0);
        /* Copy the data from the page to the mft record. */
        memcpy((u8*)ctx->attr +
                        le16_to_cpu(ctx->attr->data.resident.value_offset),
@@ -1831,7 +1828,7 @@ static int ntfs_prepare_write(struct file *file, struct page *page,
                unsigned from, unsigned to)
 {
        s64 new_size;
-       unsigned long flags;
+       loff_t i_size;
        struct inode *vi = page->mapping->host;
        ntfs_inode *base_ni = NULL, *ni = NTFS_I(vi);
        ntfs_volume *vol = ni->vol;
@@ -1934,13 +1931,11 @@ static int ntfs_prepare_write(struct file *file, struct page *page,
        /* The total length of the attribute value. */
        attr_len = le32_to_cpu(a->data.resident.value_length);
        /* Fix an eventual previous failure of ntfs_commit_write(). */
-       read_lock_irqsave(&ni->size_lock, flags);
-       if (unlikely(ni->initialized_size < attr_len)) {
-               attr_len = ni->initialized_size;
+       i_size = i_size_read(vi);
+       if (unlikely(attr_len > i_size)) {
+               attr_len = i_size;
                a->data.resident.value_length = cpu_to_le32(attr_len);
-               BUG_ON(attr_len < i_size_read(vi));
        }
-       read_unlock_irqrestore(&ni->size_lock, flags);
        /* If we do not need to resize the attribute allocation we are done. */
        if (new_size <= attr_len)
                goto done_unm;