LU-6020 gss: properly map buffers to sg
A lot of buffer pointers passed to buf_to_sg() as input are coming
from vmalloc(), e.g. OBD_ALLOC_LARGE() in ptlrpc_add_rqs_to_pool().
sg_set_buf() uses virt_to_page() to map virtual addresses to
struct page, which does not work for vmalloc addresses.
The original code for buf_to_sg() caused the following crash:
BUG: unable to handle kernel paging request at
ffffeb040057c040
IP: [<
ffffffff81300367>] scatterwalk_pagedone+0x27/0x70
PGD 0
Oops: 0000 [#1] SMP
CPU 1
Pid: 2374, comm: ptlrpcd_3 Tainted: G O 3.6.10-030610-generic
RIP: 0010:[<
ffffffff81300367>] [<
ffffffff81300367>] scatterwalk_pagedone+0x27/0x70
RSP: 0018:
ffff8801a3c178a8 EFLAGS:
00010282
RAX:
ffffeb040057c040 RBX:
ffff8801a3c17938 RCX:
ffffeb040057c040
RDX:
0000000000000000 RSI:
0000000000000001 RDI:
ffff8801a3c17970
RBP:
ffff8801a3c178a8 R08:
00000000000005a8 R09:
ffff8801a3c17a40
R10:
ffff8801a30370d0 R11:
0000000000000a68 R12:
0000000000000010
R13:
ffff8801a3c17a08 R14:
ffff8801a3c17970 R15:
ffff88017d1c2c80
FS:
0000000000000000(0000) GS:
ffff8801afa40000(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
000000008005003b
CR2:
ffffeb040057c040 CR3:
0000000001c0c000 CR4:
00000000001407e0
DR0:
0000000000000000 DR1:
0000000000000000 DR2:
0000000000000000
DR3:
0000000000000000 DR6:
00000000ffff0ff0 DR7:
0000000000000400
Process ptlrpcd_3 (pid: 2374, threadinfo
ffff8801a3c16000, task
ffff8801a44e0000)
Stack:
ffff8801a3c178b8 ffffffff813004bd ffff8801a3c17908 ffffffff8130303f
ffff880100000000 ffffffff00000000 ffff8801a3c17908 ffff8801a3c17b18
ffffc90015f015a8 0000000000000000 0000000000000010 0000000000000010
Call Trace:
[<
ffffffff813004bd>] scatterwalk_done+0x3d/0x50
[<
ffffffff8130303f>] blkcipher_walk_done+0x8f/0x230
[<
ffffffff8130a39f>] crypto_cbc_encrypt+0xff/0x190
[<
ffffffffa0688660>] ? aes_decrypt+0x80/0x80 [aesni_intel]
[<
ffffffffa0a1a1e4>] krb5_encrypt_bulk+0x164/0x5b0 [ptlrpc_gss]
[<
ffffffffa0a1a812>] gss_wrap_bulk_kerberos+0x1e2/0x490 [ptlrpc_gss]
[<
ffffffffa0a1600e>] lgss_wrap_bulk+0x2e/0x100 [ptlrpc_gss]
[<
ffffffffa0a0d98e>] gss_cli_ctx_wrap_bulk+0x44e/0x650 [ptlrpc_gss]
[<
ffffffffa0ab867c>] sptlrpc_cli_wrap_bulk+0x3c/0x70 [ptlrpc]
[<
ffffffffa0aba2d0>] sptlrpc_cli_wrap_request+0x60/0x360 [ptlrpc]
[<
ffffffffa0a8cde4>] ptl_send_rpc+0x164/0xc30 [ptlrpc]
[<
ffffffffa07be957>] ? libcfs_debug_msg+0x47/0x50 [libcfs]
[<
ffffffffa0a80ee0>] ptlrpc_send_new_req+0x3b0/0x940 [ptlrpc]
[<
ffffffffa0a86530>] ptlrpc_check_set+0x8e0/0x1d50 [ptlrpc]
[<
ffffffff816ac9f6>] ? schedule_timeout+0x146/0x260
[<
ffffffffa0ab0c9b>] ptlrpcd_check+0x4eb/0x5d0 [ptlrpc]
[<
ffffffffa0ab105f>] ptlrpcd+0x2df/0x420 [ptlrpc]
[<
ffffffff8108efa0>] ? try_to_wake_up+0x200/0x200
[<
ffffffffa0ab0d80>] ? ptlrpcd_check+0x5d0/0x5d0 [ptlrpc]
[<
ffffffff8107c5f3>] kthread+0x93/0xa0
[<
ffffffff816b8d04>] kernel_thread_helper+0x4/0x10
[<
ffffffff8107c560>] ? flush_kthread_worker+0xb0/0xb0
[<
ffffffff816b8d00>] ? gs_change+0x13/0x13
Change-Id: I346d50568b65ed10da2762ca34562fc2858a05d8
Signed-off-by: Andrew Perepechko <andrew.perepechko@seagate.com>
Xyratex-bug-id: SNT-15
Reviewed-on: http://review.whamcloud.com/17319
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>