From: Joseph Qi <joseph.qi@linux.alibaba.com>
To: Jan Kara <jack@suse.cz>, linux-block@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Christoph Hellwig <hch@infradead.org>,
ocfs2-devel@oss.oracle.com
Subject: Re: [PATCH 28/32] ocfs2: Convert to use blkdev_get_handle_by_dev()
Date: Wed, 5 Jul 2023 18:55:59 +0800 [thread overview]
Message-ID: <92fd11f8-2d52-13d3-e3c4-3a263f10ff96@linux.alibaba.com> (raw)
In-Reply-To: <20230704122224.16257-28-jack@suse.cz>
On 7/4/23 8:21 PM, Jan Kara wrote:
> Convert ocfs2 heartbeat code to use blkdev_get_handle_by_dev() and pass
> the handle around.
>
> CC: Joseph Qi <joseph.qi@linux.alibaba.com>
> CC: ocfs2-devel@oss.oracle.com
> Signed-off-by: Jan Kara <jack@suse.cz>
Looks good.
Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
> ---
> fs/ocfs2/cluster/heartbeat.c | 82 ++++++++++++++++++++----------------
> 1 file changed, 46 insertions(+), 36 deletions(-)
>
> diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
> index 21472e3ed182..5509e7fb98db 100644
> --- a/fs/ocfs2/cluster/heartbeat.c
> +++ b/fs/ocfs2/cluster/heartbeat.c
> @@ -213,7 +213,7 @@ struct o2hb_region {
> unsigned int hr_num_pages;
>
> struct page **hr_slot_data;
> - struct block_device *hr_bdev;
> + struct bdev_handle *hr_bdev_handle;
> struct o2hb_disk_slot *hr_slots;
>
> /* live node map of this region */
> @@ -261,6 +261,11 @@ struct o2hb_region {
> int hr_last_hb_status;
> };
>
> +static inline struct block_device *reg_bdev(struct o2hb_region *reg)
> +{
> + return reg->hr_bdev_handle ? reg->hr_bdev_handle->bdev : NULL;
> +}
> +
> struct o2hb_bio_wait_ctxt {
> atomic_t wc_num_reqs;
> struct completion wc_io_complete;
> @@ -286,7 +291,7 @@ static void o2hb_write_timeout(struct work_struct *work)
> hr_write_timeout_work.work);
>
> mlog(ML_ERROR, "Heartbeat write timeout to device %pg after %u "
> - "milliseconds\n", reg->hr_bdev,
> + "milliseconds\n", reg_bdev(reg),
> jiffies_to_msecs(jiffies - reg->hr_last_timeout_start));
>
> if (o2hb_global_heartbeat_active()) {
> @@ -383,7 +388,7 @@ static void o2hb_nego_timeout(struct work_struct *work)
> if (!test_bit(master_node, reg->hr_nego_node_bitmap)) {
> printk(KERN_NOTICE "o2hb: node %d hb write hung for %ds on region %s (%pg).\n",
> o2nm_this_node(), O2HB_NEGO_TIMEOUT_MS/1000,
> - config_item_name(®->hr_item), reg->hr_bdev);
> + config_item_name(®->hr_item), reg_bdev(reg));
> set_bit(master_node, reg->hr_nego_node_bitmap);
> }
> if (!bitmap_equal(reg->hr_nego_node_bitmap, live_node_bitmap,
> @@ -398,7 +403,8 @@ static void o2hb_nego_timeout(struct work_struct *work)
> }
>
> printk(KERN_NOTICE "o2hb: all nodes hb write hung, maybe region %s (%pg) is down.\n",
> - config_item_name(®->hr_item), reg->hr_bdev);
> + config_item_name(®->hr_item),
> + reg_bdev(reg));
> /* approve negotiate timeout request. */
> o2hb_arm_timeout(reg);
>
> @@ -419,7 +425,7 @@ static void o2hb_nego_timeout(struct work_struct *work)
> /* negotiate timeout with master node. */
> printk(KERN_NOTICE "o2hb: node %d hb write hung for %ds on region %s (%pg), negotiate timeout with node %d.\n",
> o2nm_this_node(), O2HB_NEGO_TIMEOUT_MS/1000, config_item_name(®->hr_item),
> - reg->hr_bdev, master_node);
> + reg_bdev(reg), master_node);
> ret = o2hb_send_nego_msg(reg->hr_key, O2HB_NEGO_TIMEOUT_MSG,
> master_node);
> if (ret)
> @@ -436,7 +442,8 @@ static int o2hb_nego_timeout_handler(struct o2net_msg *msg, u32 len, void *data,
>
> nego_msg = (struct o2hb_nego_msg *)msg->buf;
> printk(KERN_NOTICE "o2hb: receive negotiate timeout message from node %d on region %s (%pg).\n",
> - nego_msg->node_num, config_item_name(®->hr_item), reg->hr_bdev);
> + nego_msg->node_num, config_item_name(®->hr_item),
> + reg_bdev(reg));
> if (nego_msg->node_num < O2NM_MAX_NODES)
> set_bit(nego_msg->node_num, reg->hr_nego_node_bitmap);
> else
> @@ -451,7 +458,7 @@ static int o2hb_nego_approve_handler(struct o2net_msg *msg, u32 len, void *data,
> struct o2hb_region *reg = data;
>
> printk(KERN_NOTICE "o2hb: negotiate timeout approved by master node on region %s (%pg).\n",
> - config_item_name(®->hr_item), reg->hr_bdev);
> + config_item_name(®->hr_item), reg_bdev(reg));
> o2hb_arm_timeout(reg);
> return 0;
> }
> @@ -515,7 +522,7 @@ static struct bio *o2hb_setup_one_bio(struct o2hb_region *reg,
> * GFP_KERNEL that the local node can get fenced. It would be
> * nicest if we could pre-allocate these bios and avoid this
> * all together. */
> - bio = bio_alloc(reg->hr_bdev, 16, opf, GFP_ATOMIC);
> + bio = bio_alloc(reg_bdev(reg), 16, opf, GFP_ATOMIC);
> if (!bio) {
> mlog(ML_ERROR, "Could not alloc slots BIO!\n");
> bio = ERR_PTR(-ENOMEM);
> @@ -687,7 +694,7 @@ static int o2hb_check_own_slot(struct o2hb_region *reg)
> errstr = ERRSTR3;
>
> mlog(ML_ERROR, "%s (%pg): expected(%u:0x%llx, 0x%llx), "
> - "ondisk(%u:0x%llx, 0x%llx)\n", errstr, reg->hr_bdev,
> + "ondisk(%u:0x%llx, 0x%llx)\n", errstr, reg_bdev(reg),
> slot->ds_node_num, (unsigned long long)slot->ds_last_generation,
> (unsigned long long)slot->ds_last_time, hb_block->hb_node,
> (unsigned long long)le64_to_cpu(hb_block->hb_generation),
> @@ -861,7 +868,7 @@ static void o2hb_set_quorum_device(struct o2hb_region *reg)
> goto unlock;
>
> printk(KERN_NOTICE "o2hb: Region %s (%pg) is now a quorum device\n",
> - config_item_name(®->hr_item), reg->hr_bdev);
> + config_item_name(®->hr_item), reg_bdev(reg));
>
> set_bit(reg->hr_region_num, o2hb_quorum_region_bitmap);
>
> @@ -920,7 +927,7 @@ static int o2hb_check_slot(struct o2hb_region *reg,
> * consider it a transient miss but don't populate any
> * other values as they may be junk. */
> mlog(ML_ERROR, "Node %d has written a bad crc to %pg\n",
> - slot->ds_node_num, reg->hr_bdev);
> + slot->ds_node_num, reg_bdev(reg));
> o2hb_dump_slot(hb_block);
>
> slot->ds_equal_samples++;
> @@ -1003,8 +1010,8 @@ static int o2hb_check_slot(struct o2hb_region *reg,
> "of %u ms, but our count is %u ms.\n"
> "Please double check your configuration values "
> "for 'O2CB_HEARTBEAT_THRESHOLD'\n",
> - slot->ds_node_num, reg->hr_bdev, slot_dead_ms,
> - dead_ms);
> + slot->ds_node_num, reg_bdev(reg),
> + slot_dead_ms, dead_ms);
> }
> goto out;
> }
> @@ -1143,7 +1150,7 @@ static int o2hb_do_disk_heartbeat(struct o2hb_region *reg)
> * can't be sure that the new block ever made it to
> * disk */
> mlog(ML_ERROR, "Write error %d on device \"%pg\"\n",
> - write_wc.wc_error, reg->hr_bdev);
> + write_wc.wc_error, reg_bdev(reg));
> ret = write_wc.wc_error;
> goto bail;
> }
> @@ -1169,7 +1176,7 @@ static int o2hb_do_disk_heartbeat(struct o2hb_region *reg)
> printk(KERN_NOTICE "o2hb: Unable to stabilize "
> "heartbeat on region %s (%pg)\n",
> config_item_name(®->hr_item),
> - reg->hr_bdev);
> + reg_bdev(reg));
> atomic_set(®->hr_steady_iterations, 0);
> reg->hr_aborted_start = 1;
> wake_up(&o2hb_steady_queue);
> @@ -1489,7 +1496,7 @@ static void o2hb_region_release(struct config_item *item)
> struct page *page;
> struct o2hb_region *reg = to_o2hb_region(item);
>
> - mlog(ML_HEARTBEAT, "hb region release (%pg)\n", reg->hr_bdev);
> + mlog(ML_HEARTBEAT, "hb region release (%pg)\n", reg_bdev(reg));
>
> kfree(reg->hr_tmp_block);
>
> @@ -1502,8 +1509,8 @@ static void o2hb_region_release(struct config_item *item)
> kfree(reg->hr_slot_data);
> }
>
> - if (reg->hr_bdev)
> - blkdev_put(reg->hr_bdev, NULL);
> + if (reg->hr_bdev_handle)
> + blkdev_handle_put(reg->hr_bdev_handle);
>
> kfree(reg->hr_slots);
>
> @@ -1562,7 +1569,7 @@ static ssize_t o2hb_region_block_bytes_store(struct config_item *item,
> unsigned long block_bytes;
> unsigned int block_bits;
>
> - if (reg->hr_bdev)
> + if (reg->hr_bdev_handle)
> return -EINVAL;
>
> status = o2hb_read_block_input(reg, page, &block_bytes,
> @@ -1591,7 +1598,7 @@ static ssize_t o2hb_region_start_block_store(struct config_item *item,
> char *p = (char *)page;
> ssize_t ret;
>
> - if (reg->hr_bdev)
> + if (reg->hr_bdev_handle)
> return -EINVAL;
>
> ret = kstrtoull(p, 0, &tmp);
> @@ -1616,7 +1623,7 @@ static ssize_t o2hb_region_blocks_store(struct config_item *item,
> unsigned long tmp;
> char *p = (char *)page;
>
> - if (reg->hr_bdev)
> + if (reg->hr_bdev_handle)
> return -EINVAL;
>
> tmp = simple_strtoul(p, &p, 0);
> @@ -1635,8 +1642,8 @@ static ssize_t o2hb_region_dev_show(struct config_item *item, char *page)
> {
> unsigned int ret = 0;
>
> - if (to_o2hb_region(item)->hr_bdev)
> - ret = sprintf(page, "%pg\n", to_o2hb_region(item)->hr_bdev);
> + if (to_o2hb_region(item)->hr_bdev_handle)
> + ret = sprintf(page, "%pg\n", reg_bdev(to_o2hb_region(item)));
>
> return ret;
> }
> @@ -1745,7 +1752,10 @@ static int o2hb_populate_slot_data(struct o2hb_region *reg)
> return ret;
> }
>
> -/* this is acting as commit; we set up all of hr_bdev and hr_task or nothing */
> +/*
> + * this is acting as commit; we set up all of hr_bdev_handle and hr_task or
> + * nothing
> + */
> static ssize_t o2hb_region_dev_store(struct config_item *item,
> const char *page,
> size_t count)
> @@ -1759,7 +1769,7 @@ static ssize_t o2hb_region_dev_store(struct config_item *item,
> ssize_t ret = -EINVAL;
> int live_threshold;
>
> - if (reg->hr_bdev)
> + if (reg->hr_bdev_handle)
> goto out;
>
> /* We can't heartbeat without having had our node number
> @@ -1785,16 +1795,16 @@ static ssize_t o2hb_region_dev_store(struct config_item *item,
> if (!S_ISBLK(f.file->f_mapping->host->i_mode))
> goto out2;
>
> - reg->hr_bdev = blkdev_get_by_dev(f.file->f_mapping->host->i_rdev,
> - BLK_OPEN_WRITE | BLK_OPEN_READ, NULL,
> - NULL);
> - if (IS_ERR(reg->hr_bdev)) {
> - ret = PTR_ERR(reg->hr_bdev);
> - reg->hr_bdev = NULL;
> + reg->hr_bdev_handle = blkdev_get_handle_by_dev(
> + f.file->f_mapping->host->i_rdev,
> + BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
> + if (IS_ERR(reg->hr_bdev_handle)) {
> + ret = PTR_ERR(reg->hr_bdev_handle);
> + reg->hr_bdev_handle = NULL;
> goto out2;
> }
>
> - sectsize = bdev_logical_block_size(reg->hr_bdev);
> + sectsize = bdev_logical_block_size(reg_bdev(reg));
> if (sectsize != reg->hr_block_bytes) {
> mlog(ML_ERROR,
> "blocksize %u incorrect for device, expected %d",
> @@ -1890,12 +1900,12 @@ static ssize_t o2hb_region_dev_store(struct config_item *item,
>
> if (hb_task && o2hb_global_heartbeat_active())
> printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%pg)\n",
> - config_item_name(®->hr_item), reg->hr_bdev);
> + config_item_name(®->hr_item), reg_bdev(reg));
>
> out3:
> if (ret < 0) {
> - blkdev_put(reg->hr_bdev, NULL);
> - reg->hr_bdev = NULL;
> + blkdev_handle_put(reg->hr_bdev_handle);
> + reg->hr_bdev_handle = NULL;
> }
> out2:
> fdput(f);
> @@ -2085,7 +2095,7 @@ static void o2hb_heartbeat_group_drop_item(struct config_group *group,
> printk(KERN_NOTICE "o2hb: Heartbeat %s on region %s (%pg)\n",
> ((atomic_read(®->hr_steady_iterations) == 0) ?
> "stopped" : "start aborted"), config_item_name(item),
> - reg->hr_bdev);
> + reg_bdev(reg));
> }
>
> /*
next prev parent reply other threads:[~2023-07-05 10:56 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-04 12:21 [PATCH RFC 0/32] block: Make blkdev_get_by_*() return handle Jan Kara
2023-07-04 12:21 ` [PATCH 01/32] block: Provide blkdev_get_handle_* functions Jan Kara
2023-07-04 12:43 ` Matthew Wilcox
2023-07-04 13:03 ` Jan Kara
2023-07-04 14:06 ` Bart Van Assche
2023-07-04 16:14 ` Matthew Wilcox
2023-07-05 15:19 ` Bart Van Assche
2023-07-05 16:12 ` Jan Kara
2023-07-04 16:28 ` Keith Busch
2023-07-05 10:21 ` Jan Kara
2023-07-06 15:38 ` Christoph Hellwig
2023-07-06 16:14 ` Jan Kara
2023-07-07 11:28 ` Christoph Hellwig
2023-07-07 12:24 ` Jan Kara
2023-07-12 16:06 ` Haris Iqbal
2023-07-31 10:50 ` Jan Kara
2023-07-31 11:13 ` Christoph Hellwig
2023-07-04 12:21 ` [PATCH 02/32] block: Use file->f_flags for determining exclusive opens in file_to_blk_mode() Jan Kara
2023-07-06 15:35 ` Christoph Hellwig
2023-07-06 16:35 ` Jan Kara
2023-07-07 11:29 ` Christoph Hellwig
2023-07-04 12:21 ` [PATCH 03/32] block: Use blkdev_get_handle_by_dev() in blkdev_open() Jan Kara
2023-07-05 5:05 ` Kanchan Joshi
2023-07-05 10:17 ` Jan Kara
2023-07-04 12:21 ` [PATCH 04/32] block: Use blkdev_get_handle_by_dev() in disk_scan_partitions() and blkdev_bszset() Jan Kara
2023-07-04 12:21 ` [PATCH 05/32] drdb: Convert to use blkdev_get_handle_by_path() Jan Kara
2023-07-04 12:21 ` [PATCH 06/32] pktcdvd: Convert to blkdev_get_handle_by_dev() Jan Kara
2023-07-04 12:21 ` [PATCH 07/32] rnbd-srv: Convert to use blkdev_get_handle_by_path() Jan Kara
2023-07-12 15:54 ` Haris Iqbal
2023-07-04 12:21 ` [PATCH 08/32] xen/blkback: Convert to blkdev_get_handle_by_dev() Jan Kara
2023-07-04 12:21 ` [PATCH 09/32] zram: Convert to use blkdev_get_handle_by_dev() Jan Kara
2023-07-05 0:52 ` Sergey Senozhatsky
2023-07-04 12:21 ` [PATCH 10/32] bcache: Convert to blkdev_get_handle_by_path() Jan Kara
2023-07-04 13:06 ` Coly Li
2023-07-04 12:21 ` [PATCH 11/32] dm: Convert to blkdev_get_handle_by_dev() Jan Kara
2023-07-04 12:21 ` [PATCH 12/32] md: " Jan Kara
2023-07-04 12:21 ` [PATCH 13/32] mtd: block2mtd: Convert to blkdev_get_handle_by_dev/path() Jan Kara
2023-07-04 12:21 ` [PATCH 14/32] nvmet: Convert to blkdev_get_handle_by_path() Jan Kara
2023-07-04 12:21 ` [PATCH 15/32] s390/dasd: " Jan Kara
2023-07-04 12:21 ` [PATCH 16/32] scsi: target: " Jan Kara
2023-07-04 12:21 ` [PATCH 17/32] PM: hibernate: Convert to blkdev_get_handle_by_dev() Jan Kara
2023-07-04 12:21 ` [PATCH 18/32] PM: hibernate: Drop unused snapshot_test argument Jan Kara
2023-07-04 12:21 ` [PATCH 19/32] mm/swap: Convert to use blkdev_get_handle_by_dev() Jan Kara
2023-07-04 12:21 ` [PATCH 20/32] fs: Convert to blkdev_get_handle_by_path() Jan Kara
2023-07-04 12:21 ` [PATCH 21/32] btrfs: " Jan Kara
2023-07-04 12:21 ` [PATCH 22/32] erofs: Convert to use blkdev_get_handle_by_path() Jan Kara
2023-07-06 15:16 ` Gao Xiang
2023-07-04 12:21 ` [PATCH 23/32] ext4: Convert to blkdev_get_handle_by_dev() Jan Kara
2023-07-04 12:21 ` [PATCH 24/32] f2fs: Convert to blkdev_get_handle_by_dev/path() Jan Kara
2023-07-04 12:21 ` [PATCH 25/32] jfs: Convert to blkdev_get_handle_by_dev() Jan Kara
2023-07-05 15:16 ` Dave Kleikamp
2023-07-04 12:21 ` [PATCH 26/32] nfs/blocklayout: Convert to use blkdev_get_handle_by_dev/path() Jan Kara
2023-07-04 12:21 ` [PATCH 27/32] nilfs2: Convert to use blkdev_get_handle_by_path() Jan Kara
2023-07-21 5:22 ` Ryusuke Konishi
2023-07-04 12:21 ` [PATCH 28/32] ocfs2: Convert to use blkdev_get_handle_by_dev() Jan Kara
2023-07-05 10:55 ` Joseph Qi [this message]
2023-07-04 12:21 ` [PATCH 29/32] reiserfs: Convert to blkdev_get_handle_by_dev/path() Jan Kara
2023-07-04 12:21 ` [PATCH 30/32] xfs: Convert to blkdev_get_handle_by_path() Jan Kara
2023-07-04 12:21 ` [PATCH 31/32] block: Remove blkdev_get_by_*() functions Jan Kara
2023-07-04 12:21 ` [PATCH 32/32] block: Rename blkdev_get_handle_by_*() and blkdev_handle_put() Jan Kara
2023-07-06 14:54 ` [PATCH RFC 0/32] block: Make blkdev_get_by_*() return handle Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=92fd11f8-2d52-13d3-e3c4-3a263f10ff96@linux.alibaba.com \
--to=joseph.qi@linux.alibaba.com \
--cc=axboe@kernel.dk \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=ocfs2-devel@oss.oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).