mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
NFS/localio: fix nfs_local_dio_misaligned tracepoint
The intended focus of nfs_local_iters_setup_dio()'s call to
trace_nfs_local_dio_misaligned() is on the middle segment being
misaligned, yet the @offset passed in was local_dio->start_len.
It would appear this was a cut-n-paste bug from the preceding
nfs_local_iter_setup() call that passes local_dio->start_len.
Fix this by passing the @offset as local_dio->middle_offset and
calculate the start segment's offset rather than assume.
Example traces, before this fix:
python3-32744 [006] .l... 132946.352360:
nfs_local_dio_write: fileid=00:33:1286 fhandle=0xf1f7c10b
offset=1048759 count=1048576 mem_align=4 offset_align=512
start=1048759+329 middle=1049088+1048064 end=2097152+183
python3-32744 [006] .l... 132946.352360:
nfs_local_dio_misaligned: fileid=00:33:1286 fhandle=0xf1f7c10b
offset=329 count=1048064 mem_align=4 offset_align=512
start=329+329 middle=1049088+1048064 end=2097152+183
After this fix:
python3-32744 [006] .l... 132946.352360:
nfs_local_dio_write: fileid=00:33:1286 fhandle=0xf1f7c10b
offset=1048759 count=1048576 mem_align=4 offset_align=512
start=1048759+329 middle=1049088+1048064 end=2097152+183
python3-32744 [006] .l... 132946.352360:
nfs_local_dio_misaligned: fileid=00:33:1286 fhandle=0xf1f7c10b
offset=1049088 count=1048064 mem_align=4 offset_align=512
start=1048759+329 middle=1049088+1048064 end=2097152+183
Fixes: 6a218b9c31 ("nfs/localio: do not issue misaligned DIO out-of-order")
Cc: stable@vger.kernel.org
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Anna Schumaker <anna.schumaker@hammerspace.com>
This commit is contained in:
parent
4fa21ed151
commit
1ea352a0db
|
|
@ -446,7 +446,7 @@ nfs_local_iters_setup_dio(struct nfs_local_kiocb *iocb, int rw,
|
|||
|
||||
if (unlikely(!iocb->iter_is_dio_aligned[n_iters])) {
|
||||
trace_nfs_local_dio_misaligned(iocb->hdr->inode,
|
||||
local_dio->start_len, local_dio->middle_len, local_dio);
|
||||
local_dio->middle_offset, local_dio->middle_len, local_dio);
|
||||
return 0; /* no DIO-aligned IO possible */
|
||||
}
|
||||
iocb->end_iter_index = n_iters;
|
||||
|
|
|
|||
|
|
@ -1772,7 +1772,10 @@ DECLARE_EVENT_CLASS(nfs_local_dio_class,
|
|||
__entry->count = count;
|
||||
__entry->mem_align = local_dio->mem_align;
|
||||
__entry->offset_align = local_dio->offset_align;
|
||||
__entry->start = offset;
|
||||
if (local_dio->start_len)
|
||||
__entry->start = local_dio->middle_offset - local_dio->start_len;
|
||||
else
|
||||
__entry->start = 0;
|
||||
__entry->start_len = local_dio->start_len;
|
||||
__entry->middle = local_dio->middle_offset;
|
||||
__entry->middle_len = local_dio->middle_len;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user