Well I found this, so I think it's likely: root@gwboss2:~# dmesg |grep bitten [ 3196.193238] this would have bitten us in the ass [ 3196.193784] this would have bitten us in the ass
On Jan 29, 2013, at 9:54 AM, Josef Bacik <jba...@fusionio.com> wrote: > On Mon, Jan 28, 2013 at 05:12:12PM -0700, Sage Weil wrote: >> A ceph user observed a incorrect i_size on btrfs. The pattern looks like >> this: >> >> - some writes at low file offsets >> - a write to 4185600 len 8704 (i_size should be 4MB) >> - more writes to low offsets >> - a write to 4181504 len 4096 (abutts the write above) >> - a bit of time goes by... >> - stat returns 4186112 (4MB - 8192) >> - that's a fwe bytes to the right of the top write above. >> >> There are some logs showing the full read/write activity to the file at >> >> http://tracker.newdream.net/attachments/658/object_log.txt >> >> on issue >> >> http://tracker.newdream.net/issues/3810 >> >> The kernel was 3.7.0-030700-generic (and probably also observed on 3.7.1). >> >> Is this a known bug? > > Not known but I took a long hard look at our ordered i size updating and I > think > I spotted the bug. Could you run this patch and see if you get the printk? > If > you do then that was the problem and you should be good to go. It definitely > needs to be fixed, hopefully it's also your bug. Thanks, > > Josef > > > diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c > index cbd4838..dbd4905 100644 > --- a/fs/btrfs/ordered-data.c > +++ b/fs/btrfs/ordered-data.c > @@ -895,8 +895,14 @@ int btrfs_ordered_update_i_size(struct inode *inode, u64 > offset, > * if the disk i_size is already at the inode->i_size, or > * this ordered extent is inside the disk i_size, we're done > */ > - if (disk_i_size == i_size || offset <= disk_i_size) { > + if (disk_i_size == i_size) > goto out; > + > + if (offset <= disk_i_size) { > + if (ordered && ordered->outstanding_isize > disk_i_size) > + printk(KERN_ERR "this would have bitten us in the > ass\n"); > + else > + goto out; > } > > /* -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html