lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Fri, 28 Jul 2017 09:27:50 +0800
From:   kbuild test robot <lkp@...el.com>
To:     xiongweijiang666@...il.com
Cc:     kbuild-all@...org, idryomov@...il.com, sage@...hat.com,
        elder@...nel.org, ceph-devel@...r.kernel.org,
        linux-kernel@...r.kernel.org, chenggang.qcg@...baba-inc.com,
        xiongwei.jiang@...baba-inc.com
Subject: Re: [PATCH] rbd: add timeout function to rbd driver

Hi Xiongwei,

[auto build test WARNING on ceph-client/for-linus]
[also build test WARNING on v4.13-rc2 next-20170727]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/xiongweijiang666-gmail-com/rbd-add-timeout-function-to-rbd-driver/20170728-085544
base:   https://github.com/ceph/ceph-client.git for-linus
config: i386-randconfig-x071-201730 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/block/rbd.c: In function 'rbd_queue_workfn':
>> drivers/block/rbd.c:4135:22: warning: 'linker' may be used uninitialized in this function [-Wmaybe-uninitialized]
     linker->img_request = img_request;
     ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~

vim +/linker +4135 drivers/block/rbd.c

  4021	
  4022	static void rbd_queue_workfn(struct work_struct *work)
  4023	{
  4024		struct request *rq = blk_mq_rq_from_pdu(work);
  4025		struct rbd_device *rbd_dev = rq->q->queuedata;
  4026		struct rbd_img_request *img_request;
  4027		struct rbd_request_linker *linker;
  4028		struct ceph_snap_context *snapc = NULL;
  4029		u64 offset = (u64)blk_rq_pos(rq) << SECTOR_SHIFT;
  4030		u64 length = blk_rq_bytes(rq);
  4031		enum obj_operation_type op_type;
  4032		u64 mapping_size;
  4033		bool must_be_locked;
  4034		int result;
  4035	
  4036		switch (req_op(rq)) {
  4037		case REQ_OP_DISCARD:
  4038		case REQ_OP_WRITE_ZEROES:
  4039			op_type = OBJ_OP_DISCARD;
  4040			break;
  4041		case REQ_OP_WRITE:
  4042			op_type = OBJ_OP_WRITE;
  4043			break;
  4044		case REQ_OP_READ:
  4045			op_type = OBJ_OP_READ;
  4046			break;
  4047		default:
  4048			dout("%s: non-fs request type %d\n", __func__, req_op(rq));
  4049			result = -EIO;
  4050			goto err;
  4051		}
  4052	
  4053		/* Ignore/skip any zero-length requests */
  4054	
  4055		if (!length) {
  4056			dout("%s: zero-length request\n", __func__);
  4057			result = 0;
  4058			goto err_rq;
  4059		}
  4060	
  4061		/* Only reads are allowed to a read-only device */
  4062	
  4063		if (op_type != OBJ_OP_READ) {
  4064			if (rbd_dev->mapping.read_only) {
  4065				result = -EROFS;
  4066				goto err_rq;
  4067			}
  4068			rbd_assert(rbd_dev->spec->snap_id == CEPH_NOSNAP);
  4069		}
  4070	
  4071		/*
  4072		 * Quit early if the mapped snapshot no longer exists.  It's
  4073		 * still possible the snapshot will have disappeared by the
  4074		 * time our request arrives at the osd, but there's no sense in
  4075		 * sending it if we already know.
  4076		 */
  4077		if (!test_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags)) {
  4078			dout("request for non-existent snapshot");
  4079			rbd_assert(rbd_dev->spec->snap_id != CEPH_NOSNAP);
  4080			result = -ENXIO;
  4081			goto err_rq;
  4082		}
  4083	
  4084		if (offset && length > U64_MAX - offset + 1) {
  4085			rbd_warn(rbd_dev, "bad request range (%llu~%llu)", offset,
  4086				 length);
  4087			result = -EINVAL;
  4088			goto err_rq;	/* Shouldn't happen */
  4089		}
  4090	
  4091		blk_mq_start_request(rq);
  4092	
  4093		down_read(&rbd_dev->header_rwsem);
  4094		mapping_size = rbd_dev->mapping.size;
  4095		if (op_type != OBJ_OP_READ) {
  4096			snapc = rbd_dev->header.snapc;
  4097			ceph_get_snap_context(snapc);
  4098		}
  4099		up_read(&rbd_dev->header_rwsem);
  4100	
  4101		if (offset + length > mapping_size) {
  4102			rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)", offset,
  4103				 length, mapping_size);
  4104			result = -EIO;
  4105			goto err_rq;
  4106		}
  4107	
  4108		must_be_locked =
  4109		    (rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK) &&
  4110		    (op_type != OBJ_OP_READ || rbd_dev->opts->lock_on_read);
  4111		if (must_be_locked) {
  4112			down_read(&rbd_dev->lock_rwsem);
  4113			if (rbd_dev->lock_state != RBD_LOCK_STATE_LOCKED &&
  4114			    !test_bit(RBD_DEV_FLAG_BLACKLISTED, &rbd_dev->flags)) {
  4115				if (rbd_dev->opts->exclusive) {
  4116					rbd_warn(rbd_dev, "exclusive lock required");
  4117					result = -EROFS;
  4118					goto err_unlock;
  4119				}
  4120				rbd_wait_state_locked(rbd_dev);
  4121			}
  4122			if (test_bit(RBD_DEV_FLAG_BLACKLISTED, &rbd_dev->flags)) {
  4123				result = -EBLACKLISTED;
  4124				goto err_unlock;
  4125			}
  4126		}
  4127	
  4128		img_request = rbd_img_request_create(rbd_dev, offset, length, op_type,
  4129						     snapc);
  4130		if (!img_request) {
  4131			result = -ENOMEM;
  4132			goto err_unlock;
  4133		}
  4134		img_request->rq = rq;
> 4135		linker->img_request = img_request;
  4136		snapc = NULL; /* img_request consumes a ref */
  4137	
  4138		if (op_type == OBJ_OP_DISCARD)
  4139			result = rbd_img_request_fill(img_request, OBJ_REQUEST_NODATA,
  4140						      NULL);
  4141		else
  4142			result = rbd_img_request_fill(img_request, OBJ_REQUEST_BIO,
  4143						      rq->bio);
  4144		if (result)
  4145			goto err_img_request;
  4146	
  4147		result = rbd_img_request_submit(img_request);
  4148		if (result)
  4149			goto err_img_request;
  4150	
  4151		if (must_be_locked)
  4152			up_read(&rbd_dev->lock_rwsem);
  4153		return;
  4154	
  4155	err_img_request:
  4156		rbd_img_request_put(img_request);
  4157	err_unlock:
  4158		if (must_be_locked)
  4159			up_read(&rbd_dev->lock_rwsem);
  4160	err_rq:
  4161		if (result)
  4162			rbd_warn(rbd_dev, "%s %llx at %llx result %d",
  4163				 obj_op_name(op_type), length, offset, result);
  4164		ceph_put_snap_context(snapc);
  4165	err:
  4166		blk_mq_end_request(rq, errno_to_blk_status(result));
  4167	}
  4168	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (31468 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