From patchwork Wed Jul 6 17:19:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Yan X-Patchwork-Id: 645413 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3rl6th2sWrz9sRZ for ; Thu, 7 Jul 2016 03:19:24 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=Cq7mbzSr; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754490AbcGFRTX (ORCPT ); Wed, 6 Jul 2016 13:19:23 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:34198 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753917AbcGFRTX (ORCPT ); Wed, 6 Jul 2016 13:19:23 -0400 Received: by mail-pf0-f194.google.com with SMTP id 66so22320667pfy.1; Wed, 06 Jul 2016 10:19:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:from:to:cc:subject:date:in-reply-to:references; bh=vws4BtvxCikMtwXcPdzjz3SgvSQ2UuS3WQzi8aWJEBQ=; b=Cq7mbzSraedooKHhSwmqn2tJo+0Cqj26FIx8lUrt9KIbb7IHasQUR2oYCV0YJXzmwa +MeGZQdYRrVGgg4edZhv7MjQMbaQn17w3BqKJpupIDH6hWebR/zYUjd6+bYgAMFYMIeY ZvLJKr1NseM/fodGs1fSb7O/SuveEqL2r9soB5MQDNw2jw4vSJXfyiGa8m1wtGcTY67/ 9CJgB8wvxcKnXlPSLuP2mNnVDMXG2aCSd56QCSazDbCsMPgCFHqcCV30SU4nA3j8a2BP bx8VZpIkDueX6z93Mvgl4C0wizV9ut3Pij8weBxAkJGbe1NyPgTdufjVYFMJQDbOQmxe xLig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:from:to:cc:subject:date:in-reply-to :references; bh=vws4BtvxCikMtwXcPdzjz3SgvSQ2UuS3WQzi8aWJEBQ=; b=bSY0vUcy945iV61o5ylTPs5mooNao+0drO2PCoh5/Jrikwwfyw5KQb+n9VBrPqkIda 9L73mCkgTP8yixXG4nesBIkUI99/FoAI1YE/AjebCZjHovNzAyABHpSRPkoA677Lrfvq RWtfeIAS/vO/6ZtYN3pd8hDilFCSTJ4XjwtAH8TmiCU5pKOfkh+M4vaRVm8X6FL3DAJL JDgZ+of021bo60JTmlMkIn39WhLiKnk63EtKe7lPzJeM3u9WZtFfr5KAgrz9ByXqN6ew iQ7iVNR2PLp5Lvey++8s0jxJjf84kKxprqSQnJO0YRlMnfW1+nMRiHueIG2xOs/QCj20 VROg== X-Gm-Message-State: ALyK8tIy6YwdQqJnYOy4nJVbXBSBZ480c5IDDt07SeexDJqEY8Sqm5oGmaQhuMGxS2qNTw== X-Received: by 10.98.19.133 with SMTP id 5mr43695264pft.17.1467825562163; Wed, 06 Jul 2016 10:19:22 -0700 (PDT) Received: from localhost.localdomain ([2404:c805:e00:4700:ae22:bff:fe29:e60c]) by smtp.gmail.com with ESMTPSA id vx4sm5900199pac.35.2016.07.06.10.19.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Jul 2016 10:19:21 -0700 (PDT) Message-ID: <577d3d99.24f0420a.c2bbd.ffffd427@mx.google.com> X-Google-Original-Message-ID: <20160706171906.1993-2-me> From: tom.ty89@gmail.com X-Google-Original-From: me To: tj@kernel.org, martin.petersen@oracle.com, sergei.shtylyov@cogentembedded.com Cc: linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org, Tom Yan Subject: [PATCH v5 2/2] libata-scsi: avoid repeated calculation of number of TRIM ranges Date: Thu, 7 Jul 2016 01:19:06 +0800 X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160706171906.1993-1-me> References: <20160706171906.1993-1-me> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org From: Tom Yan Currently libata statically allows only 1-block (512-byte) payload for each TRIM command. Each payload can carry 64 TRIM ranges since each range requires 8 bytes. It is silly to keep doing the calculation (512 / 8) in different places. Hence, define the new ATA_MAX_TRIM_RNUM for the result. Signed-off-by: Tom Yan diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index a1f061a..82739be 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -2314,7 +2314,7 @@ static unsigned int ata_scsiop_inq_b0(struct ata_scsi_args *args, u8 *rbuf) * with the unmap bit set. */ if (ata_id_has_trim(args->id)) { - put_unaligned_be64(65535 * 512 / 8, &rbuf[36]); + put_unaligned_be64(65535 * ATA_MAX_TRIM_RNUM, &rbuf[36]); put_unaligned_be32(1, &rbuf[28]); } @@ -3306,8 +3306,8 @@ static unsigned int ata_scsi_write_same_xlat(struct ata_queued_cmd *qc) buf = page_address(sg_page(scsi_sglist(scmd))); - if (n_block <= 65535 * 512 / 8) - size = ata_set_lba_range_entries(buf, 512, block, n_block); + if (n_block <= 65535 * ATA_MAX_TRIM_RNUM) + size = ata_set_lba_range_entries(buf, ATA_MAX_TRIM_RNUM, block, n_block); else goto invalid_fld; diff --git a/include/linux/ata.h b/include/linux/ata.h index 99346be..ce59500 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h @@ -48,6 +48,7 @@ enum { ATA_MAX_SECTORS_1024 = 1024, ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ ATA_MAX_SECTORS_TAPE = 65535, + ATA_MAX_TRIM_RNUM = 64, /* 512-byte payload / (6-byte LBA + 2-byte range per entry) */ ATA_ID_WORDS = 256, ATA_ID_CONFIG = 0, @@ -1071,7 +1072,7 @@ static inline unsigned ata_set_lba_range_entries(void *_buffer, __le64 *buffer = _buffer; unsigned i = 0, used_bytes; - while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */ + while (i < buf_size) { u64 entry = sector | ((u64)(count > 0xffff ? 0xffff : count) << 48); buffer[i++] = __cpu_to_le64(entry);