From: yangsheng Date: Tue, 15 Jun 2010 05:23:38 +0000 (+0800) Subject: b=21951 Init scatterlist table. X-Git-Tag: v1_8_3_54~16 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=f1480c8eec3618567288e75b5ce756b519ca9447;p=fs%2Flustre-release.git b=21951 Init scatterlist table. i=liangzhen i=rahul --- diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4 index 855baf3..fc7f877 100644 --- a/lnet/autoconf/lustre-lnet.m4 +++ b/lnet/autoconf/lustre-lnet.m4 @@ -1534,6 +1534,22 @@ LB_LINUX_TRY_COMPILE([ ]) ]) +# from 2.6.24 please use sg_init_table +AC_DEFUN([LN_SCATTERLIST_INITTABLE], +[AC_MSG_CHECKING([if sg_init_table is defined]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + sg_init_table(NULL,0); +],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SCATTERLIST_INITTABLE, 1, + [sg_init_table is defined]) +],[ + AC_MSG_RESULT(NO) +]) +]) + # # LN_PROG_LINUX # @@ -1581,6 +1597,7 @@ LN_KMEM_CACHE_CREATE_DTOR # 2.6.24 LN_SYSCTL_UNNUMBERED LN_SCATTERLIST_SETPAGE +LN_SCATTERLIST_INITTABLE # 2.6.26 LN_SEM_COUNT # 2.6.27 diff --git a/lnet/include/libcfs/linux/portals_compat25.h b/lnet/include/libcfs/linux/portals_compat25.h index 60755ea..455151b 100644 --- a/lnet/include/libcfs/linux/portals_compat25.h +++ b/lnet/include/libcfs/linux/portals_compat25.h @@ -175,4 +175,8 @@ int proc_call_handler(void *data, int write, loff_t pos, void *buffer, int len)); +#ifndef HAVE_SCATTERLIST_INITTABLE +#define sg_init_table(sgl, n) memset(sgl, 0, sizeof(*sgl) * n) +#endif + #endif /* _PORTALS_COMPAT_H */ diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c index 638ffc5..4b5be58 100644 --- a/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -710,6 +710,28 @@ kiblnd_setup_rd_iov(lnet_ni_t *ni, kib_tx_t *tx, kib_rdma_desc_t *rd, return kiblnd_map_tx(ni, tx, rd, sg - tx->tx_frags); } +static inline int +get_kiov_length (int nkiov, lnet_kiov_t *kiov, int offset, int nob) +{ + int fragnob; + int count = 0; + + do { + LASSERT (nkiov > 0); + + fragnob = min((int)(kiov->kiov_len - offset), nob); + + count++; + + offset = 0; + kiov++; + nkiov--; + nob -= fragnob; + } while (nob > 0); + + return count; +} + int kiblnd_setup_rd_kiov (lnet_ni_t *ni, kib_tx_t *tx, kib_rdma_desc_t *rd, int nkiov, lnet_kiov_t *kiov, int offset, int nob) @@ -732,12 +754,13 @@ kiblnd_setup_rd_kiov (lnet_ni_t *ni, kib_tx_t *tx, kib_rdma_desc_t *rd, } sg = tx->tx_frags; + tx->tx_nfrags = get_kiov_length(nkiov, kiov, offset, nob); + sg_init_table(sg, tx->tx_nfrags); do { LASSERT (nkiov > 0); fragnob = min((int)(kiov->kiov_len - offset), nob); - memset(sg, 0, sizeof(*sg)); sg_set_page(sg, kiov->kiov_page, fragnob, kiov->kiov_offset + offset); sg++; diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index c63e6b4..814a5d6 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -420,6 +420,7 @@ AC_DEFUN([LC_POSIX_ACL_XATTR_H], [LB_CHECK_FILE([$LINUX/include/linux/posix_acl_xattr.h],[ AC_MSG_CHECKING([if linux/posix_acl_xattr.h can be compiled]) LB_LINUX_TRY_COMPILE([ + #include #include ],[],[ AC_MSG_RESULT([yes]) @@ -430,7 +431,7 @@ AC_DEFUN([LC_POSIX_ACL_XATTR_H], ]) $1 ],[ -AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) ]) ])