[stgt] [PATCH] LBPPBE: when opening the backing file, check the blocksize of the underlying filesystem and set lbppbe automatically.

FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Wed Apr 18 13:30:40 CEST 2012


On Wed, 18 Apr 2012 19:26:47 +1000
Ronnie Sahlberg <ronniesahlberg at gmail.com> wrote:

> Unless the user has set an explicit value through tgtadm in which case we leave the system using the value the user has set.
> 
> Signed-off-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
> ---
>  doc/targets.conf.5.xml |    7 ++++++-
>  usr/bs_aio.c           |   19 ++++++++++++-------
>  usr/bs_rdwr.c          |   10 ++++++++--
>  usr/bs_ssc.c           |    2 +-
>  usr/spc.c              |    1 +
>  usr/target.c           |    9 +++++++++
>  usr/tgtd.h             |    5 +++++
>  usr/util.c             |    8 +++++---
>  usr/util.h             |    3 ++-
>  9 files changed, 49 insertions(+), 15 deletions(-)
> 
> diff --git a/doc/targets.conf.5.xml b/doc/targets.conf.5.xml
> index f754df3..833e40a 100644
> --- a/doc/targets.conf.5.xml
> +++ b/doc/targets.conf.5.xml
> @@ -336,7 +336,12 @@
>  	<listitem>
>  	  <para>
>  	    Specify the Logical blocks per physical block
> -	    exponent. This is an internal option that should not be
> +	    exponent. By default TGTD will set the lbppbe to automatically
> +	    match the underlying filesystem. Use this parameter to override
> +	    that setting.
> +	  </para>
> +	  <para>
> +	    This is an internal option that should not be
>  	    set directly.
>  	  </para>
>  	</listitem>
> diff --git a/usr/bs_aio.c b/usr/bs_aio.c
> index cbd91ba..75ae66f 100644
> --- a/usr/bs_aio.c
> +++ b/usr/bs_aio.c
> @@ -304,6 +304,7 @@ static int bs_aio_open(struct scsi_lu *lu, char *path, int *fd, uint64_t *size)
>  {
>  	struct bs_aio_info *info = BS_AIO_I(lu);
>  	int ret, afd;
> +	uint32_t blksize = 0;
>  
>  	info->iodepth = AIO_MAX_IODEPTH;
>  	eprintf("create aio context for tgt:%d lun:%"PRId64 ", max iodepth:%d\n",
> @@ -331,13 +332,14 @@ static int bs_aio_open(struct scsi_lu *lu, char *path, int *fd, uint64_t *size)
>  
>  	eprintf("open %s, RW, O_DIRECT for tgt:%d lun:%"PRId64 "\n",
>  		path, info->lu->tgt->tid, info->lu->lun);
> -	*fd = backed_file_open(path, O_RDWR|O_LARGEFILE|O_DIRECT, size);
> +	*fd = backed_file_open(path, O_RDWR|O_LARGEFILE|O_DIRECT, size,
> +				&blksize);
>  	/* If we get access denied, try opening the file in readonly mode */
>  	if (*fd == -1 && (errno == EACCES || errno == EROFS)) {
>  		eprintf("open %s, READONLY, O_DIRECT for tgt:%d lun:%"PRId64 "\n",
>  			path, info->lu->tgt->tid, info->lu->lun);
>  		*fd = backed_file_open(path, O_RDONLY|O_LARGEFILE|O_DIRECT,
> -				       size);
> +				       size, &blksize);
>  		lu->attrs.readonly = 1;
>  	}
>  	if (*fd < 0) {
> @@ -346,11 +348,14 @@ static int bs_aio_open(struct scsi_lu *lu, char *path, int *fd, uint64_t *size)
>  		ret = *fd;
>  		goto remove_tgt_evt;
>  	}
> -	else {
> -		eprintf("%s opened successfully for tgt:%d lun:%"PRId64 "\n",
> -			path, info->lu->tgt->tid, info->lu->lun);
> -		return 0;
> -	}
> +
> +	eprintf("%s opened successfully for tgt:%d lun:%"PRId64 "\n",
> +		path, info->lu->tgt->tid, info->lu->lun);
> +
> +	if (!lu->attrs.no_auto_lbppbe)
> +		update_lbppbe(lu, blksize);

Why can't we simply do:

> +	if (!lu->lbppbe)
> +		update_lbppbe(lu, blksize);

?

If an user doesn't specify lbppbe via tgtadm, lu->lbppbe should be
zero?

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list