In mdd_iterate_xattrs(), we are resetting the xbuf.lb_len
to a smaller value returned by linkea_overflow_shrink().
If that's the last xattr we gonna process, we could deduct
less than originally allocated size from obd_memory stats,
failing the memleak check later.
Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Change-Id: I6175a91c61ceb0e37ab889d0cfd904f4993ab5cc
Reviewed-on: https://review.whamcloud.com/35333
Reviewed-by: Li Xi <lixi@ddn.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
struct mdd_thread_info *info = mdd_env_info(env);
char *xname;
struct lu_buf list_xbuf;
+ struct lu_buf cbxbuf;
struct lu_buf xbuf = { NULL };
int list_xsize;
int xlen;
if (rc < 0)
GOTO(out, rc);
+ cbxbuf = xbuf;
repeat:
- rc = cb(env, tobj, &xbuf, xname, 0, handle);
+ rc = cb(env, tobj, &cbxbuf, xname, 0, handle);
if (unlikely(rc == -ENOSPC &&
strcmp(xname, XATTR_NAME_LINK) == 0)) {
rc = linkea_overflow_shrink(
- (struct linkea_data *)(xbuf.lb_buf));
+ (struct linkea_data *)(cbxbuf.lb_buf));
if (likely(rc > 0)) {
- xbuf.lb_len = rc;
+ cbxbuf.lb_len = rc;
goto repeat;
}
}