From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751195AbdEaTOG (ORCPT ); Wed, 31 May 2017 15:14:06 -0400 Received: from mail-eopbgr50087.outbound.protection.outlook.com ([40.107.5.87]:31040 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751022AbdEaTOD (ORCPT ); Wed, 31 May 2017 15:14:03 -0400 Authentication-Results: spf=pass (sender IP is 193.47.165.134) smtp.mailfrom=mellanox.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=pass action=none header.from=mellanox.com; Subject: Re: [PATCH v1 4/7] nvme: get list of namespace descriptors To: Johannes Thumshirn , Christoph Hellwig , Sagi Grimberg , Keith Busch References: CC: Hannes Reinecke , Linux NVMe Mailinglist , Linux Kernel Mailinglist From: Max Gurtovoy Message-ID: <60cf348d-45cb-5bd1-9f75-7b9e22f30826@mellanox.com> Date: Wed, 31 May 2017 22:13:41 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1255"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [172.16.1.2] X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:193.47.165.134;IPV:NLI;CTRY:IL;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(39400400002)(39410400002)(39850400002)(39840400002)(39450400003)(39860400002)(2980300002)(438002)(189002)(377454003)(24454002)(199003)(9170700003)(81166006)(36756003)(31696002)(189998001)(50466002)(8936002)(8676002)(64126003)(38730400002)(305945005)(356003)(7736002)(478600001)(4326008)(76176999)(50986999)(54356999)(5660300001)(106466001)(31686004)(229853002)(77096006)(54906002)(2950100002)(6246003)(53546009)(33646002)(47776003)(65956001)(4001350100001)(3846002)(83506001)(86362001)(6116002)(230700001)(3940600001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR05MB1192;H:mtlcas13.mtl.com;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD027;1:RGwSppU3rHvFT/qeHs/3Fv89PwmHc8MmsmD0Km3B//bzPH1IZ3b93nsAI1AvNWEOEhreyRoG5Bjb6/o8QorIxQ1c/CoSbW85KNfl1lFKFL3iyzAE/4EZDtBPjcEBmYYl8fr8PByh/ShgdRSmDppgYc1or9Y8a19Y5OExhUf9LDg3kqWYdayo5b8wYbaWq7xLoCbsxgGR/elEdvHL+bKH4ehF1ay4LLHWrf6/7zGI+V9K4cLj65hhZUFuE4SEe8EmBEU9bj1hkreNdNkdvnttfW5eog+daAYYpaUoyvdU+R2QkJND/2eem/YqB7IFnYsNTZRlxnLtxpemoNfxKNN2rBQLl6QMS+HPh9KCMJ58cNqfoGE0sFn7cycAccIsqI1OREZCkqRPqTE8E6YRJ5vWSv0HQK40GWlILeoT5ptK4AYup0+h+/5uVANyxuODbZXvNCtS0gDn+xzWFYRfGhbti9j5KbgI8YNjCWGNkx48TD6ZW69YMjAq+yfvZoVdWg4NMeFbumEMB0qA7cD5QXY0SnURM1Uw9u8GYZPpsT1xpesRhdLLBd+cF3f44wz7B5uxrkMUzfPVy/yt+0Qgc1kTopl/CIzMz8jSXcWXNcCbATg= X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB5PR05MB1192: X-MS-Office365-Filtering-Correlation-Id: 491c4eb6-27a8-4336-78c8-08d4a85930d5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(2017030254075)(201703131423075)(201703031133081)(201702281549075);SRVR:DB5PR05MB1192; X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1192;3:56EwraUSz6Q8Kw2GwI5HHBS9kO5ZS9Z8wQ3ih1cHciG2Ygnb/r1+hkOyl3GGj5NENT2zXxHsB/mvHXNzdufjH+OeOwl8yUPKnirSDcn7xXUFArWI5L4KIL8MRAPk2XlPN85Plc7cb9pS17r8l+8Bix93Gr60/jjRdlcRNqezoo/NMmmfn9tc2kd7gXHz3GGxLIDrxvhJzxoYLKdMrpQammEkaqSXe/fFzYGRy+BhG/McKrItAW5AHSXxiO1W/fqYs84xfr+5yg8D58cWH3hEw3hM6MbLceVQAIIqtAPF/OGJVDxZ2owq19hjtBSkIiuN5BXQkRahrCo/UJHicAtlT13n0CLb2HEBeA5z4krEeK3o70TRlhxR8x9faYWy4LL8sTQxMUdAu4gTq/GauZc9DsH13RRZaI8Vc9jenLmzNs64HUFh1VxdiOpgWjD9y92eZK0BZxSuZsqJLy0Xxm9gkL/ZtimjOr5fcZZRz6nFIQkITM3xXmXpKCDalKfwduoHjSGOe5sJRXL2hp0FPWIwUw== X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1192;25:yLjrj3GpAGXZL+LWFqYo7d7Maznozo1VA2SRM1hlobQxnp6SMWg6mBf8OWOfyyHan7YcOR92CvHtcUw6LdwqeCdhafiLifWy5GXW6l7rtgml5GfuVSrivRClRyUpaZQ/Ck80w8GhW37l1pQbX5M5HlgGvxQzdvEaVcv+28LJIcFEozmKia7ciSoytMEzHTZdhGXNUN0WV7Utf/r6W2hQJ9s5W4xymAkik/rQ5HDfIWfgVeJBDQicQlZPVIv7NEOqjDzIArk5U7MKrwr7lJ2mbdv1oX/YU+ullkwGorTGPr0N3OySm5PMIwgH+c7xS+D09Zy2Woc5upGuGwIrgUvTb5KMvbMxA7Ne9CojCywOaDQ1KfIbL/liOfm0B8ZINp8Y/e1aPo42onUJn2LVgccu2Q5N1cP3wNKFo6AkvgUs/ci3dwpV1XvvpipMEA+xK/23YpC4gNZD6IhKmVjDUWEJC9syb83Hd/LXD4MEJJzpCl0=;31:pYdkEEFrfctbSb1hHzSmsgKohC2pd70e0DuveFf6HvOpyuSIMJLZss9TcoYdCeWO81/WMKG35/wz7TecEX/HcxPUBCWKbGTHsKcLp11uGeTblyENsseCShM7HyN5/q0CYSYF0WQOulCSHHxJ4w3hWaorTMmuYUcP/mgOvq6KDhYCy5THhwcpTCzqIZHqYFfEJfaIDy2R6AX4BYiWoOvLQL6WHmJsuB+1SbxFyFQAFV9PXsgE2KdqJyxEmmB849QLfxFz0d3M8azRXblGOtCl4A== X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1192;20:7rV2oK/m7DSvuNr/F2uZS7tQIKjI0ybr9ZIo9kQmo9YkqJp/ImqaJDHwzecy7jZ+jenAXqB31mw/v0FWo4OAhbjYJZMi+ymtB8A9gXzKO4Sudl9z69Bs5n00Ch/E9GAo6lOIBEMyVPhtR2xavXoLR6MCln92SPEBZafts1q7R2V1nXjWYzADY9hXueib18d0rBM1vChd9FUm92M9HRcie7xqFaW+sl8UxIJ/fJSmzfYd/zlKprX9FMAFxoYu9LxkPKkGYf0FSMj4eLw2WBj1IctFEjOkuLKC7mK1mGiXwLmqqlnRAiMV9LjYxOCWrazhF/xW3b0klZLercNVno7CZry0WL86yb/lmNJ2mE3lHc0LndF4eSozUW6PRq3R0xid0SBOKI184OLW1AXPuLoxO06ZWBonHzyQNc2YVv4/A+2BT9iDv8t4DRbbxpjFzqX/PnD5MST3cJbLCc0ltAi6aVuSpsxSDf8BpsQ9w9LT91aETn6BzfiRk66a6jEbEh00 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700073)(100105000095)(100000701073)(100105300095)(100000702073)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(13018025)(13016025)(93006095)(93004095)(100000703073)(100105400095)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(20161123555025)(20161123564025)(6072148)(100000704073)(100105200095)(100000705073)(100105500095);SRVR:DB5PR05MB1192;BCL:0;PCL:0;RULEID:(100000800073)(100110000095)(100000801073)(100110300095)(100000802073)(100110100095)(100000803073)(100110400095)(100000804073)(100110200095)(100000805073)(100110500095);SRVR:DB5PR05MB1192; X-Microsoft-Exchange-Diagnostics: =?windows-1255?Q?1;DB5PR05MB1192;4:d+OdHq1klYHIoCru/WL/MDsc4C5n9QLOXgptal?= =?windows-1255?Q?LI7eWok0Ej4z4Qv9Bcog+0Ay5JPVLoIzKx0+oxFXzR65UfC49CrtZbiY?= =?windows-1255?Q?uM7g2kpfec7Z1kZ/9Lt7bTv1CoTiKB6K7sfwguhfOMGUJKUOQM1n2GT5?= =?windows-1255?Q?DHcqk34Ik7ASBKKA8rwY6wRQiBwLY89e10JyzMEhB55K3FzX+B18HnyK?= =?windows-1255?Q?XgAAD7++gNQkXGb++rLH0RkfY6dhXjywEG8fJUSUeyCI+zAlWD39ebqg?= =?windows-1255?Q?tm2jf1hB9WXZmXsnOLdxuzUM7kU0agiwBUhLzTEqZ5KNJ/VfHlayL0dk?= =?windows-1255?Q?wzuikRmZpiEnlEjlRcy1kKsd2JA1Vr3qPAG2YA5zfNB7w9XD87WuAbth?= =?windows-1255?Q?Sd5X0pmsF+V3587dYexT7MARoZk+4tMvU6L5jHAefNkM3x/RVj9UCdd3?= =?windows-1255?Q?7rjMxuzUJa9YFjQ0nqFrd6fY1U/0VtaZKZRt5joqQssDoQFrApIXT84n?= =?windows-1255?Q?X8JCZkwRXDkMqwbelYVur/d6wZeN5SBrTBxLuHgvycVT1BmFv5i92ks/?= =?windows-1255?Q?4F90ae20VFQ9eE7Wb7nlhayzGzcVao4kAOQ8W/AC1II7FjqFSn1Gm4di?= =?windows-1255?Q?shAa3hyXP/QILD/GM6DWIlV6baNey/ULvy4d+hBXml1/OsOpJEQVQhfG?= =?windows-1255?Q?sMf8xERLLmpgTHp57mWOHo+UH7UMVfdn0lCukV/AWfgeLEUFsJw+GPjc?= =?windows-1255?Q?KwGpk9klmJmIo8d8lAeKmkxb8NRok4GJgTy80fFdF1HZee9WVLMJ4z4T?= =?windows-1255?Q?ODymS+a2DgCMR2/1sgwizMwkjYZhgk+r8PsictOBoTr1qIiWCJV778eP?= =?windows-1255?Q?xsmcm4IeZFGI6iNnvyNWkWg4JvYbwtvjCnHMSfT3rq4iRZYllx1y4+sh?= =?windows-1255?Q?yvOBbUmhHn0btriSUDwH6U5cRxpmT0Y8K723uYNNofAH0uhuV8VQBAWg?= =?windows-1255?Q?aUSzQI+Q+mnBY8rw24D84yzp5GF7iZo+tKwQ4K9IPgNsDH42Oz3ghJjC?= =?windows-1255?Q?SutZmd63o+MDBCzu+UWsmhOaTQX2JoNqEuNkb3NGfRHbaOV6KNKhk5AX?= =?windows-1255?Q?mj2SQRw0zc5gakA7ORSHCc6GFHkMvtiXnaaBjWAxj9Yxvu0h/Yzt9y5g?= =?windows-1255?Q?SqhHL2xNrKC5aKqFiV4ZaqGbStN+T/tBJurQewrjayjtWmQgNcpvI+DR?= =?windows-1255?Q?gnoa7fiqIhDMgfoiZRwSfCF7QM8jog+Wk1NWWzGkECMLQGYR088QmLt9?= =?windows-1255?Q?JYs9O/j7mfQekrFYjNAkJDdx7o7/QK/w3Ju1RyVFgpJJQ=3D?= X-Forefront-PRVS: 0324C2C0E2 X-Microsoft-Exchange-Diagnostics: =?windows-1255?Q?1;DB5PR05MB1192;23:wl2bwB+1ClUQ4rLJEkFVd9swghheET+vBkAha?= =?windows-1255?Q?p1IsQHs4XRWJqTlc/q3wjZKt/CRW5zCZO9Ix5WLY3BviWSz0VFXt50AH?= =?windows-1255?Q?MF7yC89N0cU2bk/zyzFYozVkZ6y0/F+s3UFvAC30CNZMYT7N1qCRGmAt?= =?windows-1255?Q?GiCSQVfUwz8q7rll7LaE3hf4ptD6cQhLVMxb8Fd0dvUzy+vt4YOtbC2K?= =?windows-1255?Q?gLq/1A0Pk4jcdqEcbGFKvH1TvKCHEX/JL479Ukf+Ya2T+OUdoHMphZaA?= =?windows-1255?Q?En/jDeDZ0jGZBBru/bn2f3VttJm5YqWbSgLAs0s/j5yKVYlgI1zLWQgj?= =?windows-1255?Q?CDpCC0kATDEf8hGDL47++AdE6+AU+1e2CarP1TAoKLscavw+3CTQ+oma?= =?windows-1255?Q?siVMZrzbQYjfUA5xOsKnmcwYaVa6DqRjFd0P2HI52gUJdPpVoOiVa8ar?= =?windows-1255?Q?d5qMRBWl1k75ZdzMiRApH8rUZGpyQ7QOz4daTCY24eQHfsg3lhSwsCMr?= =?windows-1255?Q?TMZvZ5AqK9PLtceHSxqvPxPTy23C2Xr3QMn+qLaxiM3XJFzfXSuOoK3c?= =?windows-1255?Q?oJg4uuK3ltS+Y/Bd0YO04vdYb0UHO+Z/YShJ/DBRMSuUHf1O7aU3Bhkt?= =?windows-1255?Q?xZHbudtF2EIGkNS8TVHR/1ZiPy2B3PBTNL3m/lMoN++fsvFtqHxhvXBb?= =?windows-1255?Q?sF1F9jtiTSlxStjia5PYjFpiNi7UsNjfsZlRRSv3br9qIaj74aByhmS+?= =?windows-1255?Q?cWqSZDmHHYgrqRdD1S8QNxpRm1+CcN7BX9WTe4hBnIrz5PC8QGepRYF3?= =?windows-1255?Q?zALpzi6ZqwcYDEpeSTeSkNhP3Hic8c7bUNpjO9Ik8qq0w+66d5Xb+RlN?= =?windows-1255?Q?WReRGsUMdpB9T9JLBNEVQGnpg8smBXOAQ+R9uTV5clB7u/SMM/MxsYgZ?= =?windows-1255?Q?jZYfQ51ySAI5uN4724RKa6sksdRCmc3z4juIAdSUDQ7aLAtHZJBN9itA?= =?windows-1255?Q?moDugC6bdUU2stU3yPjc8ts/9HkJ4YUwhjK6a+pwOkfkVF2D2d8D8zfc?= =?windows-1255?Q?tLK04gBPszgmcW1SzgUEGa6oQa1xHefcQhw1f5G4FQ5eTQ1E+gKJH4oz?= =?windows-1255?Q?+w6ZJmPYaGu3je5UyZX7MAcZ1sTYpQSMlAveid9ozFjYv+CflUM/eEFm?= =?windows-1255?Q?PGphwlnRfvp3vc6icS+4iq5ouE7ynqGRYI/dgsN2nWQdWd4HJoT18vE0?= =?windows-1255?Q?OgHZ74roq6wSc7OpSU2l2pyZyyqPSBBp8YUU0E65+D+ucU4DGTD27U0y?= =?windows-1255?Q?OEtrnEbQD49uzXCWWAf+qsAuasNS9ddBysHc4/ALpJ7+uc=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1192;6:RYmS6qnVu5pnh+umB+rfz4Ck6QOYicTm24A7IibD4Krz+sapGKcHQiwIihGJOT238Hhq1WdjntMiHfgHHfpYhjAZ0NKu36mcd/Osix5T3ztQUlB/tyRDXhtQBsi/4aoxJHTDRVF9JsD6RkS6ZjrKtNfIKUPgNZEZ1ubFTEyB8kpvc4XSsQgdkfj10MqOTYJ6Ja69SUkhyAe9x+JWLOGv9g2OjLpQ+E1Cxsc+tEKnOhJ3VDWcg9LgY9wBXrYNA9KdMz7L5QX/Uv6M8Es97ce4vMYlAOIDkloQaQ/yZjnqCHu9zD8XXtC3ZhF9+JqhMbiXif2nIPb0eWfgTMHYDnT6U7D9TdRvTu9RQhmQ2f4lm1gk7duMfIDf6X6vCchyjQXrw5X2ItjXq3YwnntjNg3h5/Gu8akP60xc3wXkhK4iBUPK3LZcn5czFf6gFwEONzr2aQmkAJYKranEmOx+8sn4Lv3XnA948p6/XaY5J6jCvWYUJ2zvLLQ4kiK4G1LW0pRN8c655t01H8yUqVeKh5CzWLxlUb+k/pHrv3uIzmw6aF8= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1192;5:/AtBZg2iszOo/Cat3muHAig0TIjxCViFVuI5h/o9y9ahfxGQurfBTguZ7X5pvzDE5qK/QiNReCBG4EfiM0KqqYVOPx37LySBpDqj0KVYm70YPvy+6oocxGh6WUwFq1JcKHeTaLlRxSj2iJf2QrxJwCL36tBYW6fbL7vB7jR27+7dFrDBZOHI6aReVgMZIXECbWddjh4cR8uVhfJMl1fofzxDyYzZl1iqJ5dEcYvC3GrIW4DGNj1ohXTXYOs630TtWI8ldpe6vXG6caDJY6eUY0NmiMol4tnh4doea/WXwkWlsAsBuNGoyqnY7vZX0/FxM6t2MbZEXSUGzE8Z0zgEw8nqD9isHtZsmlRKRKKqSEQA4A1l2Tgh0tGMv7HdDl2uKUIhGrjiU5ncUKoZumJHc3qElbV/yvr+GNgmIGcexwXz2FqOPVEU/ZVtZsLb/hHGb4oHb1ZFPNjz8GuRVgRSwVNjY+LGpnRfaJT1Pl9f7MT7Gg1etS15h0b2MPASVzuN;24:4TKX8eZ3czcDTJBCpm2CCejzYJ54xG5jB08rO0cobZ4WnK7an8ylZOw65PuOoQIR6/Fu0ZUTGi/EwwBiIwptE0xuRjLvA241mW5ejD30vdU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1192;7:LnaooVevU4CYGxWzEFuiZsLkyTdPSk3yL9uaU1dsM5XHOO9PpXKEYIp13ET2UzO3W0rlOZAEia98oUmTxO+UEv90MyDHziu2CWE05nnq2R2GOnio7gYiwJmGSoQB8qLAI/U2jzurycBkBe8JMWT5CRTMm+aew2oKhjUAaeI6t2Gz8YNBzsOU+FlhS2mZD8+xq/B0djoqteM8tb7FJ34iJ6xXv6ucPts2AFdHkREF/xTyTOlulVwKYFOXKhvMVuB+o5s0ThNMiVBB92WbxuCIfT55Ttvm4X/8Y6K9wh9aRU+xS4D5C0g7cOeC6WW+Z09AxJXcny6+ruL938pkaNNZgQ== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2017 19:13:58.7190 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[193.47.165.134];Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR05MB1192 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/31/2017 4:32 PM, Johannes Thumshirn wrote: > If a target identifies itself as NVMe 1.3 compliant, try to get the > list of Namespace Identification Descriptors and populate the UUID, > NGUID and EUI64 fileds in the NVMe namespace structure with these > values. > > Signed-off-by: Johannes Thumshirn > --- > drivers/nvme/host/core.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ > drivers/nvme/host/nvme.h | 1 + > 2 files changed, 89 insertions(+) > > diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c > index 7b254be16887..9acbf56c8796 100644 > --- a/drivers/nvme/host/core.c > +++ b/drivers/nvme/host/core.c > @@ -643,6 +643,71 @@ int nvme_identify_ctrl(struct nvme_ctrl *dev, struct nvme_id_ctrl **id) > return error; > } > > +static void nvme_parse_ns_descs(struct nvme_ns *ns, void *ns_nid) > +{ > + struct nvme_ns_nid *cur; > + const u8 *p; > + int pos = 0; > + int len; > + > + p = (u8 *)ns_nid; > + > + for (;;) { > + cur = (struct nvme_ns_nid *)p; > + > + switch (cur->nidl) { > + case 0: > + return; > + case 8: > + case 16: consider using the length defines from instead of 8/16, it's more intuitive code this way. Actually, to be safer, you can check the length inside the second switch/case per case. > + break; > + default: > + dev_warn(ns->ctrl->dev, > + "Target returned bogus Namespace Identification Descriptor length: %d\n", > + cur->nidl); > + return; > + > + } > + > + switch (cur->nidt) { > + case NVME_NIDT_EUI64: > + len = NVME_NIDT_EUI64_LEN; > + memcpy(ns->eui, cur->nid, len); > + break; > + case NVME_NIDT_NGUID: > + len = NVME_NIDT_NGUID_LEN; > + memcpy(ns->nguid, cur->nid, len); > + break; > + case NVME_NIDT_UUID: > + len = NVME_NIDT_UUID_LEN; > + memcpy(ns->uuid, cur->nid, len); > + break; > + default: > + dev_warn(ns->ctrl->dev, > + "Invalid Namespace Identification Descriptor Type: %d\n", > + cur->nidt); > + return; > + } > + > + pos += sizeof(struct nvme_ns_nid) + len; > + if (pos >= SZ_4K) > + return; > + p += pos; > + } > +} > +