[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