On Fri, May 24, 2013 at 03:39:10PM -0500, Ben Myers wrote: > On Fri, May 24, 2013 at 03:36:33PM -0500, Ben Myers wrote: > > On Tue, May 21, 2013 at 06:02:09PM +1000, Dave Chinner wrote: > > > From: Dave Chinner <dchinner@xxxxxxxxxx> > > > > > > When CRCs are enabled, the number of blocks needed to hold a remote > > > symlink on a 1k block size filesystem may be 2 instead of 1. The > > > transaction reservation for the allocated bloks was not taking this > > blocks > > > into account and only allocating one block. hence when trying to > > H > > > > fixed. > > > > > read or invalidate such symlinks, we are mapping a hole where there > > > should be a block and things go bad at that point. > > > > > > Fix the reservation to use the correct block count, clean up the > > > block count calculation similar to the remote attribute calculation, > > > and add a debug guard to detect when we don't write the entire > > > symlink to disk. > > > > > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> ... > > > @@ -525,9 +518,7 @@ xfs_symlink( > > > bp->b_ops = &xfs_symlink_buf_ops; > > > > > > byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt); > > > - if (pathlen < byte_cnt) { > > > - byte_cnt = pathlen; > > > - } > > > + byte_cnt = min(byte_cnt, pathlen); > > > > The min is necessary due since we can have up to three extents in here, > > according to the comment above the define for XFS_SYMLINK_MAPS. So byte_cnt > > can be less than pathlen. > > D'oh. I wanted to point out that it looks like this issue with 'min' here > should be causing problems with symlinks on non-crc enabled filesystems. What issue might that be? The result is identical in either case, I just converted this to min to be more concise and consistent with the same code loops in the remote attr copyin/copyout. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs