All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: Re: [PATCH v2 22/22] mpool: add Kconfig and Makefile
Date: Fri, 23 Oct 2020 08:30:14 +0800	[thread overview]
Message-ID: <202010230846.G080o9SD-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 21274 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20201012162736.65241-23-nmeeramohide@micron.com>
References: <20201012162736.65241-23-nmeeramohide@micron.com>
TO: Nabeel M Mohamed <nmeeramohide@micron.com>
TO: linux-kernel(a)vger.kernel.org
TO: linux-block(a)vger.kernel.org
TO: linux-nvme(a)lists.infradead.org
TO: linux-mm(a)kvack.org
TO: linux-nvdimm(a)lists.01.org
CC: smoyer(a)micron.com
CC: gbecker(a)micron.com
CC: plabat(a)micron.com
CC: jgroves(a)micron.com
CC: Nabeel M Mohamed <nmeeramohide@micron.com>

Hi Nabeel,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on linux/master v5.9 next-20201022]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Nabeel-M-Mohamed/add-Object-Storage-Media-Pool-mpool/20201013-002941
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git bbf5c979011a099af5dc76498918ed7df445635b
:::::: branch date: 10 days ago
:::::: commit date: 10 days ago
config: x86_64-randconfig-m001-20201022 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/mpool/pd.c:110 pd_bio_discard() warn: should '1 << (dparm->dpr_prop.pdp_sectorsz)' be a 64 bit type?
drivers/mpool/pd.c:239 pd_bio_rw() warn: should '1 << (dparm->dpr_prop.pdp_sectorsz)' be a 64 bit type?
drivers/mpool/pd.c:258 pd_bio_rw() warn: argument 6 to %lx specifier is cast from pointer
drivers/mpool/smap.c:424 smap_alloc() error: double unlocked '*rmlock' (orig line 413)
drivers/mpool/mlog.c:66 mlog_alloc_cmn() error: we previously assumed 'layout' could be null (see line 45)
drivers/mpool/pmd.c:1940 pmd_mdc_cap() warn: should '(layout->eld_ld.ol_zcnt * zonepg) << 12' be a 64 bit type?
drivers/mpool/mpctl.c:2596 mpc_ioctl() warn: possible memory leak of 'argp'

Old smatch warnings:
drivers/mpool/smap.c:446 smap_alloc() error: double unlocked '*rmlock' (orig line 413)
drivers/mpool/smap.c:457 smap_alloc() error: double unlocked '*rmlock' (orig line 413)

vim +110 drivers/mpool/pd.c

