kiocb_cachep = KMEM_CACHE(kiocb, SLAB_HWCACHE_ALIGN|SLAB_PANIC);
        kioctx_cachep = KMEM_CACHE(kioctx,SLAB_HWCACHE_ALIGN|SLAB_PANIC);
  
 -      aio_wq = create_workqueue("aio");
 +      aio_wq = alloc_workqueue("aio", 0, 1);  /* used to limit concurrency */
-       abe_pool = mempool_create_kmalloc_pool(1, sizeof(struct aio_batch_entry));
-       BUG_ON(!aio_wq || !abe_pool);
+       BUG_ON(!aio_wq);
  
        pr_debug("aio_setup: sizeof(struct page) = %d\n", (int)sizeof(struct page));
  
 
                        goto out_free_secdata;
        }
  
 -      if (type->mount) {
 -              root = type->mount(type, flags, name, data);
 -              if (IS_ERR(root)) {
 -                      error = PTR_ERR(root);
 -                      goto out_free_secdata;
 -              }
 -              mnt->mnt_root = root;
 -              mnt->mnt_sb = root->d_sb;
 -      } else {
 -              error = type->get_sb(type, flags, name, data, mnt);
 -              if (error < 0)
 -                      goto out_free_secdata;
 +      root = type->mount(type, flags, name, data);
 +      if (IS_ERR(root)) {
 +              error = PTR_ERR(root);
 +              goto out_free_secdata;
        }
 -      BUG_ON(!mnt->mnt_sb);
 -      WARN_ON(!mnt->mnt_sb->s_bdi);
 -      WARN_ON(mnt->mnt_sb->s_bdi == &default_backing_dev_info);
 -      mnt->mnt_sb->s_flags |= MS_BORN;
 +      sb = root->d_sb;
 +      BUG_ON(!sb);
 +      WARN_ON(!sb->s_bdi);
++      WARN_ON(sb->s_bdi == &default_backing_dev_info);
 +      sb->s_flags |= MS_BORN;
  
 -      error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);
 +      error = security_sb_kern_mount(sb, flags, secdata);
        if (error)
                goto out_sb;
  
 
  
        if (freepage)
                freepage(page);
 +      page_cache_release(page);
  }
 -EXPORT_SYMBOL(remove_from_page_cache);
 +EXPORT_SYMBOL(delete_from_page_cache);
  
- static int sync_page(void *word)
+ static int sleep_on_page(void *word)
  {
-       struct address_space *mapping;
-       struct page *page;
- 
-       page = container_of((unsigned long *)word, struct page, flags);
- 
-       /*
-        * page_mapping() is being called without PG_locked held.
-        * Some knowledge of the state and use of the page is used to
-        * reduce the requirements down to a memory barrier.
-        * The danger here is of a stale page_mapping() return value
-        * indicating a struct address_space different from the one it's
-        * associated with when it is associated with one.
-        * After smp_mb(), it's either the correct page_mapping() for
-        * the page, or an old page_mapping() and the page's own
-        * page_mapping() has gone NULL.
-        * The ->sync_page() address_space operation must tolerate
-        * page_mapping() going NULL. By an amazing coincidence,
-        * this comes about because none of the users of the page
-        * in the ->sync_page() methods make essential use of the
-        * page_mapping(), merely passing the page down to the backing
-        * device's unplug functions when it's non-NULL, which in turn
-        * ignore it for all cases but swap, where only page_private(page) is
-        * of interest. When page_mapping() does go NULL, the entire
-        * call stack gracefully ignores the page and returns.
-        * -- wli
-        */
-       smp_mb();
-       mapping = page_mapping(page);
-       if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
-               mapping->a_ops->sync_page(page);
        io_schedule();
        return 0;
  }