tree 6d6021b5f951790b32f332d05106b9ff82ebb5a1
parent 311120eca0013083f5eb0aff13ffb8aa9fdd050c
author Anton Altaparmakov <[EMAIL PROTECTED]> Thu, 08 Sep 2005 22:08:11 +0100
committer Anton Altaparmakov <[EMAIL PROTECTED]> Thu, 08 Sep 2005 22:08:11 +0100

NTFS: Fix page_has_buffers()/page_buffers() handling in fs/ntfs/aops.c.

Signed-off-by: Anton Altaparmakov <[EMAIL PROTECTED]>

 fs/ntfs/ChangeLog |    1 +
 fs/ntfs/aops.c    |   38 +++++++++++++++++++++-----------------
 2 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog
--- a/fs/ntfs/ChangeLog
+++ b/fs/ntfs/ChangeLog
@@ -85,6 +85,7 @@ ToDo/Notes:
          removal of the get_bh()/put_bh() pairs for each buffer.
        - Fix fs/ntfs/aops.c::ntfs_{read,write}_block() to handle the case
          where a concurrent truncate has truncated the runlist under our feet.
+       - Fix page_has_buffers()/page_buffers() handling in fs/ntfs/aops.c.
 
 2.1.23 - Implement extension of resident files and make writing safe as well as
         many bug fixes, cleanups, and enhancements...
diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
--- a/fs/ntfs/aops.c
+++ b/fs/ntfs/aops.c
@@ -185,13 +185,15 @@ static int ntfs_read_block(struct page *
        blocksize_bits = VFS_I(ni)->i_blkbits;
        blocksize = 1 << blocksize_bits;
 
-       if (!page_has_buffers(page))
+       if (!page_has_buffers(page)) {
                create_empty_buffers(page, blocksize, 0);
-       bh = head = page_buffers(page);
-       if (unlikely(!bh)) {
-               unlock_page(page);
-               return -ENOMEM;
+               if (unlikely(!page_has_buffers(page))) {
+                       unlock_page(page);
+                       return -ENOMEM;
+               }
        }
+       bh = head = page_buffers(page);
+       BUG_ON(!bh);
 
        iblock = (s64)page->index << (PAGE_CACHE_SHIFT - blocksize_bits);
        read_lock_irqsave(&ni->size_lock, flags);
@@ -530,19 +532,21 @@ static int ntfs_write_block(struct page 
                BUG_ON(!PageUptodate(page));
                create_empty_buffers(page, blocksize,
                                (1 << BH_Uptodate) | (1 << BH_Dirty));
+               if (unlikely(!page_has_buffers(page))) {
+                       ntfs_warning(vol->sb, "Error allocating page "
+                                       "buffers.  Redirtying page so we try "
+                                       "again later.");
+                       /*
+                        * Put the page back on mapping->dirty_pages, but leave
+                        * its buffers' dirty state as-is.
+                        */
+                       redirty_page_for_writepage(wbc, page);
+                       unlock_page(page);
+                       return 0;
+               }
        }
        bh = head = page_buffers(page);
-       if (unlikely(!bh)) {
-               ntfs_warning(vol->sb, "Error allocating page buffers. "
-                               "Redirtying page so we try again later.");
-               /*
-                * Put the page back on mapping->dirty_pages, but leave its
-                * buffer's dirty state as-is.
-                */
-               redirty_page_for_writepage(wbc, page);
-               unlock_page(page);
-               return 0;
-       }
+       BUG_ON(!bh);
 
        /* NOTE: Different naming scheme to ntfs_read_block()! */
 
@@ -910,7 +914,6 @@ static int ntfs_write_mst_block(struct p
        sync = (wbc->sync_mode == WB_SYNC_ALL);
 
        /* Make sure we have mapped buffers. */
-       BUG_ON(!page_has_buffers(page));
        bh = head = page_buffers(page);
        BUG_ON(!bh);
 
@@ -2397,6 +2400,7 @@ void mark_ntfs_record_dirty(struct page 
                        buffers_to_free = bh;
        }
        bh = head = page_buffers(page);
+       BUG_ON(!bh);
        do {
                bh_ofs = bh_offset(bh);
                if (bh_ofs + bh_size <= ofs)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to