From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27490C43215 for ; Thu, 14 Nov 2019 04:45:08 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 096D6206EC; Thu, 14 Nov 2019 04:45:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sourceforge.net header.i=@sourceforge.net header.b="JXIzfkmB"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sf.net header.i=@sf.net header.b="hj7nwL5a"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="jYGGP/E4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 096D6206EC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1iV70F-0007aF-20; Thu, 14 Nov 2019 04:45:07 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1iV70C-0007Zo-QV for linux-f2fs-devel@lists.sourceforge.net; Thu, 14 Nov 2019 04:45:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=NutTyn7b9kMJh0FH8zEcciebAZ009zXXA7DDoN3p5kY=; b=JXIzfkmBH/OkqpmkWABOMKdxFB g+nawRbBLZrtZdLqzY/8BjStE7qmrKMQiI47uVUiPV+rlA5FzjadPPBvVGpvzsvvC+PmM5LRCEV9V 3/ttBXHlVw7BPNfFVMfpPStJG6oLBVHaHo3Mj6IM3laGTnWOIwY5BjRRNsw1VWpmGFb0=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=NutTyn7b9kMJh0FH8zEcciebAZ009zXXA7DDoN3p5kY=; b=hj7nwL5aFYeb7jcGRBYlk30iwo 1a9cYJf+QnntdNy0oTgMKdikwJ9ldafQv3skZck5tZUi9yedKw4TFQELi7tlXJhR/nEvraPCSQij+ PdRkzNvoniwONA0L9bsP2mNaFIMofdTHRzNbatF9bf8VpJTsahYlPCKKgCVjQKV4k7xY=; Received: from esa3.hgst.iphmx.com ([216.71.153.141]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1iV70B-002ZCm-I8 for linux-f2fs-devel@lists.sourceforge.net; Thu, 14 Nov 2019 04:45:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1573706704; x=1605242704; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HcsZLM1/1NzZknimi453AZzGrTearLQC2PjKExuj228=; b=jYGGP/E4p5dCyny38ByHT8F/rmjFmTVP+KO9YhbLWpL8UjTNFc3hnXN0 Za07HQtPZrkcjtV7W5PPSTc5U0pt5XQ38pFYRW0bnSQ24sMJic5y+cVcm BPbt6aCuKn8XmjKcfGqJg9evck4LDzmG2Y2oWZapB1xE2jQP4sqlVK04M EFTNrf6y0chTHX6OkDIOo/c1eQLx01knMKjNm0dSA1ltu3S2RySQDA3ux lmqfiGOD01LV1Ki/eNAstvpmz9apvq6Jm4w9+PA/NKMNVgwt++V/aA9fJ kgVY6ng8QNZw4Vtrt04s4xLUaT9fMnbF62+THeQ1XrXoNNQgd+lBs04jG A==; IronPort-SDR: OSKkBTBr45VI/QUmzubdZJwtVHDNRfH1XojeqPC/lMoAmRvVAI5cx+Ebva8Ywm0GHOt0zIHeCq XKBh/VE/3FrJL90KG1LQNhRqXjorDPmTDxWhW1V2nwULKDyH4Cp5mBYjc7ytGJv1TDIomUrSSv Y8GOtOc5scz/SMFcIgFP1AArVnzwKczrjMZFB5thH4VInYuf3s0y7YS/kwEppOQnVx0/lvFuPH /3kp/1EcRnsjIukf7ZE8qhJMvYR4yYnZTD6xc0ZOWF69lZHA6oe0bx+T2/FON3Geix3GpT9zFa mcQ= X-IronPort-AV: E=Sophos;i="5.68,302,1569254400"; d="scan'208";a="127411443" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Nov 2019 12:44:59 +0800 IronPort-SDR: 7h4eHczqfkLnlmL6dxJhPegwljI0CQO8u7CI8EaaCB1SV/Vr4B+XQMsCNa3cISEeoxv7LX2jFF H+bGQg9hMJmz0/gLAssW4fjv3a23RuVJyfHzHTf3/U9X/c85KYHRvP820iouy7YsxrdmpzJqkF VGWmqcK8du9Y+HHJ0rgVDFEu5UVO8Zrm00Bn3KXrOg1OUXZalt8MUVbnSy2HTXxYk6RY2sUqdR KVOMSUl4fTlv/fVA0K2gO6mNTzISdGEnFuAsR5M7ePVv8CvZn4QOWJBmiQQaGA0JaDwYemGQT6 utHfXBPmSnxkKA2uAo8snJ4h Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Nov 2019 20:39:58 -0800 IronPort-SDR: 0PRI+8ehhRF4DNOtTflYYT2/Xd2DL4hE88xmqVqQsRzDF8SKDpZi9ilfizWQRnY5MbTk8VEnyq 85H4oqcYIg/j8tOwznrYzUU1YakNhsya8w4Inbn/2oGH4agB3uVGVdDl8u485BlF9HKkJBiyn7 BOVkULda9A4Wyeg66d4zsteHY7CSDREfJAxwjvnmZd2Bsg10W9D3bUm4Qa2JJlWg1KttBiPaNx Or5XsjBLe+oK8Fw2SIALQpHgXetEve7MzCwsXzwEMsSmPo+UfUQ85DC6gNnzExTiRvFvx5pMFM WdM= WDCIronportException: Internal Received: from shindev.dhcp.fujisawa.hgst.com (HELO shindev.fujisawa.hgst.com) ([10.149.53.87]) by uls-op-cesaip01.wdc.com with ESMTP; 13 Nov 2019 20:44:59 -0800 From: Shin'ichiro Kawasaki To: Jaegeuk Kim , Chao Yu , linux-f2fs-devel@lists.sourceforge.net Date: Thu, 14 Nov 2019 13:44:47 +0900 Message-Id: <20191114044454.200461-2-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191114044454.200461-1-shinichiro.kawasaki@wdc.com> References: <20191114044454.200461-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 X-Headers-End: 1iV70B-002ZCm-I8 Subject: [f2fs-dev] [PATCH v7 1/8] libf2fs_zoned: Introduce f2fs_report_zones() helper function X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Damien Le Moal Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net To prepare for write pointer consistency check by fsck, add f2fs_report_zones() helper function which calls REPORT ZONE command to get write pointer status. The function is added to lib/libf2fs_zoned which gathers zoned block device related functions. To check write pointer consistency with f2fs meta data, fsck needs to refer both of reported zone information and f2fs super block structure "f2fs_sb_info". However, libf2fs_zoned does not import f2fs_sb_info. To keep f2fs_sb_info structure out of libf2fs_zoned, provide a callback function in fsck to f2fs_report_zones() and call it for each zone. Add SECTOR_SHIFT definition in include/f2fs_fs.h to avoid a magic number to convert bytes into 512B sectors. Signed-off-by: Shin'ichiro Kawasaki Reviewed-by: Chao Yu Signed-off-by: Jaegeuk Kim --- include/f2fs_fs.h | 5 ++++ lib/libf2fs_zoned.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index a386e61..fe18dff 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -281,6 +281,9 @@ static inline uint64_t bswap_64(uint64_t val) #endif #define PAGE_CACHE_SIZE 4096 #define BITS_PER_BYTE 8 +#ifndef SECTOR_SHIFT +#define SECTOR_SHIFT 9 +#endif #define F2FS_SUPER_MAGIC 0xF2F52010 /* F2FS Magic Number */ #define CP_CHKSUM_OFFSET 4092 #define SB_CHKSUM_OFFSET 3068 @@ -1316,6 +1319,8 @@ blk_zone_cond_str(struct blk_zone *blkz) extern int f2fs_get_zoned_model(int); extern int f2fs_get_zone_blocks(int); +typedef int (report_zones_cb_t)(int i, void *, void *); +extern int f2fs_report_zones(int, report_zones_cb_t *, void *); extern int f2fs_check_zones(int); extern int f2fs_reset_zones(int); diff --git a/lib/libf2fs_zoned.c b/lib/libf2fs_zoned.c index af00b44..8ad4171 100644 --- a/lib/libf2fs_zoned.c +++ b/lib/libf2fs_zoned.c @@ -193,6 +193,59 @@ int f2fs_get_zone_blocks(int i) #define F2FS_REPORT_ZONES_BUFSZ 524288 +int f2fs_report_zones(int j, report_zones_cb_t *report_zones_cb, void *opaque) +{ + struct device_info *dev = c.devices + j; + struct blk_zone_report *rep; + struct blk_zone *blkz; + unsigned int i, n = 0; + u_int64_t total_sectors = (dev->total_sectors * c.sector_size) + >> SECTOR_SHIFT; + u_int64_t sector = 0; + int ret = -1; + + rep = malloc(F2FS_REPORT_ZONES_BUFSZ); + if (!rep) { + ERR_MSG("No memory for report zones\n"); + return -ENOMEM; + } + + while (sector < total_sectors) { + + /* Get zone info */ + rep->sector = sector; + rep->nr_zones = (F2FS_REPORT_ZONES_BUFSZ - sizeof(struct blk_zone_report)) + / sizeof(struct blk_zone); + + ret = ioctl(dev->fd, BLKREPORTZONE, rep); + if (ret != 0) { + ret = -errno; + ERR_MSG("ioctl BLKREPORTZONE failed: errno=%d\n", + errno); + goto out; + } + + if (!rep->nr_zones) { + ret = -EIO; + ERR_MSG("Unexpected ioctl BLKREPORTZONE result\n"); + goto out; + } + + blkz = (struct blk_zone *)(rep + 1); + for (i = 0; i < rep->nr_zones; i++) { + ret = report_zones_cb(n, blkz, opaque); + if (ret) + goto out; + sector = blk_zone_sector(blkz) + blk_zone_length(blkz); + n++; + blkz++; + } + } +out: + free(rep); + return ret; +} + int f2fs_check_zones(int j) { struct device_info *dev = c.devices + j; @@ -372,6 +425,12 @@ out: #else +int f2fs_report_zones(int i, report_zones_cb_t *report_zones_cb, void *opaque) +{ + ERR_MSG("%d: Unsupported zoned block device\n", i); + return -1; +} + int f2fs_get_zoned_model(int i) { struct device_info *dev = c.devices + i; -- 2.23.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel