mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 10:41:26 +00:00
scst_vdisk: Fix zero-copy read for tmpfs
For some filesystems, e.g. tmpfs, address_space.readpage is NULL. Disable zero-copy reading for such filesystems. See also shmem_aops in mm/shmem.c. See also inode_init_always() and empty_aops in fs/inode.c. This patch avoids that the following call trace is triggered: BUG: unable to handle kernel NULL pointer dereference at (null) Call Trace: [<ffffffffa0547d66>] prepare_read+0x106/0x1d0 [scst_vdisk] [<ffffffffa0547f20>] fileio_alloc_data_buf+0xf0/0x330 [scst_vdisk] [<ffffffffa046fc9b>] scst_prepare_space+0x9b/0x6e0 [scst] [<ffffffffa047d4d5>] scst_process_active_cmd+0x545/0x840 [scst] [<ffffffffa047dad2>] scst_cmd_init_done+0x302/0x5d0 [scst] [<ffffffffa0563ab2>] scst_cmd_init_stage1_done.constprop.37+0x12/0x20 [iscsi_scst] [<ffffffffa056a9ea>] scsi_cmnd_start+0x25a/0x550 [iscsi_scst] [<ffffffffa056b4a8>] cmnd_rx_start+0x148/0x1a0 [iscsi_scst] [<ffffffffa056e4f8>] process_read_io+0x3b8/0x800 [iscsi_scst] [<ffffffffa056ea07>] scst_do_job_rd+0xc7/0x220 [iscsi_scst] [<ffffffffa056efed>] istrd+0x16d/0x2e0 [iscsi_scst] [<ffffffff81079efd>] kthread+0xed/0x110 [<ffffffff817227fc>] ret_from_fork+0x7c/0xb0 Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5988 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -2777,7 +2777,8 @@ static int fileio_alloc_data_buf(struct scst_cmd *cmd)
|
||||
* copy.
|
||||
*/
|
||||
if (cmd->tgt_i_data_buf_alloced ||
|
||||
(cmd->data_direction & SCST_DATA_READ) == 0) {
|
||||
(cmd->data_direction & SCST_DATA_READ) == 0 ||
|
||||
(virt_dev->fd && !virt_dev->fd->f_mapping->a_ops->readpage)) {
|
||||
p->use_zero_copy = false;
|
||||
}
|
||||
if (!p->use_zero_copy)
|
||||
|
||||
Reference in New Issue
Block a user