On Mon, Mar 03, 2014 at 03:25:28PM +0100, David Sterba wrote: > On Mon, Mar 03, 2014 at 05:24:43PM +0800, Liu Bo wrote: > > --- a/fs/btrfs/send.c > > +++ b/fs/btrfs/send.c > > @@ -3972,6 +3972,7 @@ static ssize_t fill_read_buf(struct send_ctx *sctx, > > u64 offset, u32 len) > > pgoff_t last_index; > > unsigned pg_offset = offset & ~PAGE_CACHE_MASK; > > ssize_t ret = 0; > > + struct file_ra_state *ra = NULL; > > > > key.objectid = sctx->cur_ino; > > key.type = BTRFS_INODE_ITEM_KEY; > > @@ -3991,6 +3992,17 @@ static ssize_t fill_read_buf(struct send_ctx *sctx, > > u64 offset, u32 len) > > goto out; > > > > last_index = (offset + len - 1) >> PAGE_CACHE_SHIFT; > > + > > + /* initial readahead */ > > + ra = kzalloc(sizeof(*ra), GFP_NOFS); > > + if (!ra) { > > + ret = -ENOMEM; > > This should not be a hard failure, it can continue without RA for this > buffer. Besides, the RA buffer can be allocated at the beginning of send > operation and pointer stored in the send context.
Good point, I think we can fold this into 'struct send_ctx', do you agree? Thanks, -liubo -- 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