+diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
+--- a/storage/innobase/include/buf0buf.h 2011-02-23 19:00:48.252696774 +0900
++++ b/storage/innobase/include/buf0buf.h 2011-02-23 19:01:19.182655902 +0900
+@@ -1437,6 +1437,7 @@
+ 0 if the block was never accessed
+ in the buffer pool */
+ /* @} */
++ ibool space_was_being_deleted;
+ ibool is_corrupt;
+ # ifdef UNIV_DEBUG_FILE_ACCESSES
+ ibool file_page_was_freed;
+diff -ruN a/storage/innobase/include/buf0buf.ic b/storage/innobase/include/buf0buf.ic
+--- a/storage/innobase/include/buf0buf.ic 2011-02-23 19:00:48.130659154 +0900
++++ b/storage/innobase/include/buf0buf.ic 2011-02-23 19:01:19.185655906 +0900
+@@ -406,6 +406,7 @@
+ buf_block_set_state(block, BUF_BLOCK_FILE_PAGE);
+ block->page.space = space;
+ block->page.offset = page_no;
++ block->page.space_was_being_deleted = FALSE;
+ }
+
+ /*********************************************************************//**
+diff -ruN a/storage/innobase/include/buf0lru.h b/storage/innobase/include/buf0lru.h
+--- a/storage/innobase/include/buf0lru.h 2011-02-23 19:00:47.977658923 +0900
++++ b/storage/innobase/include/buf0lru.h 2011-02-23 19:01:19.188625768 +0900
+@@ -85,6 +85,13 @@
+ buf_LRU_invalidate_tablespace(
+ /*==========================*/
+ ulint id); /*!< in: space id */
++/******************************************************************//**
++*/
++UNIV_INTERN
++void
++buf_LRU_mark_space_was_deleted(
++/*===========================*/
++ ulint id); /*!< in: space id */
+ /********************************************************************//**
+ Insert a compressed block into buf_pool->zip_clean in the LRU order. */
+ UNIV_INTERN
+diff -ruN a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h
+--- a/storage/innobase/include/os0file.h 2011-02-23 19:00:48.260696646 +0900
++++ b/storage/innobase/include/os0file.h 2011-02-23 19:01:19.190656054 +0900
+@@ -280,9 +280,9 @@
+ pfs_os_file_close_func(file, __FILE__, __LINE__)
+
+ # define os_aio(type, mode, name, file, buf, offset, offset_high, \
+- n, message1, message2, trx) \
++ n, message1, message2, space_id, trx) \
+ pfs_os_aio_func(type, mode, name, file, buf, offset, \
+- offset_high, n, message1, message2, trx, \
++ offset_high, n, message1, message2, space_id, trx,\
+ __FILE__, __LINE__)
+
+ # define os_file_read(file, buf, offset, offset_high, n) \
+@@ -326,9 +326,9 @@
+ # define os_file_close(file) os_file_close_func(file)
+
+ # define os_aio(type, mode, name, file, buf, offset, offset_high, \
+- n, message1, message2, trx) \
++ n, message1, message2, space_id, trx) \
+ os_aio_func(type, mode, name, file, buf, offset, offset_high, n,\
+- message1, message2, trx)
++ message1, message2, space_id, trx)
+
+ # define os_file_read(file, buf, offset, offset_high, n) \
+ os_file_read_func(file, buf, offset, offset_high, n, NULL)
+@@ -757,6 +757,7 @@
+ (can be used to identify a completed
+ aio operation); ignored if mode is
+ OS_AIO_SYNC */
++ ulint space_id,
+ trx_t* trx,
+ const char* src_file,/*!< in: file name where func invoked */
+ ulint src_line);/*!< in: line where the func invoked */
+@@ -1063,6 +1064,7 @@
+ (can be used to identify a completed
+ aio operation); ignored if mode is
+ OS_AIO_SYNC */
++ ulint space_id,
+ trx_t* trx);
+ /************************************************************************//**
+ Wakes up all async i/o threads so that they know to exit themselves in
+@@ -1123,7 +1125,8 @@
+ parameters are valid and can be used to
+ restart the operation, for example */
+ void** message2,
+- ulint* type); /*!< out: OS_FILE_WRITE or ..._READ */
++ ulint* type, /*!< out: OS_FILE_WRITE or ..._READ */
++ ulint* space_id);
+ #endif
+
+ /**********************************************************************//**
+@@ -1145,7 +1148,8 @@
+ parameters are valid and can be used to
+ restart the operation, for example */
+ void** message2,
+- ulint* type); /*!< out: OS_FILE_WRITE or ..._READ */
++ ulint* type, /*!< out: OS_FILE_WRITE or ..._READ */
++ ulint* space_id);
+ /**********************************************************************//**
+ Validates the consistency of the aio system.
+ @return TRUE if ok */
+@@ -1224,7 +1228,8 @@
+ aio operation failed, these output
+ parameters are valid and can be used to
+ restart the operation. */
+- ulint* type); /*!< out: OS_FILE_WRITE or ..._READ */
++ ulint* type, /*!< out: OS_FILE_WRITE or ..._READ */
++ ulint* space_id);
+ #endif /* LINUX_NATIVE_AIO */
+
+ #ifndef UNIV_NONINL
+diff -ruN a/storage/innobase/include/os0file.ic b/storage/innobase/include/os0file.ic
+--- a/storage/innobase/include/os0file.ic 2011-02-23 19:00:47.915696756 +0900
++++ b/storage/innobase/include/os0file.ic 2011-02-23 19:01:19.191625891 +0900
+@@ -229,6 +229,7 @@
+ (can be used to identify a completed
+ aio operation); ignored if mode is
+ OS_AIO_SYNC */
++ ulint space_id,
+ trx_t* trx,
+ const char* src_file,/*!< in: file name where func invoked */
+ ulint src_line)/*!< in: line where the func invoked */
+@@ -245,7 +246,7 @@
+ src_file, src_line);
+
+ result = os_aio_func(type, mode, name, file, buf, offset, offset_high,
+- n, message1, message2, trx);
++ n, message1, message2, space_id, trx);
+
+ register_pfs_file_io_end(locker, n);
+
+diff -ruN a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
+--- a/storage/innobase/include/srv0srv.h 2011-02-23 19:00:48.212625715 +0900
++++ b/storage/innobase/include/srv0srv.h 2011-02-23 19:01:19.193655990 +0900
+@@ -247,6 +247,8 @@
+
+ extern ulint srv_extra_rsegments;
+ extern ulint srv_dict_size_limit;
++
++extern ulint srv_lazy_drop_table;
+ /*-------------------------------------------*/
+
+ extern ulint srv_n_rows_inserted;
+diff -ruN a/storage/innobase/include/sync0sync.h b/storage/innobase/include/sync0sync.h
+--- a/storage/innobase/include/sync0sync.h 2011-02-23 19:00:47.875625940 +0900
++++ b/storage/innobase/include/sync0sync.h 2011-02-23 19:01:19.195703856 +0900
+@@ -683,6 +683,7 @@
+ #define SYNC_BUF_POOL 150 /* Buffer pool mutex */
+ #define SYNC_BUF_FLUSH_LIST 145 /* Buffer flush list mutex */
+ #define SYNC_DOUBLEWRITE 140
++#define SYNC_OUTER_ANY_LATCH 136
+ #define SYNC_ANY_LATCH 135
+ #define SYNC_THR_LOCAL 133
+ #define SYNC_MEM_HASH 131