diff options
Diffstat (limited to 'fs/nilfs2/btnode.c')
| -rw-r--r-- | fs/nilfs2/btnode.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/nilfs2/btnode.c b/fs/nilfs2/btnode.c index e956f886a1a1..5710833ac1cc 100644 --- a/fs/nilfs2/btnode.c +++ b/fs/nilfs2/btnode.c @@ -285,6 +285,14 @@ void nilfs_btnode_abort_change_key(struct address_space *btnc,  	if (nbh == NULL) {	/* blocksize == pagesize */  		xa_erase_irq(&btnc->i_pages, newkey);  		unlock_page(ctxt->bh->b_page); -	} else -		brelse(nbh); +	} else { +		/* +		 * When canceling a buffer that a prepare operation has +		 * allocated to copy a node block to another location, use +		 * nilfs_btnode_delete() to initialize and release the buffer +		 * so that the buffer flags will not be in an inconsistent +		 * state when it is reallocated. +		 */ +		nilfs_btnode_delete(nbh); +	}  }  |