From: Dave Chinner Date: Fri, 11 Jul 2014 02:00:28 +0000 (+1000) Subject: libxfs: clear the buffer error while the buffer is locked X-Git-Tag: v3.2.1~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cee99cfa7ccb720f60b6cf77997792efbd90a413;p=thirdparty%2Fxfsprogs-dev.git libxfs: clear the buffer error while the buffer is locked When releasing a buffer, the error shoul dbe cleared while the lock is still held on the buffer to avoid racing with a new user of the buffer. This was pointed out in review of commit 6af7c1e ("libxfs: reused invalidated buffers leak state and data") but the version committed didn't have the fix. Thanks to Christoph Hellwig for checking and pointing out the oversight. Reported-by: Christoph Hellwig Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Dave Chinner --- diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index 0294c98dd..9ee89d30f 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -648,6 +648,12 @@ libxfs_getbuf_map(struct xfs_buftarg *btp, struct xfs_buf_map *map, void libxfs_putbuf(xfs_buf_t *bp) { + /* + * ensure that any errors on this use of the buffer don't carry + * over to the next user. + */ + bp->b_error = 0; + #ifdef XFS_BUF_TRACING pthread_mutex_lock(&libxfs_bcache->c_mutex); lock_buf_count--; @@ -663,11 +669,6 @@ libxfs_putbuf(xfs_buf_t *bp) pthread_mutex_unlock(&bp->b_lock); } } - /* - * ensure that any errors on this use of the buffer don't carry - * over to the next user. - */ - bp->b_error = 0; cache_node_put(libxfs_bcache, (struct cache_node *)bp); }