From: Stefan Haberland <sth@linux.ibm.com>
To: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-s390@vger.kernel.org, jack@suse.cz, hch@lst.de,
brauner@kernel.org, axboe@kernel.dk,
linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org,
yi.zhang@huawei.com, yangerkun@huawei.com, yukuai3@huawei.com,
Yu Kuai <yukuai1@huaweicloud.com>,
Eduard Shishkin <edward6@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Jan Hoeppner <hoeppner@linux.ibm.com>
Subject: Re: [PATCH vfs.all 15/26] s390/dasd: use bdev api in dasd_format()
Date: Mon, 29 Apr 2024 16:41:19 +0200 [thread overview]
Message-ID: <dc4325fb-d723-4d9f-adb7-7ee65a195231@linux.ibm.com> (raw)
In-Reply-To: <20240428232349.GY2118490@ZenIV>
Am 29.04.24 um 01:23 schrieb Al Viro:
> On Sun, Apr 28, 2024 at 07:58:23PM +0100, Al Viro wrote:
>> On Wed, Apr 17, 2024 at 02:47:14PM +0200, Stefan Haberland wrote:
>>
>>> set_blocksize() does basically also set i_blkbits like it was before.
>>> The dasd_format ioctl does only work on a disabled device. To achieve this
>>> all partitions need to be unmounted.
>>> The tooling also refuses to work on disks actually in use.
>>>
>>> So there should be no page cache to evict.
>> You mean this?
>> if (base->state != DASD_STATE_BASIC) {
>> pr_warn("%s: The DASD cannot be formatted while it is enabled\n",
>> dev_name(&base->cdev->dev));
>> return -EBUSY;
>> }
>>
>> OK, but what would prevent dasd_ioctl_disable() from working while
>> disk is in use? And I don't see anything that would evict the
>> page cache in dasd_ioctl_disable() either, actually...
>>
>> What am I missing here?
Thank you for your input.
Let me provide some more insides how it is intended to work.
Maybe there is something we should improve.
This whole code is basically intended to be used by the dasdfmt tool.
For the dasdfmt tool and the dasd_format ioctl we are talking about DASD
ECKD devices.
An important note: for those devices a partition has to be used to access
the disk because the first tracks of the disks are not safe to store user
data. A partition has to be created by fdasd.
A disk in use has the state DASD_STATE_ONLINE.
To format a device the dasdfmt tool has to be called, it does the
following:
The dasdfmt tool checks if the disk is actually in use and refuses to
work on an 'in use' DASD.
So for example a partition that was in use has to be unmounted first.
Afterwards it does the following calls:
BIODASDDISABLE
- to disable the device and prevent further usage
- sets the disk in state DASD_STATE_BASIC
BIODASDFMT
- does the actual formatting
- checks if the disk is in state DASD_STATE_BASIC (if BIODASDDISABLE was
called before)
- this ioctl is usually called multiple times to format smaller parts of
the disk each time
- in the first call to this ioctl the first track (track 0) is
invalidated (basically wiped out) and format_data_t.intensity equals
DASD_FMT_INT_INVAL
- the last step is to finally format the first track to indicate a
successful formatting of the whole disk
BIODASDENABLE
- to enable the disk again for general usage
- sets the disk to state DASD_STATE_ONLINE again
- NOTE: a disabled device refuses an open call, so the tooling needs to
keep the file descriptor open.
So the assumption in this processing is that a possibly used page cache is
evicted when removing the partition from actual usage (e.g. unmounting, ..).
While writing this I get to the point that it might not be the best idea to
rely on proper tool handling only and it might be a good idea to check for
an open count in BIODASDDISABLE as well so that the ioctls itself are safe
to use. (While it does not make a lot sense to use them alone.)
My assumption was that this is already done but obviously it isn't.
> BTW, you are updating block size according to new device size, before
> rc = base->discipline->format_device(base, fdata, 1);
> if (rc == -EAGAIN)
> rc = base->discipline->format_device(base, fdata, 0);
> Unless something very unidiomatic is going on, this attempt to
> format might fail...
This is true. I guess the idea here was that the actual formatting of
track 0 is done last after the whole disk was successfully formatted and
everything went fine.
But actually also the invalidation of the first track would do this here.
So we should not only move this after the format_device call but we should
also add a check for DASD_FMT_INT_INVAL which is the first step in the
whole formatting.
My current conclusion would be that this patch itself is fine as is but I
should submit patches later to address the findings in this discussion.
next prev parent reply other threads:[~2024-04-29 14:46 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-06 9:09 [PATCH vfs.all 00/26] fs & block: remove bdev->bd_inode Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 01/26] block: move two helpers into bdev.c Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 02/26] block: remove sync_blockdev_nowait() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 03/26] block: remove sync_blockdev_range() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 04/26] block: prevent direct access of bd_inode Yu Kuai
2024-04-07 2:22 ` Al Viro
2024-04-07 2:37 ` Yu Kuai
2024-04-11 11:12 ` Christian Brauner
2024-04-06 9:09 ` [PATCH vfs.all 05/26] block: add a helper bdev_read_folio() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 06/26] bcachefs: remove dead function bdev_sectors() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 07/26] cramfs: prevent direct access of bd_inode Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 08/26] erofs: " Yu Kuai
2024-04-07 4:05 ` Al Viro
2024-04-07 4:08 ` Al Viro
2024-04-11 16:13 ` Gao Xiang
2024-04-12 1:14 ` Yu Kuai
2024-04-25 19:56 ` Al Viro
2024-04-25 19:57 ` [PATCH 1/6] erofs: switch erofs_bread() to passing offset instead of block number Al Viro
2024-04-29 3:01 ` Gao Xiang
2024-04-25 19:58 ` [PATCH 2/6] erofs_buf: store address_space instead of inode Al Viro
2024-04-29 3:01 ` Gao Xiang
2024-04-25 19:58 ` erofs: mechanically convert erofs_read_metabuf() to offsets Al Viro
2024-04-25 19:59 ` [PATCH 4/6] erofs: don't align offset for erofs_read_metabuf() (simple cases) Al Viro
2024-04-25 19:59 ` [PATCH 5/6] erofs: don't round offset down for erofs_read_metabuf() Al Viro
2024-04-25 20:00 ` [PATCH 6/6] z_erofs_pcluster_begin(): don't bother with rounding position down Al Viro
2024-04-26 5:32 ` Gao Xiang
2024-05-03 4:15 ` Al Viro
2024-05-03 13:01 ` Gao Xiang
2024-05-17 2:24 ` Gao Xiang
2024-04-25 20:08 ` [PATCH vfs.all 08/26] erofs: prevent direct access of bd_inode Al Viro
2024-04-25 21:56 ` Gao Xiang
2024-04-25 22:28 ` Al Viro
2024-04-25 23:11 ` Gao Xiang
2024-04-25 23:22 ` Gao Xiang
2024-04-06 9:09 ` [PATCH vfs.all 09/26] nilfs2: " Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 10/26] gfs2: " Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 11/26] btrfs: " Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 12/26] ext4: remove block_device_ejected() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 13/26] ext4: prevent direct access of bd_inode Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 14/26] jbd2: " Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 15/26] s390/dasd: use bdev api in dasd_format() Yu Kuai
2024-04-16 1:35 ` Al Viro
2024-04-16 8:47 ` Alexander Gordeev
2024-04-17 12:47 ` Stefan Haberland
2024-04-28 18:58 ` Al Viro
2024-04-28 23:23 ` Al Viro
2024-04-29 14:41 ` Stefan Haberland [this message]
2024-04-30 0:30 ` Al Viro
2024-04-30 11:35 ` Stefan Haberland
2024-04-06 9:09 ` [PATCH vfs.all 16/26] bcache: prevent direct access of bd_inode Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 17/26] block2mtd: " Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 18/26] scsi: use bdev helper in scsi_bios_ptable() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 19/26] dm-vdo: convert to use bdev_file Yu Kuai
2024-04-10 10:56 ` Jan Kara
2024-04-10 17:26 ` Matthew Sakai
2024-04-10 17:40 ` Al Viro
2024-04-10 18:59 ` Matthew Sakai
2024-04-11 11:12 ` Christian Brauner
2024-04-06 9:09 ` [PATCH vfs.all 20/26] block: factor out a helper init_bdev_file() Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 21/26] block: fix module reference leakage from bdev_open_by_dev error path Yu Kuai
2024-04-11 9:16 ` (subset) " Christian Brauner
2024-04-06 9:09 ` [PATCH vfs.all 22/26] block: stash a bdev_file to read/write raw blcok_device Yu Kuai
2024-04-06 19:42 ` Al Viro
2024-04-06 20:29 ` Al Viro
2024-04-07 1:18 ` Yu Kuai
2024-04-07 1:51 ` Al Viro
2024-04-07 2:34 ` Yu Kuai
2024-04-07 3:06 ` Al Viro
2024-04-07 3:21 ` Yu Kuai
2024-04-07 4:57 ` Al Viro
2024-04-07 5:11 ` Al Viro
2024-04-07 5:21 ` Al Viro
2024-04-11 15:22 ` Matthew Wilcox
2024-04-09 4:26 ` Al Viro
2024-04-09 4:53 ` Al Viro
2024-04-09 6:22 ` Yu Kuai
2024-04-10 10:59 ` Jan Kara
2024-04-10 22:34 ` Al Viro
2024-04-11 11:56 ` Christian Brauner
2024-04-11 14:04 ` Al Viro
2024-04-11 14:49 ` Al Viro
2024-04-11 14:53 ` [PATCH 01/11] block_device: add a pointer to struct address_space (page cache of bdev) Al Viro
2024-04-11 14:53 ` [PATCH 02/11] use ->bd_mapping instead of ->bd_inode->i_mapping Al Viro
2024-04-11 14:53 ` [PATCH 03/11] grow_dev_folio(): we only want ->bd_inode->i_mapping there Al Viro
2024-04-11 14:59 ` Matthew Wilcox
2024-04-11 14:53 ` [PATCH 04/11] gfs2: more obvious initializations of mapping->host Al Viro
2024-04-11 14:53 ` [PATCH 05/11] blkdev_write_iter(): saner way to get inode and bdev Al Viro
2024-04-11 14:53 ` [PATCH 06/11] blk_ioctl_{discard,zeroout}(): we only want ->bd_inode->i_mapping here Al Viro
2024-04-11 14:53 ` [PATCH 07/11] ext4: remove block_device_ejected() Al Viro
2024-04-11 14:53 ` [PATCH 08/11] block: move two helpers into bdev.c Al Viro
2024-04-11 14:53 ` [PATCH 09/11] dm-vdo: use bdev_nr_bytes(bdev) instead of i_size_read(bdev->bd_inode) Al Viro
2024-04-11 18:04 ` Matthew Sakai
2024-04-11 14:53 ` [PATCH 10/11] bcachefs: remove dead function bdev_sectors() Al Viro
2024-04-11 14:53 ` [PATCH 11/11] block2mtd: prevent direct access of bd_inode Al Viro
2024-04-17 11:05 ` [PATCH 01/11] block_device: add a pointer to struct address_space (page cache of bdev) Christian Brauner
2024-04-12 1:38 ` [PATCH vfs.all 22/26] block: stash a bdev_file to read/write raw blcok_device Yu Kuai
2024-04-12 2:59 ` Al Viro
2024-04-12 4:41 ` Al Viro
2024-04-12 7:13 ` Al Viro
2024-04-12 9:21 ` Christian Brauner
2024-04-12 11:29 ` Al Viro
2024-04-13 15:25 ` Christian Brauner
2024-04-15 20:45 ` Al Viro
2024-04-16 6:32 ` Al Viro
2024-04-17 4:35 ` [PATCH][RFC] set_blocksize() in pktcdvd (was Re: [PATCH vfs.all 22/26] block: stash a bdev_file to read/write raw blcok_device) Al Viro
2024-04-17 13:43 ` [PATCH vfs.all 22/26] block: stash a bdev_file to read/write raw blcok_device Jan Kara
2024-04-17 15:23 ` Al Viro
2024-04-17 20:45 ` [RFC] set_blocksize() in kernel/power/swap.c (was Re: [PATCH vfs.all 22/26] block: stash a bdev_file to read/write raw blcok_device) Al Viro
2024-04-09 9:00 ` [PATCH vfs.all 22/26] block: stash a bdev_file to read/write raw blcok_device Christian Brauner
2024-04-09 10:23 ` Christian Brauner
2024-04-09 11:53 ` Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 23/26] iomap: add helpers helpers to get and set bdev Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 24/26] iomap: convert to use bdev_file Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 25/26] buffer: add helpers to get and set bdev Yu Kuai
2024-04-06 9:09 ` [PATCH vfs.all 26/26] buffer: convert to use bdev_file Yu Kuai
2024-04-07 2:20 ` [PATCH vfs.all 00/26] fs & block: remove bdev->bd_inode Yu Kuai
2024-04-08 14:05 ` Jan Kara
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=dc4325fb-d723-4d9f-adb7-7ee65a195231@linux.ibm.com \
--to=sth@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=edward6@linux.ibm.com \
--cc=hch@lst.de \
--cc=hoeppner@linux.ibm.com \
--cc=jack@suse.cz \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=yangerkun@huawei.com \
--cc=yi.zhang@huawei.com \
--cc=yukuai1@huaweicloud.com \
--cc=yukuai3@huawei.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).