From 8699ce4eef099396c57053b96ae97baa0d90cadc Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Thu, 9 Jun 2022 08:00:40 +0200 Subject: [PATCH] sd: remove sd_dif.c Move the one remaining function into sd.c, and use IS_ENABLED to call it compile time conditional instead of using ifdefs. Signed-off-by: Christoph Hellwig --- drivers/scsi/Makefile | 1 - drivers/scsi/sd.c | 67 +++++++++++++++++++++++++++++++++-- drivers/scsi/sd.h | 12 ------- drivers/scsi/sd_dif.c | 81 ------------------------------------------- 4 files changed, 64 insertions(+), 97 deletions(-) delete mode 100644 drivers/scsi/sd_dif.c diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile index 2ad3bc052531..4fbacdd4a867 100644 --- a/drivers/scsi/Makefile +++ b/drivers/scsi/Makefile @@ -172,7 +172,6 @@ scsi_mod-$(CONFIG_BLK_DEV_BSG) += scsi_bsg.o hv_storvsc-y := storvsc_drv.o sd_mod-objs := sd.o -sd_mod-$(CONFIG_BLK_DEV_INTEGRITY) += sd_dif.o sd_mod-$(CONFIG_BLK_DEV_ZONED) += sd_zbc.o sr_mod-objs := sr.o sr_ioctl.o sr_vendor.o diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 9011aa235057..be8751f8f57a 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -1,11 +1,13 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * sd.c Copyright (C) 1992 Drew Eckhardt - * Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale + * Copyright (C) 1992 Drew Eckhardt + * Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale + * Copyright (C) 2007, 2008 Oracle Corporation * * Linux scsi disk driver * Initial versions: Drew Eckhardt * Subsequent revisions: Eric Youngdale + * T10-PI Support written by: Martin K. Petersen * Modification history: * - Drew Eckhardt original * - Eric Youngdale add scatter-gather, multiple @@ -2188,6 +2190,64 @@ static int sd_read_protection_type(struct scsi_disk *sdkp, unsigned char *buffer return 0; } +/* + * Configure exchange of protection information between OS and HBA. + */ +static void sd_dif_config_host(struct scsi_disk *sdkp) +{ + struct scsi_device *sdp = sdkp->device; + struct gendisk *disk = sdkp->disk; + u8 type = sdkp->protection_type; + struct blk_integrity bi; + int dif, dix; + + dif = scsi_host_dif_capable(sdp->host, type); + dix = scsi_host_dix_capable(sdp->host, type); + + if (!dix && scsi_host_dix_capable(sdp->host, 0)) { + dif = 0; dix = 1; + } + + if (!dix) + return; + + memset(&bi, 0, sizeof(bi)); + + /* Enable DMA of protection information */ + if (scsi_host_get_guard(sdkp->device->host) & SHOST_DIX_GUARD_IP) { + if (type == T10_PI_TYPE3_PROTECTION) + bi.profile = &t10_pi_type3_ip; + else + bi.profile = &t10_pi_type1_ip; + + bi.flags |= BLK_INTEGRITY_IP_CHECKSUM; + } else + if (type == T10_PI_TYPE3_PROTECTION) + bi.profile = &t10_pi_type3_crc; + else + bi.profile = &t10_pi_type1_crc; + + bi.tuple_size = sizeof(struct t10_pi_tuple); + + if (dif && type) { + bi.flags |= BLK_INTEGRITY_DEVICE_CAPABLE; + + if (!sdkp->ATO) + goto out; + + if (type == T10_PI_TYPE3_PROTECTION) + bi.tag_size = sizeof(u16) + sizeof(u32); + else + bi.tag_size = sizeof(u16); + } + + sd_printk(KERN_NOTICE, sdkp, + "Enabling DIX %s, application tag size %u bytes\n", + bi.profile->name, bi.tag_size); +out: + blk_integrity_register(disk, &bi); +} + static void sd_config_protection(struct scsi_disk *sdkp) { struct scsi_device *sdp = sdkp->device; @@ -2195,7 +2255,8 @@ static void sd_config_protection(struct scsi_disk *sdkp) if (!sdkp->first_scan) return; - sd_dif_config_host(sdkp); + if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY)) + sd_dif_config_host(sdkp); if (!sdkp->protection_type) return; diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h index 5eea762f84d1..833c37e29d78 100644 --- a/drivers/scsi/sd.h +++ b/drivers/scsi/sd.h @@ -222,18 +222,6 @@ static inline sector_t sectors_to_logical(struct scsi_device *sdev, sector_t sec return sector >> (ilog2(sdev->sector_size) - 9); } -#ifdef CONFIG_BLK_DEV_INTEGRITY - -extern void sd_dif_config_host(struct scsi_disk *); - -#else /* CONFIG_BLK_DEV_INTEGRITY */ - -static inline void sd_dif_config_host(struct scsi_disk *disk) -{ -} - -#endif /* CONFIG_BLK_DEV_INTEGRITY */ - static inline int sd_is_zoned(struct scsi_disk *sdkp) { return sdkp->zoned == 1 || sdkp->device->type == TYPE_ZBC; diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c deleted file mode 100644 index 968993ee6d5d..000000000000 --- a/drivers/scsi/sd_dif.c +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * sd_dif.c - SCSI Data Integrity Field - * - * Copyright (C) 2007, 2008 Oracle Corporation - * Written by: Martin K. Petersen - */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "sd.h" - -/* - * Configure exchange of protection information between OS and HBA. - */ -void sd_dif_config_host(struct scsi_disk *sdkp) -{ - struct scsi_device *sdp = sdkp->device; - struct gendisk *disk = sdkp->disk; - u8 type = sdkp->protection_type; - struct blk_integrity bi; - int dif, dix; - - dif = scsi_host_dif_capable(sdp->host, type); - dix = scsi_host_dix_capable(sdp->host, type); - - if (!dix && scsi_host_dix_capable(sdp->host, 0)) { - dif = 0; dix = 1; - } - - if (!dix) - return; - - memset(&bi, 0, sizeof(bi)); - - /* Enable DMA of protection information */ - if (scsi_host_get_guard(sdkp->device->host) & SHOST_DIX_GUARD_IP) { - if (type == T10_PI_TYPE3_PROTECTION) - bi.profile = &t10_pi_type3_ip; - else - bi.profile = &t10_pi_type1_ip; - - bi.flags |= BLK_INTEGRITY_IP_CHECKSUM; - } else - if (type == T10_PI_TYPE3_PROTECTION) - bi.profile = &t10_pi_type3_crc; - else - bi.profile = &t10_pi_type1_crc; - - bi.tuple_size = sizeof(struct t10_pi_tuple); - - if (dif && type) { - bi.flags |= BLK_INTEGRITY_DEVICE_CAPABLE; - - if (!sdkp->ATO) - goto out; - - if (type == T10_PI_TYPE3_PROTECTION) - bi.tag_size = sizeof(u16) + sizeof(u32); - else - bi.tag_size = sizeof(u16); - } - - sd_printk(KERN_NOTICE, sdkp, - "Enabling DIX %s, application tag size %u bytes\n", - bi.profile->name, bi.tag_size); -out: - blk_integrity_register(disk, &bi); -} - -- 2.50.1