93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   88  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   89  /**
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   90   * pd_bio_discard() - issue discard command to erase a byte-aligned region
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   91   * @dparm:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   92   * @off:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   93   * @len:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   94   */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   95  static int pd_bio_discard(struct pd_dev_parm *dparm, loff_t off, size_t len)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   96  {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   97  	struct block_device *bdev;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   98  	int rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12   99  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  100  	bdev = dparm->dpr_dev_private;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  101  	if (!bdev) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  102  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  103  		mp_pr_err("bdev %s not registered", rc, dparm->dpr_name);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  104  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  105  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  106  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  107  	/* Validate I/O offset is sector-aligned */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  108  	if (off & PD_SECTORMASK(&dparm->dpr_prop)) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  109  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12 @110  		mp_pr_err("bdev %s, offset 0x%lx not multiple of sec size %u",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  111  			  rc, dparm->dpr_name, (ulong)off, (1 << PD_SECTORSZ(&dparm->dpr_prop)));
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  112  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  113  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  114  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  115  	if (off > PD_LEN(&dparm->dpr_prop)) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  116  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  117  		mp_pr_err("bdev %s, offset 0x%lx past end 0x%lx",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  118  			  rc, dparm->dpr_name, (ulong)off, (ulong)PD_LEN(&dparm->dpr_prop));
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  119  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  120  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  121  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  122  	rc = blkdev_issue_discard(bdev, off >> SECTOR_SHIFT, len >> SECTOR_SHIFT, GFP_NOIO, 0);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  123  	if (rc)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  124  		mp_pr_err("bdev %s, offset 0x%lx len 0x%lx, discard faiure",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  125  			  rc, dparm->dpr_name, (ulong)off, (ulong)len);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  126  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  127  	return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  128  }
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  129  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  130  /**
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  131   * pd_zone_erase() - issue write-zeros or discard commands to erase PD
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  132   * @dparm:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  133   * @zaddr:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  134   * @zonecnt:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  135   * @flag:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  136   * @afp:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  137   */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  138  int pd_zone_erase(struct pd_dev_parm *dparm, u64 zaddr, u32 zonecnt, bool reads_erased)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  139  {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  140  	int rc = 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  141  	u64 cmdopt;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  142  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  143  	/* Validate args against zone param */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  144  	if (zaddr >= dparm->dpr_zonetot)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  145  		return -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  146  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  147  	if (zonecnt == 0)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  148  		zonecnt = dparm->dpr_zonetot - zaddr;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  149  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  150  	if (zonecnt > (dparm->dpr_zonetot - zaddr))
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  151  		return -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  152  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  153  	if (zonecnt == 0)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  154  		return 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  155  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  156  	/*
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  157  	 * When both DIF and SED are enabled, read from a discared block
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  158  	 * would fail, so we can't discard blocks if both DIF and SED are
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  159  	 * enabled AND we need to read blocks after erase.
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  160  	 */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  161  	cmdopt = dparm->dpr_cmdopt;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  162  	if ((cmdopt & PD_CMD_DISCARD) &&
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  163  	    !(reads_erased && (cmdopt & PD_CMD_DIF_ENABLED) && (cmdopt & PD_CMD_SED_ENABLED))) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  164  		size_t zlen;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  165  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  166  		zlen = dparm->dpr_zonepg << PAGE_SHIFT;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  167  		rc = pd_bio_discard(dparm, zaddr * zlen, zonecnt * zlen);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  168  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  169  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  170  	return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  171  }
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  172  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  173  static void pd_bio_init(struct bio *bio, struct block_device *bdev, int rw, loff_t off, int flags)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  174  {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  175  	bio_set_op_attrs(bio, rw, flags);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  176  	bio->bi_iter.bi_sector = off >> SECTOR_SHIFT;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  177  	bio_set_dev(bio, bdev);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  178  }
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  179  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  180  static struct bio *pd_bio_chain(struct bio *target, unsigned int nr_pages, gfp_t gfp)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  181  {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  182  	struct bio *new;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  183  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  184  	new = bio_alloc_bioset(gfp, nr_pages, &mpool_bioset);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  185  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  186  	if (!target)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  187  		return new;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  188  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  189  	if (new) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  190  		bio_chain(target, new);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  191  		submit_bio(target);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  192  	} else {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  193  		submit_bio_wait(target);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  194  		bio_put(target);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  195  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  196  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  197  	return new;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  198  }
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  199  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  200  /**
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  201   * pd_bio_rw() -
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  202   * @dparm:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  203   * @iov:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  204   * @iovcnt:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  205   * @off: offset in bytes on disk
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  206   * @rw:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  207   * @opflags:
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  208   *
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  209   * pd_bio_rw() expects a list of kvecs wherein each base ptr is sector
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  210   * aligned and each length is multiple of sectors.
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  211   *
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  212   * If the IO is bigger than 1MiB (BIO_MAX_PAGES pages) or chunk_size_kb,
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  213   * it is split in several IOs.
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  214   */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  215  static int pd_bio_rw(struct pd_dev_parm *dparm, const struct kvec *iov,
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  216  		     int iovcnt, loff_t off, int rw, int opflags)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  217  {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  218  	struct block_device *bdev;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  219  	struct page *page;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  220  	struct bio *bio;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  221  	uintptr_t iov_base;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  222  	u64 sector_mask;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  223  	u32 tot_pages, tot_len, len, iov_len, left, iolimit;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  224  	int i, cc, rc = 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  225  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  226  	if (iovcnt < 1)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  227  		return 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  228  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  229  	bdev = dparm->dpr_dev_private;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  230  	if (!bdev) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  231  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  232  		mp_pr_err("bdev %s not registered", rc, dparm->dpr_name);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  233  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  234  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  235  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  236  	sector_mask = PD_SECTORMASK(&dparm->dpr_prop);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  237  	if (off & sector_mask) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  238  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12 @239  		mp_pr_err("bdev %s, %s offset 0x%lx not multiple of sector size %u",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  240  			  rc, dparm->dpr_name, (rw == REQ_OP_READ) ? "read" : "write",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  241  			  (ulong)off, (1 << PD_SECTORSZ(&dparm->dpr_prop)));
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  242  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  243  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  244  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  245  	if (off > PD_LEN(&dparm->dpr_prop)) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  246  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  247  		mp_pr_err("bdev %s, %s offset 0x%lx past device end 0x%lx",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  248  			  rc, dparm->dpr_name, (rw == REQ_OP_READ) ? "read" : "write",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  249  			  (ulong)off, (ulong)PD_LEN(&dparm->dpr_prop));
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  250  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  251  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  252  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  253  	tot_pages = 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  254  	tot_len = 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  255  	for (i = 0; i < iovcnt; i++) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  256  		if (!PAGE_ALIGNED((uintptr_t)iov[i].iov_base) || (iov[i].iov_len & sector_mask)) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  257  			rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12 @258  			mp_pr_err("bdev %s, %s off 0x%lx, misaligned kvec, base 0x%lx, len 0x%lx",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  259  				  rc, dparm->dpr_name, (rw == REQ_OP_READ) ? "read" : "write",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  260  				  (ulong)off, (ulong)iov[i].iov_base, (ulong)iov[i].iov_len);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  261  			return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  262  		}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  263  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  264  		iov_len = iov[i].iov_len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  265  		tot_len += iov_len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  266  		while (iov_len > 0) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  267  			len = min_t(size_t, PAGE_SIZE, iov_len);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  268  			iov_len -= len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  269  			tot_pages++;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  270  		}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  271  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  272  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  273  	if (off + tot_len > PD_LEN(&dparm->dpr_prop)) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  274  		rc = -EINVAL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  275  		mp_pr_err("bdev %s, %s I/O end past device end 0x%lx, 0x%lx:0x%x",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  276  			  rc, dparm->dpr_name, (rw == REQ_OP_READ) ? "read" : "write",
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  277  			  (ulong)PD_LEN(&dparm->dpr_prop), (ulong)off, tot_len);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  278  		return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  279  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  280  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  281  	if (tot_len == 0)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  282  		return 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  283  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  284  	/* IO size for each bio is determined by the chunk size. */
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  285  	iolimit = chunk_size_kb >> (PAGE_SHIFT - 10);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  286  	iolimit = clamp_t(u32, iolimit, 32, BIO_MAX_PAGES);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  287  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  288  	left = 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  289  	bio = NULL;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  290  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  291  	for (i = 0; i < iovcnt; i++) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  292  		iov_base = (uintptr_t)iov[i].iov_base;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  293  		iov_len = iov[i].iov_len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  294  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  295  		while (iov_len > 0) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  296  			if (left == 0) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  297  				left = min_t(size_t, tot_pages, iolimit);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  298  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  299  				bio = pd_bio_chain(bio, left, GFP_NOIO);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  300  				if (!bio)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  301  					return -ENOMEM;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  302  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  303  				pd_bio_init(bio, bdev, rw, off, opflags);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  304  			}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  305  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  306  			len = min_t(size_t, PAGE_SIZE, iov_len);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  307  			page = virt_to_page(iov_base);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  308  			cc = -1;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  309  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  310  			if (page)
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  311  				cc = bio_add_page(bio, page, len, 0);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  312  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  313  			if (cc != len) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  314  				if (cc == 0 && bio->bi_vcnt > 0) {
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  315  					left = 0;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  316  					continue;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  317  				}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  318  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  319  				bio_io_error(bio);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  320  				bio_put(bio);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  321  				return -ENOTRECOVERABLE;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  322  			}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  323  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  324  			iov_len -= len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  325  			iov_base += len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  326  			off += len;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  327  			left--;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  328  			tot_pages--;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  329  		}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  330  	}
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  331  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  332  	ASSERT(bio);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  333  	ASSERT(tot_pages == 0);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  334  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  335  	rc = submit_bio_wait(bio);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  336  	bio_put(bio);
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  337  
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  338  	return rc;
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  339  }
93efb0dc85ec75d Nabeel M Mohamed 2020-10-12  340  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36005 bytes --]

             reply	other threads:[~2020-10-23  0:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-23  0:30 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-10-12 16:27 [PATCH v2 00/22] add Object Storage Media Pool (mpool) Nabeel M Mohamed
2020-10-12 16:27 ` [PATCH v2 22/22] mpool: add Kconfig and Makefile Nabeel M Mohamed
2020-10-12 16:27   ` Nabeel M Mohamed
2020-10-12 16:27   ` Nabeel M Mohamed

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=202010230846.G080o9SD-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.