mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Linux 5.11 compat: bio_start_io_acct() / bio_end_io_acct()
The generic IO accounting functions have been removed in favor of the bio_start_io_acct() and bio_end_io_acct() functions which provide a better interface. These new functions were introduced in the 5.8 kernels but it wasn't until the 5.11 kernel that the previous generic IO accounting interfaces were removed. This commit updates the blk_generic_*_io_acct() wrappers to provide and interface similar to the updated kernel interface. It's slightly different because for older kernels we need to pass the request queue as well as the bio. Reviewed-by: Rafael Kitover <rkitover@gmail.com> Reviewed-by: Coleman Kane <ckane@colemankane.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #11387 Closes #11390
This commit is contained in:
@@ -523,25 +523,38 @@ blk_queue_discard_secure(struct request_queue *q)
|
||||
*/
|
||||
#define VDEV_HOLDER ((void *)0x2401de7)
|
||||
|
||||
static inline void
|
||||
blk_generic_start_io_acct(struct request_queue *q, int rw,
|
||||
unsigned long sectors, struct hd_struct *part)
|
||||
static inline unsigned long
|
||||
blk_generic_start_io_acct(struct request_queue *q __attribute__((unused)),
|
||||
struct gendisk *disk __attribute__((unused)),
|
||||
int rw __attribute__((unused)), struct bio *bio)
|
||||
{
|
||||
#if defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
||||
generic_start_io_acct(rw, sectors, part);
|
||||
#if defined(HAVE_BIO_IO_ACCT)
|
||||
return (bio_start_io_acct(bio));
|
||||
#elif defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
||||
unsigned long start_time = jiffies;
|
||||
generic_start_io_acct(rw, bio_sectors(bio), &disk->part0);
|
||||
return (start_time);
|
||||
#elif defined(HAVE_GENERIC_IO_ACCT_4ARG)
|
||||
generic_start_io_acct(q, rw, sectors, part);
|
||||
unsigned long start_time = jiffies;
|
||||
generic_start_io_acct(q, rw, bio_sectors(bio), &disk->part0);
|
||||
return (start_time);
|
||||
#else
|
||||
/* Unsupported */
|
||||
return (0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void
|
||||
blk_generic_end_io_acct(struct request_queue *q, int rw,
|
||||
struct hd_struct *part, unsigned long start_time)
|
||||
blk_generic_end_io_acct(struct request_queue *q __attribute__((unused)),
|
||||
struct gendisk *disk __attribute__((unused)),
|
||||
int rw __attribute__((unused)), struct bio *bio, unsigned long start_time)
|
||||
{
|
||||
#if defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
||||
generic_end_io_acct(rw, part, start_time);
|
||||
#if defined(HAVE_BIO_IO_ACCT)
|
||||
bio_end_io_acct(bio, start_time);
|
||||
#elif defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
||||
generic_end_io_acct(rw, &disk->part0, start_time);
|
||||
#elif defined(HAVE_GENERIC_IO_ACCT_4ARG)
|
||||
generic_end_io_acct(q, rw, part, start_time);
|
||||
generic_end_io_acct(q, rw, &disk->part0, start_time);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user