diff mbox

[v2,24/26] ibnbd: include client and server modules into kernel compilation

Message ID 20180518130413.16997-25-roman.penyaev@profitbricks.com (mailing list archive)
State New, archived
Headers show

Commit Message

Roman Pen May 18, 2018, 1:04 p.m. UTC
Add IBNBD Makefile, Kconfig and also corresponding lines into upper
block layer files.

Signed-off-by: Roman Pen <roman.penyaev@profitbricks.com>
Signed-off-by: Danil Kipnis <danil.kipnis@profitbricks.com>
Cc: Jack Wang <jinpu.wang@profitbricks.com>
---
 drivers/block/Kconfig        |  2 ++
 drivers/block/Makefile       |  1 +
 drivers/block/ibnbd/Kconfig  | 22 ++++++++++++++++++++++
 drivers/block/ibnbd/Makefile | 13 +++++++++++++
 4 files changed, 38 insertions(+)
 create mode 100644 drivers/block/ibnbd/Kconfig
 create mode 100644 drivers/block/ibnbd/Makefile

Comments

kernel test robot May 20, 2018, 5:21 p.m. UTC | #1
Hi Roman,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.17-rc5 next-20180517]
[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/Roman-Pen/InfiniBand-Transport-IBTRS-and-Network-Block-Device-IBNBD/20180520-222445
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=sh 

All warnings (new ones prefixed by >>):

   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/module.h:9,
                    from drivers/block/ibnbd/ibnbd-clt-sysfs.c:37:
   drivers/block/ibnbd/ibnbd-clt-sysfs.c: In function 'ibnbd_clt_parse_map_options':
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
                     ^~~~~~~~
   include/linux/printk.h:304:9: note: in expansion of macro 'KERN_ERR'
     printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~
>> drivers/block/ibnbd/ibnbd-clt-sysfs.c:139:5: note: in expansion of macro 'pr_err'
        pr_err("map_device: too many (> %lu) paths "
        ^~~~~~
   drivers/block/ibnbd/ibnbd-clt-sysfs.c: In function 'ibnbd_clt_map_device_store':
>> drivers/block/ibnbd/ibnbd-clt-sysfs.c:613:1: warning: the frame size of 1616 bytes is larger than 1024 bytes [-Wframe-larger-than=]
    }
    ^

vim +/pr_err +139 drivers/block/ibnbd/ibnbd-clt-sysfs.c

ea541da7d Roman Pen 2018-05-18   88  
ea541da7d Roman Pen 2018-05-18   89  static int ibnbd_clt_parse_map_options(const char *buf,
ea541da7d Roman Pen 2018-05-18   90  				       char *sessname,
ea541da7d Roman Pen 2018-05-18   91  				       struct ibtrs_addr *paths,
ea541da7d Roman Pen 2018-05-18   92  				       size_t *path_cnt,
ea541da7d Roman Pen 2018-05-18   93  				       size_t max_path_cnt,
ea541da7d Roman Pen 2018-05-18   94  				       char *pathname,
ea541da7d Roman Pen 2018-05-18   95  				       enum ibnbd_access_mode *access_mode,
ea541da7d Roman Pen 2018-05-18   96  				       enum ibnbd_io_mode *io_mode)
ea541da7d Roman Pen 2018-05-18   97  {
ea541da7d Roman Pen 2018-05-18   98  	char *options, *sep_opt;
ea541da7d Roman Pen 2018-05-18   99  	char *p;
ea541da7d Roman Pen 2018-05-18  100  	substring_t args[MAX_OPT_ARGS];
ea541da7d Roman Pen 2018-05-18  101  	int opt_mask = 0;
ea541da7d Roman Pen 2018-05-18  102  	int token;
ea541da7d Roman Pen 2018-05-18  103  	int ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  104  	int i;
ea541da7d Roman Pen 2018-05-18  105  	int p_cnt = 0;
ea541da7d Roman Pen 2018-05-18  106  
ea541da7d Roman Pen 2018-05-18  107  	options = kstrdup(buf, GFP_KERNEL);
ea541da7d Roman Pen 2018-05-18  108  	if (!options)
ea541da7d Roman Pen 2018-05-18  109  		return -ENOMEM;
ea541da7d Roman Pen 2018-05-18  110  
ea541da7d Roman Pen 2018-05-18  111  	sep_opt = strstrip(options);
ea541da7d Roman Pen 2018-05-18  112  	strip(sep_opt);
ea541da7d Roman Pen 2018-05-18  113  	while ((p = strsep(&sep_opt, " ")) != NULL) {
ea541da7d Roman Pen 2018-05-18  114  		if (!*p)
ea541da7d Roman Pen 2018-05-18  115  			continue;
ea541da7d Roman Pen 2018-05-18  116  
ea541da7d Roman Pen 2018-05-18  117  		token = match_token(p, ibnbd_opt_tokens, args);
ea541da7d Roman Pen 2018-05-18  118  		opt_mask |= token;
ea541da7d Roman Pen 2018-05-18  119  
ea541da7d Roman Pen 2018-05-18  120  		switch (token) {
ea541da7d Roman Pen 2018-05-18  121  		case IBNBD_OPT_SESSNAME:
ea541da7d Roman Pen 2018-05-18  122  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  123  			if (!p) {
ea541da7d Roman Pen 2018-05-18  124  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  125  				goto out;
ea541da7d Roman Pen 2018-05-18  126  			}
ea541da7d Roman Pen 2018-05-18  127  			if (strlen(p) > NAME_MAX) {
ea541da7d Roman Pen 2018-05-18  128  				pr_err("map_device: sessname too long\n");
ea541da7d Roman Pen 2018-05-18  129  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  130  				kfree(p);
ea541da7d Roman Pen 2018-05-18  131  				goto out;
ea541da7d Roman Pen 2018-05-18  132  			}
ea541da7d Roman Pen 2018-05-18  133  			strlcpy(sessname, p, NAME_MAX);
ea541da7d Roman Pen 2018-05-18  134  			kfree(p);
ea541da7d Roman Pen 2018-05-18  135  			break;
ea541da7d Roman Pen 2018-05-18  136  
ea541da7d Roman Pen 2018-05-18  137  		case IBNBD_OPT_PATH:
ea541da7d Roman Pen 2018-05-18  138  			if (p_cnt >= max_path_cnt) {
ea541da7d Roman Pen 2018-05-18 @139  				pr_err("map_device: too many (> %lu) paths "
ea541da7d Roman Pen 2018-05-18  140  				       "provided\n", max_path_cnt);
ea541da7d Roman Pen 2018-05-18  141  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  142  				goto out;
ea541da7d Roman Pen 2018-05-18  143  			}
ea541da7d Roman Pen 2018-05-18  144  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  145  			if (!p) {
ea541da7d Roman Pen 2018-05-18  146  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  147  				goto out;
ea541da7d Roman Pen 2018-05-18  148  			}
ea541da7d Roman Pen 2018-05-18  149  
ea541da7d Roman Pen 2018-05-18  150  			ret = ibtrs_addr_to_sockaddr(p, strlen(p), IBTRS_PORT,
ea541da7d Roman Pen 2018-05-18  151  						     &paths[p_cnt]);
ea541da7d Roman Pen 2018-05-18  152  			if (ret) {
ea541da7d Roman Pen 2018-05-18  153  				pr_err("Can't parse path %s: %d\n", p, ret);
ea541da7d Roman Pen 2018-05-18  154  				kfree(p);
ea541da7d Roman Pen 2018-05-18  155  				goto out;
ea541da7d Roman Pen 2018-05-18  156  			}
ea541da7d Roman Pen 2018-05-18  157  
ea541da7d Roman Pen 2018-05-18  158  			p_cnt++;
ea541da7d Roman Pen 2018-05-18  159  
ea541da7d Roman Pen 2018-05-18  160  			kfree(p);
ea541da7d Roman Pen 2018-05-18  161  			break;
ea541da7d Roman Pen 2018-05-18  162  
ea541da7d Roman Pen 2018-05-18  163  		case IBNBD_OPT_DEV_PATH:
ea541da7d Roman Pen 2018-05-18  164  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  165  			if (!p) {
ea541da7d Roman Pen 2018-05-18  166  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  167  				goto out;
ea541da7d Roman Pen 2018-05-18  168  			}
ea541da7d Roman Pen 2018-05-18  169  			if (strlen(p) > NAME_MAX) {
ea541da7d Roman Pen 2018-05-18  170  				pr_err("map_device: Device path too long\n");
ea541da7d Roman Pen 2018-05-18  171  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  172  				kfree(p);
ea541da7d Roman Pen 2018-05-18  173  				goto out;
ea541da7d Roman Pen 2018-05-18  174  			}
ea541da7d Roman Pen 2018-05-18  175  			strlcpy(pathname, p, NAME_MAX);
ea541da7d Roman Pen 2018-05-18  176  			kfree(p);
ea541da7d Roman Pen 2018-05-18  177  			break;
ea541da7d Roman Pen 2018-05-18  178  
ea541da7d Roman Pen 2018-05-18  179  		case IBNBD_OPT_ACCESS_MODE:
ea541da7d Roman Pen 2018-05-18  180  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  181  			if (!p) {
ea541da7d Roman Pen 2018-05-18  182  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  183  				goto out;
ea541da7d Roman Pen 2018-05-18  184  			}
ea541da7d Roman Pen 2018-05-18  185  
ea541da7d Roman Pen 2018-05-18  186  			if (!strcmp(p, "ro")) {
ea541da7d Roman Pen 2018-05-18  187  				*access_mode = IBNBD_ACCESS_RO;
ea541da7d Roman Pen 2018-05-18  188  			} else if (!strcmp(p, "rw")) {
ea541da7d Roman Pen 2018-05-18  189  				*access_mode = IBNBD_ACCESS_RW;
ea541da7d Roman Pen 2018-05-18  190  			} else if (!strcmp(p, "migration")) {
ea541da7d Roman Pen 2018-05-18  191  				*access_mode = IBNBD_ACCESS_MIGRATION;
ea541da7d Roman Pen 2018-05-18  192  			} else {
ea541da7d Roman Pen 2018-05-18  193  				pr_err("map_device: Invalid access_mode:"
ea541da7d Roman Pen 2018-05-18  194  				       " '%s'\n", p);
ea541da7d Roman Pen 2018-05-18  195  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  196  				kfree(p);
ea541da7d Roman Pen 2018-05-18  197  				goto out;
ea541da7d Roman Pen 2018-05-18  198  			}
ea541da7d Roman Pen 2018-05-18  199  
ea541da7d Roman Pen 2018-05-18  200  			kfree(p);
ea541da7d Roman Pen 2018-05-18  201  			break;
ea541da7d Roman Pen 2018-05-18  202  
ea541da7d Roman Pen 2018-05-18  203  		case IBNBD_OPT_IO_MODE:
ea541da7d Roman Pen 2018-05-18  204  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  205  			if (!p) {
ea541da7d Roman Pen 2018-05-18  206  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  207  				goto out;
ea541da7d Roman Pen 2018-05-18  208  			}
ea541da7d Roman Pen 2018-05-18  209  			if (!strcmp(p, "blockio")) {
ea541da7d Roman Pen 2018-05-18  210  				*io_mode = IBNBD_BLOCKIO;
ea541da7d Roman Pen 2018-05-18  211  			} else if (!strcmp(p, "fileio")) {
ea541da7d Roman Pen 2018-05-18  212  				*io_mode = IBNBD_FILEIO;
ea541da7d Roman Pen 2018-05-18  213  			} else {
ea541da7d Roman Pen 2018-05-18  214  				pr_err("map_device: Invalid io_mode: '%s'.\n",
ea541da7d Roman Pen 2018-05-18  215  				       p);
ea541da7d Roman Pen 2018-05-18  216  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  217  				kfree(p);
ea541da7d Roman Pen 2018-05-18  218  				goto out;
ea541da7d Roman Pen 2018-05-18  219  			}
ea541da7d Roman Pen 2018-05-18  220  			kfree(p);
ea541da7d Roman Pen 2018-05-18  221  			break;
ea541da7d Roman Pen 2018-05-18  222  
ea541da7d Roman Pen 2018-05-18  223  		default:
ea541da7d Roman Pen 2018-05-18  224  			pr_err("map_device: Unknown parameter or missing value"
ea541da7d Roman Pen 2018-05-18  225  			       " '%s'\n", p);
ea541da7d Roman Pen 2018-05-18  226  			ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  227  			goto out;
ea541da7d Roman Pen 2018-05-18  228  		}
ea541da7d Roman Pen 2018-05-18  229  	}
ea541da7d Roman Pen 2018-05-18  230  
ea541da7d Roman Pen 2018-05-18  231  	for (i = 0; i < ARRAY_SIZE(ibnbd_opt_mandatory); i++) {
ea541da7d Roman Pen 2018-05-18  232  		if ((opt_mask & ibnbd_opt_mandatory[i])) {
ea541da7d Roman Pen 2018-05-18  233  			ret = 0;
ea541da7d Roman Pen 2018-05-18  234  		} else {
ea541da7d Roman Pen 2018-05-18  235  			pr_err("map_device: Parameters missing\n");
ea541da7d Roman Pen 2018-05-18  236  			ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  237  			break;
ea541da7d Roman Pen 2018-05-18  238  		}
ea541da7d Roman Pen 2018-05-18  239  	}
ea541da7d Roman Pen 2018-05-18  240  
ea541da7d Roman Pen 2018-05-18  241  out:
ea541da7d Roman Pen 2018-05-18  242  	*path_cnt = p_cnt;
ea541da7d Roman Pen 2018-05-18  243  	kfree(options);
ea541da7d Roman Pen 2018-05-18  244  	return ret;
ea541da7d Roman Pen 2018-05-18  245  }
ea541da7d Roman Pen 2018-05-18  246  

:::::: The code at line 139 was first introduced by commit
:::::: ea541da7d8b2518d2b1d68d23d19bb13cca1119b ibnbd: client: sysfs interface functions

:::::: TO: Roman Pen <roman.penyaev@profitbricks.com>
:::::: CC: 0day robot <lkp@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot May 20, 2018, 10:14 p.m. UTC | #2
Hi Roman,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.17-rc5 next-20180517]
[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/Roman-Pen/InfiniBand-Transport-IBTRS-and-Network-Block-Device-IBNBD/20180520-222445
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/block/ibnbd/ibnbd-clt.c:133:39: sparse: expression using sizeof(void)
>> drivers/block/ibnbd/ibnbd-clt.c:133:39: sparse: expression using sizeof(void)
   drivers/block/ibnbd/ibnbd-clt.c:135:37: sparse: expression using sizeof(void)
   drivers/block/ibnbd/ibnbd-clt.c:135:37: sparse: expression using sizeof(void)
   drivers/block/ibnbd/ibnbd-clt.c:592:29: sparse: expression using sizeof(void)
--
>> drivers/block/ibnbd/ibnbd-srv.c:357:48: sparse: incorrect type in argument 1 (different base types) @@    expected int [signed] dev_id @@    got restricted __le32 consint [signed] dev_id @@
   drivers/block/ibnbd/ibnbd-srv.c:357:48:    expected int [signed] dev_id
   drivers/block/ibnbd/ibnbd-srv.c:357:48:    got restricted __le32 const [usertype] device_id
>> drivers/block/ibnbd/ibnbd-srv.c:696:25: sparse: expression using sizeof(void)
   include/linux/blkdev.h:1105:24: sparse: expression using sizeof(void)

vim +133 drivers/block/ibnbd/ibnbd-clt.c

563b98df Roman Pen 2018-05-18  108  
563b98df Roman Pen 2018-05-18  109  static int ibnbd_clt_set_dev_attr(struct ibnbd_clt_dev *dev,
563b98df Roman Pen 2018-05-18  110  				  const struct ibnbd_msg_open_rsp *rsp)
563b98df Roman Pen 2018-05-18  111  {
563b98df Roman Pen 2018-05-18  112  	struct ibnbd_clt_session *sess = dev->sess;
563b98df Roman Pen 2018-05-18  113  
563b98df Roman Pen 2018-05-18  114  	if (unlikely(!rsp->logical_block_size))
563b98df Roman Pen 2018-05-18  115  		return -EINVAL;
563b98df Roman Pen 2018-05-18  116  
563b98df Roman Pen 2018-05-18  117  	dev->device_id		    = le32_to_cpu(rsp->device_id);
563b98df Roman Pen 2018-05-18  118  	dev->nsectors		    = le64_to_cpu(rsp->nsectors);
563b98df Roman Pen 2018-05-18  119  	dev->logical_block_size	    = le16_to_cpu(rsp->logical_block_size);
563b98df Roman Pen 2018-05-18  120  	dev->physical_block_size    = le16_to_cpu(rsp->physical_block_size);
563b98df Roman Pen 2018-05-18  121  	dev->max_write_same_sectors = le32_to_cpu(rsp->max_write_same_sectors);
563b98df Roman Pen 2018-05-18  122  	dev->max_discard_sectors    = le32_to_cpu(rsp->max_discard_sectors);
563b98df Roman Pen 2018-05-18  123  	dev->discard_granularity    = le32_to_cpu(rsp->discard_granularity);
563b98df Roman Pen 2018-05-18  124  	dev->discard_alignment	    = le32_to_cpu(rsp->discard_alignment);
563b98df Roman Pen 2018-05-18  125  	dev->secure_discard	    = le16_to_cpu(rsp->secure_discard);
563b98df Roman Pen 2018-05-18  126  	dev->rotational		    = rsp->rotational;
563b98df Roman Pen 2018-05-18  127  	dev->remote_io_mode	    = rsp->io_mode;
563b98df Roman Pen 2018-05-18  128  
563b98df Roman Pen 2018-05-18  129  	dev->max_hw_sectors = sess->max_io_size / dev->logical_block_size;
563b98df Roman Pen 2018-05-18  130  	dev->max_segments = BMAX_SEGMENTS;
563b98df Roman Pen 2018-05-18  131  
563b98df Roman Pen 2018-05-18  132  	if (dev->remote_io_mode == IBNBD_BLOCKIO) {
563b98df Roman Pen 2018-05-18 @133  		dev->max_hw_sectors = min_t(u32, dev->max_hw_sectors,
563b98df Roman Pen 2018-05-18  134  					    le32_to_cpu(rsp->max_hw_sectors));
563b98df Roman Pen 2018-05-18  135  		dev->max_segments = min_t(u16, dev->max_segments,
563b98df Roman Pen 2018-05-18  136  					  le16_to_cpu(rsp->max_segments));
563b98df Roman Pen 2018-05-18  137  	}
563b98df Roman Pen 2018-05-18  138  
563b98df Roman Pen 2018-05-18  139  	return 0;
563b98df Roman Pen 2018-05-18  140  }
563b98df Roman Pen 2018-05-18  141  

:::::: The code at line 133 was first introduced by commit
:::::: 563b98df79220ea51ec7d61fa671c810eef1db6b ibnbd: client: main functionality

:::::: TO: Roman Pen <roman.penyaev@profitbricks.com>
:::::: CC: 0day robot <lkp@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot May 21, 2018, 5:33 a.m. UTC | #3
Hi Roman,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.17-rc6 next-20180517]
[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/Roman-Pen/InfiniBand-Transport-IBTRS-and-Network-Block-Device-IBNBD/20180520-222445
config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   drivers/block/ibnbd/ibnbd-clt-sysfs.c: In function 'ibnbd_clt_parse_map_options':
>> drivers/block/ibnbd/ibnbd-clt-sysfs.c:139:12: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t {aka unsigned int}' [-Wformat=]
        pr_err("map_device: too many (> %lu) paths "
               ^~~~~~
   drivers/block/ibnbd/ibnbd-clt-sysfs.c: In function 'ibnbd_clt_map_device_store':
   drivers/block/ibnbd/ibnbd-clt-sysfs.c:613:1: warning: the frame size of 1612 bytes is larger than 1024 bytes [-Wframe-larger-than=]
    }
    ^

vim +139 drivers/block/ibnbd/ibnbd-clt-sysfs.c

ea541da7d Roman Pen 2018-05-18   88  
ea541da7d Roman Pen 2018-05-18   89  static int ibnbd_clt_parse_map_options(const char *buf,
ea541da7d Roman Pen 2018-05-18   90  				       char *sessname,
ea541da7d Roman Pen 2018-05-18   91  				       struct ibtrs_addr *paths,
ea541da7d Roman Pen 2018-05-18   92  				       size_t *path_cnt,
ea541da7d Roman Pen 2018-05-18   93  				       size_t max_path_cnt,
ea541da7d Roman Pen 2018-05-18   94  				       char *pathname,
ea541da7d Roman Pen 2018-05-18   95  				       enum ibnbd_access_mode *access_mode,
ea541da7d Roman Pen 2018-05-18   96  				       enum ibnbd_io_mode *io_mode)
ea541da7d Roman Pen 2018-05-18   97  {
ea541da7d Roman Pen 2018-05-18   98  	char *options, *sep_opt;
ea541da7d Roman Pen 2018-05-18   99  	char *p;
ea541da7d Roman Pen 2018-05-18  100  	substring_t args[MAX_OPT_ARGS];
ea541da7d Roman Pen 2018-05-18  101  	int opt_mask = 0;
ea541da7d Roman Pen 2018-05-18  102  	int token;
ea541da7d Roman Pen 2018-05-18  103  	int ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  104  	int i;
ea541da7d Roman Pen 2018-05-18  105  	int p_cnt = 0;
ea541da7d Roman Pen 2018-05-18  106  
ea541da7d Roman Pen 2018-05-18  107  	options = kstrdup(buf, GFP_KERNEL);
ea541da7d Roman Pen 2018-05-18  108  	if (!options)
ea541da7d Roman Pen 2018-05-18  109  		return -ENOMEM;
ea541da7d Roman Pen 2018-05-18  110  
ea541da7d Roman Pen 2018-05-18  111  	sep_opt = strstrip(options);
ea541da7d Roman Pen 2018-05-18  112  	strip(sep_opt);
ea541da7d Roman Pen 2018-05-18  113  	while ((p = strsep(&sep_opt, " ")) != NULL) {
ea541da7d Roman Pen 2018-05-18  114  		if (!*p)
ea541da7d Roman Pen 2018-05-18  115  			continue;
ea541da7d Roman Pen 2018-05-18  116  
ea541da7d Roman Pen 2018-05-18  117  		token = match_token(p, ibnbd_opt_tokens, args);
ea541da7d Roman Pen 2018-05-18  118  		opt_mask |= token;
ea541da7d Roman Pen 2018-05-18  119  
ea541da7d Roman Pen 2018-05-18  120  		switch (token) {
ea541da7d Roman Pen 2018-05-18  121  		case IBNBD_OPT_SESSNAME:
ea541da7d Roman Pen 2018-05-18  122  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  123  			if (!p) {
ea541da7d Roman Pen 2018-05-18  124  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  125  				goto out;
ea541da7d Roman Pen 2018-05-18  126  			}
ea541da7d Roman Pen 2018-05-18  127  			if (strlen(p) > NAME_MAX) {
ea541da7d Roman Pen 2018-05-18  128  				pr_err("map_device: sessname too long\n");
ea541da7d Roman Pen 2018-05-18  129  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  130  				kfree(p);
ea541da7d Roman Pen 2018-05-18  131  				goto out;
ea541da7d Roman Pen 2018-05-18  132  			}
ea541da7d Roman Pen 2018-05-18  133  			strlcpy(sessname, p, NAME_MAX);
ea541da7d Roman Pen 2018-05-18  134  			kfree(p);
ea541da7d Roman Pen 2018-05-18  135  			break;
ea541da7d Roman Pen 2018-05-18  136  
ea541da7d Roman Pen 2018-05-18  137  		case IBNBD_OPT_PATH:
ea541da7d Roman Pen 2018-05-18  138  			if (p_cnt >= max_path_cnt) {
ea541da7d Roman Pen 2018-05-18 @139  				pr_err("map_device: too many (> %lu) paths "
ea541da7d Roman Pen 2018-05-18  140  				       "provided\n", max_path_cnt);
ea541da7d Roman Pen 2018-05-18  141  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  142  				goto out;
ea541da7d Roman Pen 2018-05-18  143  			}
ea541da7d Roman Pen 2018-05-18  144  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  145  			if (!p) {
ea541da7d Roman Pen 2018-05-18  146  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  147  				goto out;
ea541da7d Roman Pen 2018-05-18  148  			}
ea541da7d Roman Pen 2018-05-18  149  
ea541da7d Roman Pen 2018-05-18  150  			ret = ibtrs_addr_to_sockaddr(p, strlen(p), IBTRS_PORT,
ea541da7d Roman Pen 2018-05-18  151  						     &paths[p_cnt]);
ea541da7d Roman Pen 2018-05-18  152  			if (ret) {
ea541da7d Roman Pen 2018-05-18  153  				pr_err("Can't parse path %s: %d\n", p, ret);
ea541da7d Roman Pen 2018-05-18  154  				kfree(p);
ea541da7d Roman Pen 2018-05-18  155  				goto out;
ea541da7d Roman Pen 2018-05-18  156  			}
ea541da7d Roman Pen 2018-05-18  157  
ea541da7d Roman Pen 2018-05-18  158  			p_cnt++;
ea541da7d Roman Pen 2018-05-18  159  
ea541da7d Roman Pen 2018-05-18  160  			kfree(p);
ea541da7d Roman Pen 2018-05-18  161  			break;
ea541da7d Roman Pen 2018-05-18  162  
ea541da7d Roman Pen 2018-05-18  163  		case IBNBD_OPT_DEV_PATH:
ea541da7d Roman Pen 2018-05-18  164  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  165  			if (!p) {
ea541da7d Roman Pen 2018-05-18  166  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  167  				goto out;
ea541da7d Roman Pen 2018-05-18  168  			}
ea541da7d Roman Pen 2018-05-18  169  			if (strlen(p) > NAME_MAX) {
ea541da7d Roman Pen 2018-05-18  170  				pr_err("map_device: Device path too long\n");
ea541da7d Roman Pen 2018-05-18  171  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  172  				kfree(p);
ea541da7d Roman Pen 2018-05-18  173  				goto out;
ea541da7d Roman Pen 2018-05-18  174  			}
ea541da7d Roman Pen 2018-05-18  175  			strlcpy(pathname, p, NAME_MAX);
ea541da7d Roman Pen 2018-05-18  176  			kfree(p);
ea541da7d Roman Pen 2018-05-18  177  			break;
ea541da7d Roman Pen 2018-05-18  178  
ea541da7d Roman Pen 2018-05-18  179  		case IBNBD_OPT_ACCESS_MODE:
ea541da7d Roman Pen 2018-05-18  180  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  181  			if (!p) {
ea541da7d Roman Pen 2018-05-18  182  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  183  				goto out;
ea541da7d Roman Pen 2018-05-18  184  			}
ea541da7d Roman Pen 2018-05-18  185  
ea541da7d Roman Pen 2018-05-18  186  			if (!strcmp(p, "ro")) {
ea541da7d Roman Pen 2018-05-18  187  				*access_mode = IBNBD_ACCESS_RO;
ea541da7d Roman Pen 2018-05-18  188  			} else if (!strcmp(p, "rw")) {
ea541da7d Roman Pen 2018-05-18  189  				*access_mode = IBNBD_ACCESS_RW;
ea541da7d Roman Pen 2018-05-18  190  			} else if (!strcmp(p, "migration")) {
ea541da7d Roman Pen 2018-05-18  191  				*access_mode = IBNBD_ACCESS_MIGRATION;
ea541da7d Roman Pen 2018-05-18  192  			} else {
ea541da7d Roman Pen 2018-05-18  193  				pr_err("map_device: Invalid access_mode:"
ea541da7d Roman Pen 2018-05-18  194  				       " '%s'\n", p);
ea541da7d Roman Pen 2018-05-18  195  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  196  				kfree(p);
ea541da7d Roman Pen 2018-05-18  197  				goto out;
ea541da7d Roman Pen 2018-05-18  198  			}
ea541da7d Roman Pen 2018-05-18  199  
ea541da7d Roman Pen 2018-05-18  200  			kfree(p);
ea541da7d Roman Pen 2018-05-18  201  			break;
ea541da7d Roman Pen 2018-05-18  202  
ea541da7d Roman Pen 2018-05-18  203  		case IBNBD_OPT_IO_MODE:
ea541da7d Roman Pen 2018-05-18  204  			p = match_strdup(args);
ea541da7d Roman Pen 2018-05-18  205  			if (!p) {
ea541da7d Roman Pen 2018-05-18  206  				ret = -ENOMEM;
ea541da7d Roman Pen 2018-05-18  207  				goto out;
ea541da7d Roman Pen 2018-05-18  208  			}
ea541da7d Roman Pen 2018-05-18  209  			if (!strcmp(p, "blockio")) {
ea541da7d Roman Pen 2018-05-18  210  				*io_mode = IBNBD_BLOCKIO;
ea541da7d Roman Pen 2018-05-18  211  			} else if (!strcmp(p, "fileio")) {
ea541da7d Roman Pen 2018-05-18  212  				*io_mode = IBNBD_FILEIO;
ea541da7d Roman Pen 2018-05-18  213  			} else {
ea541da7d Roman Pen 2018-05-18  214  				pr_err("map_device: Invalid io_mode: '%s'.\n",
ea541da7d Roman Pen 2018-05-18  215  				       p);
ea541da7d Roman Pen 2018-05-18  216  				ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  217  				kfree(p);
ea541da7d Roman Pen 2018-05-18  218  				goto out;
ea541da7d Roman Pen 2018-05-18  219  			}
ea541da7d Roman Pen 2018-05-18  220  			kfree(p);
ea541da7d Roman Pen 2018-05-18  221  			break;
ea541da7d Roman Pen 2018-05-18  222  
ea541da7d Roman Pen 2018-05-18  223  		default:
ea541da7d Roman Pen 2018-05-18  224  			pr_err("map_device: Unknown parameter or missing value"
ea541da7d Roman Pen 2018-05-18  225  			       " '%s'\n", p);
ea541da7d Roman Pen 2018-05-18  226  			ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  227  			goto out;
ea541da7d Roman Pen 2018-05-18  228  		}
ea541da7d Roman Pen 2018-05-18  229  	}
ea541da7d Roman Pen 2018-05-18  230  
ea541da7d Roman Pen 2018-05-18  231  	for (i = 0; i < ARRAY_SIZE(ibnbd_opt_mandatory); i++) {
ea541da7d Roman Pen 2018-05-18  232  		if ((opt_mask & ibnbd_opt_mandatory[i])) {
ea541da7d Roman Pen 2018-05-18  233  			ret = 0;
ea541da7d Roman Pen 2018-05-18  234  		} else {
ea541da7d Roman Pen 2018-05-18  235  			pr_err("map_device: Parameters missing\n");
ea541da7d Roman Pen 2018-05-18  236  			ret = -EINVAL;
ea541da7d Roman Pen 2018-05-18  237  			break;
ea541da7d Roman Pen 2018-05-18  238  		}
ea541da7d Roman Pen 2018-05-18  239  	}
ea541da7d Roman Pen 2018-05-18  240  
ea541da7d Roman Pen 2018-05-18  241  out:
ea541da7d Roman Pen 2018-05-18  242  	*path_cnt = p_cnt;
ea541da7d Roman Pen 2018-05-18  243  	kfree(options);
ea541da7d Roman Pen 2018-05-18  244  	return ret;
ea541da7d Roman Pen 2018-05-18  245  }
ea541da7d Roman Pen 2018-05-18  246  

:::::: The code at line 139 was first introduced by commit
:::::: ea541da7d8b2518d2b1d68d23d19bb13cca1119b ibnbd: client: sysfs interface functions

:::::: TO: Roman Pen <roman.penyaev@profitbricks.com>
:::::: CC: 0day robot <lkp@intel.com>

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

Patch

diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index ad9b687a236a..d8c1590411c8 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -481,4 +481,6 @@  config BLK_DEV_RSXX
 	  To compile this driver as a module, choose M here: the
 	  module will be called rsxx.
 
+source "drivers/block/ibnbd/Kconfig"
+
 endif # BLK_DEV
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index dc061158b403..65346a1d0b1a 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -38,6 +38,7 @@  obj-$(CONFIG_BLK_DEV_PCIESSD_MTIP32XX)	+= mtip32xx/
 obj-$(CONFIG_BLK_DEV_RSXX) += rsxx/
 obj-$(CONFIG_BLK_DEV_NULL_BLK)	+= null_blk.o
 obj-$(CONFIG_ZRAM) += zram/
+obj-$(CONFIG_BLK_DEV_IBNBD)	+= ibnbd/
 
 skd-y		:= skd_main.o
 swim_mod-y	:= swim.o swim_asm.o
diff --git a/drivers/block/ibnbd/Kconfig b/drivers/block/ibnbd/Kconfig
new file mode 100644
index 000000000000..b381c6c084d2
--- /dev/null
+++ b/drivers/block/ibnbd/Kconfig
@@ -0,0 +1,22 @@ 
+config BLK_DEV_IBNBD
+	bool
+
+config BLK_DEV_IBNBD_CLIENT
+	tristate "Network block device driver on top of IBTRS transport"
+	depends on INFINIBAND_IBTRS_CLIENT
+	select BLK_DEV_IBNBD
+	help
+	  IBNBD client allows for mapping of a remote block devices over
+	  IBTRS protocol from a target system where IBNBD server is running.
+
+	  If unsure, say N.
+
+config BLK_DEV_IBNBD_SERVER
+	tristate "Network block device over RDMA Infiniband server support"
+	depends on INFINIBAND_IBTRS_SERVER
+	select BLK_DEV_IBNBD
+	help
+	  IBNBD server allows for exporting local block devices to a remote client
+	  over IBTRS protocol.
+
+	  If unsure, say N.
diff --git a/drivers/block/ibnbd/Makefile b/drivers/block/ibnbd/Makefile
new file mode 100644
index 000000000000..5f20e72e0633
--- /dev/null
+++ b/drivers/block/ibnbd/Makefile
@@ -0,0 +1,13 @@ 
+ccflags-y := -Idrivers/infiniband/ulp/ibtrs
+
+ibnbd-client-y := ibnbd-clt.o \
+		  ibnbd-clt-sysfs.o
+
+ibnbd-server-y := ibnbd-srv.o \
+		  ibnbd-srv-dev.o \
+		  ibnbd-srv-sysfs.o
+
+obj-$(CONFIG_BLK_DEV_IBNBD_CLIENT) += ibnbd-client.o
+obj-$(CONFIG_BLK_DEV_IBNBD_SERVER) += ibnbd-server.o
+
+-include $(src)/compat/compat.mk