* [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive @ 2014-06-25 10:34 Reddy, Sreekanth 2014-07-13 15:27 ` Martin K. Petersen 0 siblings, 1 reply; 6+ messages in thread From: Reddy, Sreekanth @ 2014-06-25 10:34 UTC (permalink / raw) To: jejb, JBottomley Cc: linux-scsi, Sathya.Prakash, Nagalakshmi.Nandigama, sreekanth.reddy, linux-kernel, hch, martin.petersen There was a down casting of the volume max LBA from a U64 to a U32, which is taken out and now the max LBA is set appropriately to U64. Signed-off-by: Sreekanth Reddy <Sreekanth.Reddy@avagotech.com> --- drivers/scsi/mpt2sas/mpt2sas_scsih.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 6ae109b..4a0728a 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -3865,7 +3865,8 @@ _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, struct _raid_device *raid_device, Mpi2SCSIIORequest_t *mpi_request, u16 smid) { - u32 v_lba, p_lba, stripe_off, stripe_unit, column, io_size; + u32 p_lba, stripe_off, stripe_unit, column, io_size; + u64 v_lba; u32 stripe_sz, stripe_exp; u8 num_pds, *cdb_ptr, i; u8 cdb0 = scmd->cmnd[0]; @@ -3882,12 +3883,17 @@ _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, | cdb_ptr[5])) { io_size = scsi_bufflen(scmd) >> raid_device->block_exponent; - i = (cdb0 < READ_16) ? 2 : 6; + /* get virtual lba */ - v_lba = be32_to_cpu(*(__be32 *)(&cdb_ptr[i])); + if (cdb0 < READ_16) + v_lba = be32_to_cpu(*(__be32 *)(&cdb_ptr[2])); + else + v_lba = be64_to_cpu(*(__be64 *)(&cdb_ptr[2])); + + i = (cdb0 < READ_16) ? 2 : 6; if (((u64)v_lba + (u64)io_size - 1) <= - (u32)raid_device->max_lba) { + raid_device->max_lba) { stripe_sz = raid_device->stripe_sz; stripe_exp = raid_device->stripe_exponent; stripe_off = v_lba & (stripe_sz - 1); -- 1.7.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive 2014-06-25 10:34 [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive Reddy, Sreekanth @ 2014-07-13 15:27 ` Martin K. Petersen 2014-07-13 17:02 ` Elliott, Robert (Server Storage) [not found] ` <CAK=zhgosXeox35kVvuiTm8EZaD2-e_Lxz79uFFAP0c1cMJNbcg@mail.gmail.com> 0 siblings, 2 replies; 6+ messages in thread From: Martin K. Petersen @ 2014-07-13 15:27 UTC (permalink / raw) To: Reddy, Sreekanth Cc: jejb, JBottomley, linux-scsi, Sathya.Prakash, Nagalakshmi.Nandigama, linux-kernel, hch, martin.petersen >>>>> "Sreekanth" == Reddy, Sreekanth <Sreekanth.Reddy@avagotech.com> writes: diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 6ae109b..4a0728a 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -3865,7 +3865,8 @@ _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, struct _raid_device *raid_device, Mpi2SCSIIORequest_t *mpi_request, u16 smid) { - u32 v_lba, p_lba, stripe_off, stripe_unit, column, io_size; + u32 p_lba, stripe_off, stripe_unit, column, io_size; + u64 v_lba; u32 stripe_sz, stripe_exp; u8 num_pds, *cdb_ptr, i; u8 cdb0 = scmd->cmnd[0]; @@ -3882,12 +3883,17 @@ _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, | cdb_ptr[5])) { io_size = scsi_bufflen(scmd) >> raid_device->block_exponent; - i = (cdb0 < READ_16) ? 2 : 6; + /* get virtual lba */ - v_lba = be32_to_cpu(*(__be32 *)(&cdb_ptr[i])); + if (cdb0 < READ_16) + v_lba = be32_to_cpu(*(__be32 *)(&cdb_ptr[2])); + else + v_lba = be64_to_cpu(*(__be64 *)(&cdb_ptr[2])); Why aren't you using scsi_get_lba() instead of all this nasty CDB parsing? + + i = (cdb0 < READ_16) ? 2 : 6; What about WRITE_16? WRITE_16 > READ_16. if (((u64)v_lba + (u64)io_size - 1) <= - (u32)raid_device->max_lba) { + raid_device->max_lba) { stripe_sz = raid_device->stripe_sz; stripe_exp = raid_device->stripe_exponent; stripe_off = v_lba & (stripe_sz - 1); Also, this is not touched by the patch, but you're then doing: (*(__be32 *)(&cdb_ptr[i])) = cpu_to_be32(p_lba); What if this is a 6-byte READ/WRITE command? You'll end up exceeding the size of the LBA field. What if you're using a 16-byte CDB and the target device LBA is > 2TB? -- Martin K. Petersen Oracle Linux Engineering ^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive 2014-07-13 15:27 ` Martin K. Petersen @ 2014-07-13 17:02 ` Elliott, Robert (Server Storage) [not found] ` <CAK=zhgosXeox35kVvuiTm8EZaD2-e_Lxz79uFFAP0c1cMJNbcg@mail.gmail.com> 1 sibling, 0 replies; 6+ messages in thread From: Elliott, Robert (Server Storage) @ 2014-07-13 17:02 UTC (permalink / raw) To: Martin K. Petersen, Reddy, Sreekanth Cc: jejb@kernel.org, JBottomley@Parallels.com, linux-scsi@vger.kernel.org, Sathya.Prakash@avagotech.com, Nagalakshmi.Nandigama@avagotech.com, linux-kernel@vger.kernel.org, hch@infradead.org > -----Original Message----- > From: linux-scsi-owner@vger.kernel.org [mailto:linux-scsi- > owner@vger.kernel.org] On Behalf Of Martin K. Petersen ... > Also, this is not touched by the patch, but you're then doing: > > (*(__be32 *)(&cdb_ptr[i])) = cpu_to_be32(p_lba); > > What if this is a 6-byte READ/WRITE command? You'll end up exceeding the > size of the LBA field. All this is inside: if (cdb0 == READ_16 || cdb0 == READ_10 || cdb0 == WRITE_16 || cdb0 == WRITE_10) { so READ_6 and WRITE_6 and all their oddities are not a problem here. ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <CAK=zhgosXeox35kVvuiTm8EZaD2-e_Lxz79uFFAP0c1cMJNbcg@mail.gmail.com>]
[parent not found: <CAK=zhgq6bXRBapfBy+Nx5uFFLUuj1cH78x0RXCU1Vk8Y9NWheA@mail.gmail.com>]
[parent not found: <yq1fvi3y736.fsf@sermon.lab.mkp.net>]
[parent not found: <CAK=zhgrUWOS-pPjamF+z+AZZvdXz_JxyKgdTv6Zae0oLk=qQog@mail.gmail.com>]
* Re: [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive [not found] ` <CAK=zhgrUWOS-pPjamF+z+AZZvdXz_JxyKgdTv6Zae0oLk=qQog@mail.gmail.com> @ 2014-07-15 14:00 ` Martin K. Petersen [not found] ` <CAK=zhgrE0QBgyyLTU0Jdq2cAbKbd=wY4zfMGo2ux9nWz9oBgiQ@mail.gmail.com> 0 siblings, 1 reply; 6+ messages in thread From: Martin K. Petersen @ 2014-07-15 14:00 UTC (permalink / raw) To: Sreekanth Reddy Cc: Martin K. Petersen, Nagalakshmi Nandigama, Sathya Prakash, linux-scsi >>>>> "Sreekanth" == Sreekanth Reddy <sreekanth.reddy@avagotech.com> writes: Sreekanth> Also coming to first point i.e. the usage of scsi_get_lba() Sreekanth> API instead of parsing the CDB. During an experiment I Sreekanth> observe that when I use the 'sg_dd if=/dev/sg0 of=/dev/null Sreekanth> count=1' command for read operation then the output of this Sreekanth> API is all FFFF's i.e. 0xffffffff (i.e. LBA is 0xffffffff Sreekanth> instead of 0x00000000 for 32 bit LBA). scsi_get_lba() returns a sector_t. I suspect it is all the type casting that is messing things up. >> p_lba is 32-bit but READ(16)/WRITE(16) take an 8-byte LBA. Your patch >> addresses the v_lba being 64-bit but not p_lba. I now see that you have two almost identical code paths to deal with p_lba. How about something like this (untested): diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 5055f925d2cd..24efc83d8e11 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -55,6 +55,8 @@ #include <linux/raid_class.h> #include <linux/slab.h> +#include <asm/unaligned.h> + #include "mpt2sas_base.h" MODULE_AUTHOR(MPT2SAS_AUTHOR); @@ -3857,85 +3859,41 @@ _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, struct _raid_device *raid_device, Mpi2SCSIIORequest_t *mpi_request, u16 smid) { - u32 v_lba, p_lba, stripe_off, stripe_unit, column, io_size; + sector_t v_lba, p_lba, stripe_off, stripe_unit, column, io_size; u32 stripe_sz, stripe_exp; - u8 num_pds, *cdb_ptr, i; - u8 cdb0 = scmd->cmnd[0]; - u64 v_llba; + u8 num_pds, cmd = scmd->cmnd[0]; - /* - * Try Direct I/O to RAID memeber disks - */ - if (cdb0 == READ_16 || cdb0 == READ_10 || - cdb0 == WRITE_16 || cdb0 == WRITE_10) { - cdb_ptr = mpi_request->CDB.CDB32; - - if ((cdb0 < READ_16) || !(cdb_ptr[2] | cdb_ptr[3] | cdb_ptr[4] - | cdb_ptr[5])) { - io_size = scsi_bufflen(scmd) >> - raid_device->block_exponent; - i = (cdb0 < READ_16) ? 2 : 6; - /* get virtual lba */ - v_lba = be32_to_cpu(*(__be32 *)(&cdb_ptr[i])); - - if (((u64)v_lba + (u64)io_size - 1) <= - (u32)raid_device->max_lba) { - stripe_sz = raid_device->stripe_sz; - stripe_exp = raid_device->stripe_exponent; - stripe_off = v_lba & (stripe_sz - 1); - - /* Check whether IO falls within a stripe */ - if ((stripe_off + io_size) <= stripe_sz) { - num_pds = raid_device->num_pds; - p_lba = v_lba >> stripe_exp; - stripe_unit = p_lba / num_pds; - column = p_lba % num_pds; - p_lba = (stripe_unit << stripe_exp) + - stripe_off; - mpi_request->DevHandle = - cpu_to_le16(raid_device-> - pd_handle[column]); - (*(__be32 *)(&cdb_ptr[i])) = - cpu_to_be32(p_lba); - /* - * WD: To indicate this I/O is directI/O - */ - _scsih_scsi_direct_io_set(ioc, smid, 1); - } - } - } else { - io_size = scsi_bufflen(scmd) >> - raid_device->block_exponent; - /* get virtual lba */ - v_llba = be64_to_cpu(*(__be64 *)(&cdb_ptr[2])); - - if ((v_llba + (u64)io_size - 1) <= - raid_device->max_lba) { - stripe_sz = raid_device->stripe_sz; - stripe_exp = raid_device->stripe_exponent; - stripe_off = (u32) (v_llba & (stripe_sz - 1)); - - /* Check whether IO falls within a stripe */ - if ((stripe_off + io_size) <= stripe_sz) { - num_pds = raid_device->num_pds; - p_lba = (u32)(v_llba >> stripe_exp); - stripe_unit = p_lba / num_pds; - column = p_lba % num_pds; - p_lba = (stripe_unit << stripe_exp) + - stripe_off; - mpi_request->DevHandle = - cpu_to_le16(raid_device-> - pd_handle[column]); - (*(__be64 *)(&cdb_ptr[2])) = - cpu_to_be64((u64)p_lba); - /* - * WD: To indicate this I/O is directI/O - */ - _scsih_scsi_direct_io_set(ioc, smid, 1); - } - } - } - } + if (cmd != READ_10 && cmd != WRITE_10 && + cmd != READ_16 && cmd != WRITE_16) + return; + + v_lba = scsi_get_lba(scmd); + io_size = scsi_bufflen(scmd) >> raid_device->block_exponent; + + if (v_lba + io_size - 1 > raid_device->max_lba) + return; + + stripe_sz = raid_device->stripe_sz; + stripe_exp = raid_device->stripe_exponent; + stripe_off = v_lba & (stripe_sz - 1); + + /* Return unless IO falls within a stripe */ + if (stripe_off + io_size > stripe_sz) + return; + + num_pds = raid_device->num_pds; + p_lba = v_lba >> stripe_exp; + stripe_unit = p_lba / num_pds; + column = p_lba % num_pds; + p_lba = (stripe_unit << stripe_exp) + stripe_off; + mpi_request->DevHandle = cpu_to_le16(raid_device->pd_handle[column]); + + if (cmd == READ_10 || cmd == WRITE_10) + put_unaligned_be32(lower_32_bits(p_lba), mpi_request->CDB.CDB32); + else + put_unaligned_be64(p_lba, mpi_request->CDB.CDB32); + + _scsih_scsi_direct_io_set(ioc, smid, 1); } /** ^ permalink raw reply related [flat|nested] 6+ messages in thread
[parent not found: <CAK=zhgrE0QBgyyLTU0Jdq2cAbKbd=wY4zfMGo2ux9nWz9oBgiQ@mail.gmail.com>]
[parent not found: <CAK=zhgpqcFu5WKLEOD9E=K9DURO9HEtXE8VDVpScLiZK+3JsAQ@mail.gmail.com>]
* Re: [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive [not found] ` <CAK=zhgpqcFu5WKLEOD9E=K9DURO9HEtXE8VDVpScLiZK+3JsAQ@mail.gmail.com> @ 2014-07-15 16:02 ` Martin K. Petersen [not found] ` <CAK=zhgoNm=STXjBOOqXHaz4yPuRHQ0avwgUOD_H0B==sgt6vEg@mail.gmail.com> 0 siblings, 1 reply; 6+ messages in thread From: Martin K. Petersen @ 2014-07-15 16:02 UTC (permalink / raw) To: Sreekanth Reddy Cc: Martin K. Petersen, Nagalakshmi Nandigama, Sathya Prakash, linux-scsi >>>>> "Sreekanth" == Sreekanth Reddy <sreekanth.reddy@avagotech.com> writes: Sreekanth> I have tried with this diff. And I still observe the invalid Sreekanth> LBA (i.e. 0xFFFFFFFF) with scsi_get_lba() API when I used Sreekanth> the sg_dd with input file specified as /dev/sg0. Yeah, I now remember that scsi_get_lba() fails for PC commands. Sreekanth> Also below section of code will overwrite the CDB operation Sreekanth> code. and the final CDB has the some junk values. Yep, already fixed that. Please try the updated patch below. diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 5055f925d2cd..11617f6b8c60 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -55,6 +55,8 @@ #include <linux/raid_class.h> #include <linux/slab.h> +#include <asm/unaligned.h> + #include "mpt2sas_base.h" MODULE_AUTHOR(MPT2SAS_AUTHOR); @@ -3857,85 +3859,47 @@ _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, struct _raid_device *raid_device, Mpi2SCSIIORequest_t *mpi_request, u16 smid) { - u32 v_lba, p_lba, stripe_off, stripe_unit, column, io_size; + sector_t v_lba, p_lba, stripe_off, stripe_unit, column, io_size; u32 stripe_sz, stripe_exp; - u8 num_pds, *cdb_ptr, i; - u8 cdb0 = scmd->cmnd[0]; - u64 v_llba; + u8 num_pds, cmd = scmd->cmnd[0]; - /* - * Try Direct I/O to RAID memeber disks - */ - if (cdb0 == READ_16 || cdb0 == READ_10 || - cdb0 == WRITE_16 || cdb0 == WRITE_10) { - cdb_ptr = mpi_request->CDB.CDB32; - - if ((cdb0 < READ_16) || !(cdb_ptr[2] | cdb_ptr[3] | cdb_ptr[4] - | cdb_ptr[5])) { - io_size = scsi_bufflen(scmd) >> - raid_device->block_exponent; - i = (cdb0 < READ_16) ? 2 : 6; - /* get virtual lba */ - v_lba = be32_to_cpu(*(__be32 *)(&cdb_ptr[i])); - - if (((u64)v_lba + (u64)io_size - 1) <= - (u32)raid_device->max_lba) { - stripe_sz = raid_device->stripe_sz; - stripe_exp = raid_device->stripe_exponent; - stripe_off = v_lba & (stripe_sz - 1); - - /* Check whether IO falls within a stripe */ - if ((stripe_off + io_size) <= stripe_sz) { - num_pds = raid_device->num_pds; - p_lba = v_lba >> stripe_exp; - stripe_unit = p_lba / num_pds; - column = p_lba % num_pds; - p_lba = (stripe_unit << stripe_exp) + - stripe_off; - mpi_request->DevHandle = - cpu_to_le16(raid_device-> - pd_handle[column]); - (*(__be32 *)(&cdb_ptr[i])) = - cpu_to_be32(p_lba); - /* - * WD: To indicate this I/O is directI/O - */ - _scsih_scsi_direct_io_set(ioc, smid, 1); - } - } - } else { - io_size = scsi_bufflen(scmd) >> - raid_device->block_exponent; - /* get virtual lba */ - v_llba = be64_to_cpu(*(__be64 *)(&cdb_ptr[2])); - - if ((v_llba + (u64)io_size - 1) <= - raid_device->max_lba) { - stripe_sz = raid_device->stripe_sz; - stripe_exp = raid_device->stripe_exponent; - stripe_off = (u32) (v_llba & (stripe_sz - 1)); - - /* Check whether IO falls within a stripe */ - if ((stripe_off + io_size) <= stripe_sz) { - num_pds = raid_device->num_pds; - p_lba = (u32)(v_llba >> stripe_exp); - stripe_unit = p_lba / num_pds; - column = p_lba % num_pds; - p_lba = (stripe_unit << stripe_exp) + - stripe_off; - mpi_request->DevHandle = - cpu_to_le16(raid_device-> - pd_handle[column]); - (*(__be64 *)(&cdb_ptr[2])) = - cpu_to_be64((u64)p_lba); - /* - * WD: To indicate this I/O is directI/O - */ - _scsih_scsi_direct_io_set(ioc, smid, 1); - } - } - } - } + if (cmd != READ_10 && cmd != WRITE_10 && + cmd != READ_16 && cmd != WRITE_16) + return; + + if (cmd == READ_10 || cmd == WRITE_10) + v_lba = get_unaligned_be32(&mpi_request->CDB.CDB32[2]); + else + v_lba = get_unaligned_be64(&mpi_request->CDB.CDB32[2]); + + v_lba = scsi_get_lba(scmd); + io_size = scsi_bufflen(scmd) >> raid_device->block_exponent; + + if (v_lba + io_size - 1 > raid_device->max_lba) + return; + + stripe_sz = raid_device->stripe_sz; + stripe_exp = raid_device->stripe_exponent; + stripe_off = v_lba & (stripe_sz - 1); + + /* Return unless IO falls within a stripe */ + if (stripe_off + io_size > stripe_sz) + return; + + num_pds = raid_device->num_pds; + p_lba = v_lba >> stripe_exp; + stripe_unit = p_lba / num_pds; + column = p_lba % num_pds; + p_lba = (stripe_unit << stripe_exp) + stripe_off; + mpi_request->DevHandle = cpu_to_le16(raid_device->pd_handle[column]); + + if (cmd == READ_10 || cmd == WRITE_10) + put_unaligned_be32(lower_32_bits(p_lba), + &mpi_request->CDB.CDB32[2]); + else + put_unaligned_be64(p_lba, &mpi_request->CDB.CDB32[2]); + + _scsih_scsi_direct_io_set(ioc, smid, 1); } /** ^ permalink raw reply related [flat|nested] 6+ messages in thread
[parent not found: <CAK=zhgoNm=STXjBOOqXHaz4yPuRHQ0avwgUOD_H0B==sgt6vEg@mail.gmail.com>]
* Re: [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive [not found] ` <CAK=zhgoNm=STXjBOOqXHaz4yPuRHQ0avwgUOD_H0B==sgt6vEg@mail.gmail.com> @ 2014-07-15 17:02 ` Martin K. Petersen 0 siblings, 0 replies; 6+ messages in thread From: Martin K. Petersen @ 2014-07-15 17:02 UTC (permalink / raw) To: Sreekanth Reddy Cc: Martin K. Petersen, Nagalakshmi Nandigama, Sathya Prakash, linux-scsi >>>>> "Sreekanth" == Sreekanth Reddy <sreekanth.reddy@avagotech.com> writes: Sreekanth> But still I observe the invalid LBA when we send IOs using Sreekanth> sg_dd with input file specified as /dev/sg0 as shown below In the latest patch I get the LBA from CDB32 in the MPI request so that shouldn't happen. -- Martin K. Petersen Oracle Linux Engineering ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-07-15 17:02 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-25 10:34 [RESEND][PATCH 06/10][SCSI]mpt2sas: For >2TB volumes, DirectDrive support sends IO's with LBA bit 31 to IR FW instead of DirectDrive Reddy, Sreekanth
2014-07-13 15:27 ` Martin K. Petersen
2014-07-13 17:02 ` Elliott, Robert (Server Storage)
[not found] ` <CAK=zhgosXeox35kVvuiTm8EZaD2-e_Lxz79uFFAP0c1cMJNbcg@mail.gmail.com>
[not found] ` <CAK=zhgq6bXRBapfBy+Nx5uFFLUuj1cH78x0RXCU1Vk8Y9NWheA@mail.gmail.com>
[not found] ` <yq1fvi3y736.fsf@sermon.lab.mkp.net>
[not found] ` <CAK=zhgrUWOS-pPjamF+z+AZZvdXz_JxyKgdTv6Zae0oLk=qQog@mail.gmail.com>
2014-07-15 14:00 ` Martin K. Petersen
[not found] ` <CAK=zhgrE0QBgyyLTU0Jdq2cAbKbd=wY4zfMGo2ux9nWz9oBgiQ@mail.gmail.com>
[not found] ` <CAK=zhgpqcFu5WKLEOD9E=K9DURO9HEtXE8VDVpScLiZK+3JsAQ@mail.gmail.com>
2014-07-15 16:02 ` Martin K. Petersen
[not found] ` <CAK=zhgoNm=STXjBOOqXHaz4yPuRHQ0avwgUOD_H0B==sgt6vEg@mail.gmail.com>
2014-07-15 17:02 ` Martin K. Petersen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).