{
        unsigned int blk_per_page = 1 << (PAGE_CACHE_SHIFT - inode->i_blkbits);
        struct address_space *mapping = inode->i_mapping;
-       pgoff_t index, cur_index = locked_page->index;
+       pgoff_t index, cur_index;
        unsigned int i, j;
        struct page *page;
        struct buffer_head *head, *bh;
        UFSD("ENTER, ino %lu, count %u, oldb %u, newb %u\n",
              inode->i_ino, count, oldb, newb);
 
+       BUG_ON(!locked_page);
        BUG_ON(!PageLocked(locked_page));
 
+       cur_index = locked_page->index;
+
        for (i = 0; i < count; i += blk_per_page) {
                index = (baseblk+i) >> (PAGE_CACHE_SHIFT - inode->i_blkbits);
 
 
                        goal = tmp + uspi->s_fpb;
                tmp = ufs_new_fragments (inode, p, fragment - blockoff, 
                                         goal, required + blockoff,
-                                        err, locked_page);
+                                        err,
+                                        phys != NULL ? locked_page : NULL);
        }
        /*
         * We will extend last allocated block
        else if (lastblock == block) {
                tmp = ufs_new_fragments(inode, p, fragment - (blockoff - lastblockoff),
                                        fs32_to_cpu(sb, *p), required +  (blockoff - lastblockoff),
-                                       err, locked_page);
+                                       err, phys != NULL ? locked_page : NULL);
        } else /* (lastblock > block) */ {
        /*
         * We will allocate new block before last allocated block
                                goal = tmp + uspi->s_fpb;
                }
                tmp = ufs_new_fragments(inode, p, fragment - blockoff,
-                                       goal, uspi->s_fpb, err, locked_page);
+                                       goal, uspi->s_fpb, err,
+                                       phys != NULL ? locked_page : NULL);
        }
        if (!tmp) {
                if ((!blockoff && *p) || 
         * it much more readable:
         */
 #define GET_INODE_DATABLOCK(x) \
-       ufs_inode_getfrag(inode, x, fragment, 1, &err, &phys, &new, bh_result->b_page)
+       ufs_inode_getfrag(inode, x, fragment, 1, &err, &phys, &new,\
+                         bh_result->b_page)
 #define GET_INODE_PTR(x) \
-       ufs_inode_getfrag(inode, x, fragment, uspi->s_fpb, &err, NULL, NULL, NULL)
+       ufs_inode_getfrag(inode, x, fragment, uspi->s_fpb, &err, NULL, NULL,\
+                         bh_result->b_page)
 #define GET_INDIRECT_DATABLOCK(x) \
        ufs_inode_getblock(inode, bh, x, fragment,      \
                          &err, &phys, &new, bh_result->b_page)