Why is it too big? Without your additions it is converting kmallocs
inline to get_free_pages(). That results in a simple function call with
two constant parameters.
The patch touches the page struct uselessly. I think the PageSlab marking
is useful for debugging but not for a production kernel.
--