Because it can be called inside client obd list lock as follows:
ll_dirty_page_discard_warn at
ffffffffa0a3d252 [lustre]
vvp_page_completion_common at
ffffffffa0a7adfc [lustre]
vvp_page_completion_write_common at
ffffffffa0a7ae6b [lustre]
vvp_page_completion_write at
ffffffffa0a7b83e [lustre]
cl_page_completion at
ffffffffa05eed8f [obdclass]
osc_completion at
ffffffffa0880812 [osc]
osc_ap_completion at
ffffffffa086a544 [osc]
brw_interpret at
ffffffffa0876d69 [osc]
Signed-off-by: Jinshan Xiong <jinshan.xiong@intel.com>
Change-Id: I04a4cc1142e019d39dccf2c1f3084c0298acff9d
Reviewed-on: http://review.whamcloud.com/4870
Tested-by: Hudson
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
struct dentry *dentry = NULL;
struct ccc_object *obj = cl_inode2ccc(page->mapping->host);
- buf = (char *)__get_free_page(GFP_KERNEL);
+ /* this can be called inside spin lock so use GFP_ATOMIC. */
+ buf = (char *)__get_free_page(GFP_ATOMIC);
if (buf != NULL) {
dentry = d_find_alias(page->mapping->host);
if (dentry != NULL)