Re: [PATCH] Btrfs-progs/receive: sparse and pre-allocated file support, for btrfs-send mechanism

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 23, 2013 at 07:04:33PM +0800, Chen Yang wrote:
> When sending a file with sparse or pre-allocated part,
> these parts will be sent as ZERO streams, and it's unnecessary.
> 
> To improve this, we add a punch command on the sending side, so the
> receiving side changed with it. The main change is adding the punch
> processing to receive command.
> 
> +static int process_punch(const char *path, u64 offset, u64 len, void *user)
> +{
> +	int ret = 0;
> +	struct btrfs_receive *r = user;
> +	char *full_path = path_cat(r->full_subvol_path, path);
> +
> +	ret = open_inode_for_write(r, full_path);
> +	if (ret < 0)
> +		goto out;
> +
> +	ret = fallocate(r->write_fd,
> +		FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
> +		offset, len);

This unnecessarily fails if PUNCH_HOLE is not supported by the kernel
version, some sort of fallback should be applied.

> +	if (ret < 0) {
> +		ret = -errno;
> +		fprintf(stderr, "ERROR: punch %s failed. %s\n",
> +				path, strerror(-ret));
> +		goto out;
> +	}
> +
> +out:
> +	free(full_path);
> +	return ret;
> +}

david
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux