Whamcloud - gitweb
LU-1824 obdfilter: reset lnb[n].rc in filter_grant_check()
authorYu Jian <yujian@whamcloud.com>
Mon, 10 Sep 2012 04:02:31 +0000 (12:02 +0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 10 Sep 2012 19:19:02 +0000 (15:19 -0400)
After patch http://review.whamcloud.com/3446 was committed,
filter_grant_check() would be called a second time if there
was no grant space for the write operation in the first time
it was called.

The issue was that all of the lnb[n].rc values were set to
-ENOSPC inside filter_grant_check() the first time it was
called, but at the second time, although there was some space
and the function returned 0 not -ENOSPC, the lnb[n].rc values
were not reset, all of them were still -ENOSPC, which caused
the assertion failure inside filter_commitrw_write().

This patch fixes the above issue.

Test-Parameters: envdefinitions=SLOW=yes testlist=obdfilter-survey
Signed-off-by: Yu Jian <yujian@whamcloud.com>
Change-Id: Ia0ec57a7d329136b4e1f2f82a337c6cf43f7f66c
Reviewed-on: http://review.whamcloud.com/3913
Tested-by: Hudson
Reviewed-by: hongchao.zhang <hongchao.zhang@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdfilter/filter_io.c

index 23947d5..a946d90 100644 (file)
@@ -540,6 +540,7 @@ static int filter_grant_check(struct obd_export *exp, struct obdo *oa,
                         if (tmp)
                                 bytes += blocksize - tmp;
 
                         if (tmp)
                                 bytes += blocksize - tmp;
 
+                       lnb[n].rc = 0;
                         if ((lnb[n].flags & OBD_BRW_FROM_GRANT) &&
                             (oa->o_valid & OBD_MD_FLGRANT)) {
                                 if (resend) {
                         if ((lnb[n].flags & OBD_BRW_FROM_GRANT) &&
                             (oa->o_valid & OBD_MD_FLGRANT)) {
                                 if (resend) {