In comparison with this > bh = sb_bread(sb, oldblock); > if (!bh) > goto err; > bh->b_blocknr = newblk; > mark_buffer_dirty (bh); > unmap_underlying_metadata(bh->b_bdev, bh->b_blocknr); > this code like this didn't cause any "warrnings": struct buffer_head *newbh; bh = sb_bread(sb, oldblock); newbh = sb_bread(sb, newblock); if (!(bh || newbh)) goto err; memcpy(newbh->b_data, bh->b_data, sb->s_blocksize); mark_buffer_dirty(newbh); brelse(bh); brelse(newbh); invalidate_inode_buffers(inode); but it didn't optimal, much better what you suggest, but... -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/