All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oren Laadan <orenl@cs.columbia.edu>
To: Nick Piggin <npiggin@suse.de>
Cc: linux-fsdevel@vger.kernel.org,
	containers@lists.linux-foundation.org,
	Matt Helsley <matthltc@us.ibm.com>,
	Andreas Dilger <adilger@sun.com>
Subject: Re: [C/R v20][PATCH 20/96] c/r: make file_pos_read/write() public
Date: Mon, 22 Mar 2010 20:56:39 -0400	[thread overview]
Message-ID: <4BA811C7.80800@cs.columbia.edu> (raw)
In-Reply-To: <20100323004304.GL26495@laptop>



Nick Piggin wrote:
> On Mon, Mar 22, 2010 at 08:12:45PM -0400, Oren Laadan wrote:
>> On Mon, 22 Mar 2010, Nick Piggin wrote:
>>
>>> On Thu, Mar 18, 2010 at 08:59:45PM -0400, Oren Laadan wrote:
>>>> These two are used in the next patch when calling vfs_read/write()
>>> Said next patch didn't seem to make it to fsdevel.
>> Thanks for reviewing, and sorry about this glitch - see below.
>>
>>> Should it at least go to fs/internal.h?
>> Sure.
>>
>> So Here is the relevant hunk from said patch (the entire
>> patch is: https://patchwork.kernel.org/patch/86389/):
>>
>> +/*
>> + * Helpers to write(read) from(to) kernel space to(from) the checkpoint
>> + * image file descriptor (similar to how a core-dump is performed).
>> + *
>> + *   ckpt_kwrite() - write a kernel-space buffer to the checkpoint image
>> + *   ckpt_kread() - read from the checkpoint image to a kernel-space buffer
> 
> Hmm, OK. Slightly-more-write(2) type of write.
> 
> fs/splice.c code also has a kernel_write and readv. Not sure if there is
> any other common code. But maybe it would be better to put together some
> useful helpers under fs/ rather than a ckpt specific thing.

Right. Another place is fs/exec.c that provides kernel_read().
I'll put the common code in kernel/read_write.c then.

Oren.

> 
>> + */
>> +
>> +static inline int _ckpt_kwrite(struct file *file, void *addr, int count)
>> +{
>> +	void __user *uaddr = (__force void __user *) addr;
>> +	ssize_t nwrite;
>> +	int nleft;
>> +
>> +	for (nleft = count; nleft; nleft -= nwrite) {
>> +		loff_t pos = file_pos_read(file);
>> +		nwrite = vfs_write(file, uaddr, nleft, &pos);
>> +		file_pos_write(file, pos);
>> +		if (nwrite < 0) {
>> +			if (nwrite == -EAGAIN)
>> +				nwrite = 0;
>> +			else
>> +				return nwrite;
>> +		}
>> +		uaddr += nwrite;
>> +	}
>> +	return 0;
>> +}
>> +
>> +int ckpt_kwrite(struct ckpt_ctx *ctx, void *addr, int count)
>> +{
>> +	mm_segment_t fs;
>> +	int ret;
>> +
>> +	fs = get_fs();
>> +	set_fs(KERNEL_DS);
>> +	ret = _ckpt_kwrite(ctx->file, addr, count);
>> +	set_fs(fs);
>> +
>> +	ctx->total += count;
>> +	return ret;
>> +}
>> +
>> +static inline int _ckpt_kread(struct file *file, void *addr, int count)
>> +{
>> +	void __user *uaddr = (__force void __user *) addr;
>> +	ssize_t nread;
>> +	int nleft;
>> +
>> +	for (nleft = count; nleft; nleft -= nread) {
>> +		loff_t pos = file_pos_read(file);
>> +		nread = vfs_read(file, uaddr, nleft, &pos);
>> +		file_pos_write(file, pos);
>> +		if (nread <= 0) {
>> +			if (nread == -EAGAIN) {
>> +				nread = 0;
>> +				continue;
>> +			} else if (nread == 0)
>> +				nread = -EPIPE;		/* unexecpted EOF */
>> +			return nread;
>> +		}
>> +		uaddr += nread;
>> +	}
>> +	return 0;
>> +}
>> +
>> +int ckpt_kread(struct ckpt_ctx *ctx, void *addr, int count)
>> +{
>> +	mm_segment_t fs;
>> +	int ret;
>> +
>> +	fs = get_fs();
>> +	set_fs(KERNEL_DS);
>> +	ret = _ckpt_kread(ctx->file , addr, count);
>> +	set_fs(fs);
>> +
>> +	ctx->total += count;
>> +	return ret;
>> +}
>>
>> Oren.
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  reply	other threads:[~2010-03-23  0:55 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-19  0:59 [C/R v20][PATCH 00/96] Linux Checkpoint-Restart - v20 Oren Laadan
     [not found] ` <1268960401-16680-1-git-send-email-orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-03-19  0:59   ` [C/R v20][PATCH 20/96] c/r: make file_pos_read/write() public Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 37/96] c/r: introduce new 'file_operations': ->checkpoint, ->collect() Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 38/96] c/r: dump open file descriptors Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 39/96] c/r: restore " Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 40/96] c/r: introduce method '->checkpoint()' in struct vm_operations_struct Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 44/96] c/r: add generic '->checkpoint' f_op to ext fses Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 45/96] c/r: add generic '->checkpoint()' f_op to simple devices Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 46/96] c/r: add checkpoint operation for opened files of generic filesystems Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 50/96] splice: export pipe/file-to-pipe/file functionality Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 51/96] c/r: support for open pipes Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 52/96] c/r: checkpoint and restore FIFOs Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 53/96] c/r: refuse to checkpoint if monitoring directories with dnotify Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 66/96] c/r: restore file->f_cred Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 82/96] c/r: checkpoint/restart epoll sets Oren Laadan
2010-03-19  0:59   ` [C/R v20][PATCH 83/96] c/r: checkpoint/restart eventfd Oren Laadan
2010-03-19  1:00   ` [C/R v20][PATCH 84/96] c/r: restore task fs_root and pwd (v3) Oren Laadan
2010-03-19  1:00   ` [C/R v20][PATCH 85/96] c/r: preliminary support mounts namespace Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 20/96] c/r: make file_pos_read/write() public Oren Laadan
     [not found]   ` <1268960401-16680-2-git-send-email-orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-03-22  6:31     ` Nick Piggin
2010-03-22  6:31   ` Nick Piggin
2010-03-23  0:12     ` Oren Laadan
     [not found]       ` <Pine.LNX.4.64.1003221959450.1520-CXF6herHY6ykSYb+qCZC/1i27PF6R63G9nwVQlTi/Pw@public.gmane.org>
2010-03-23  0:43         ` Nick Piggin
2010-03-23  0:43       ` Nick Piggin
2010-03-23  0:56         ` Oren Laadan [this message]
2010-03-23  0:56         ` Oren Laadan
2010-03-23  0:12     ` Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 37/96] c/r: introduce new 'file_operations': ->checkpoint, ->collect() Oren Laadan
     [not found]   ` <1268960401-16680-3-git-send-email-orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-03-22  6:34     ` Nick Piggin
2010-03-22  6:34   ` Nick Piggin
2010-03-22 10:16     ` Matt Helsley
2010-03-22 10:16     ` Matt Helsley
2010-03-22 11:00       ` Nick Piggin
     [not found]       ` <20100322101635.GC20796-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-03-22 11:00         ` Nick Piggin
2010-03-19  0:59 ` [C/R v20][PATCH 38/96] c/r: dump open file descriptors Oren Laadan
2010-03-19 23:19   ` Andreas Dilger
     [not found]     ` <F18D161D-850B-4C82-83D5-1F19D573E84F-xsfywfwIY+M@public.gmane.org>
2010-03-20  4:43       ` Matt Helsley
2010-03-20  4:43     ` Matt Helsley
2010-03-21 17:27       ` Jamie Lokier
2010-03-21 19:40         ` Serge E. Hallyn
     [not found]           ` <20100321194019.GA11714-A9i7LUbDfNHQT0dZR+AlfA@public.gmane.org>
2010-03-21 20:58             ` Daniel Lezcano
2010-03-21 20:58           ` Daniel Lezcano
2010-03-21 21:36             ` Oren Laadan
     [not found]               ` <4BA6914D.8040007-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-03-21 23:31                 ` xing lin
2010-03-22  8:40                 ` Daniel Lezcano
2010-03-22  8:40               ` Daniel Lezcano
     [not found]             ` <4BA68884.3080003-GANU6spQydw@public.gmane.org>
2010-03-21 21:36               ` Oren Laadan
2010-03-22  2:12               ` Matt Helsley
2010-03-22  2:12             ` Matt Helsley
     [not found]               ` <20100322021242.GI2887-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-03-22 13:51                 ` Jamie Lokier
2010-03-22 23:18                 ` Andreas Dilger
2010-03-22 13:51               ` Jamie Lokier
2010-03-22 23:18               ` Andreas Dilger
     [not found]         ` <20100321172703.GC4174-yetKDKU6eevNLxjTenLetw@public.gmane.org>
2010-03-21 19:40           ` Serge E. Hallyn
2010-03-22  1:06           ` Matt Helsley
2010-03-22  1:06         ` Matt Helsley
     [not found]           ` <20100322010606.GG2887-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-03-22  2:20             ` Jamie Lokier
2010-03-22  2:55             ` Serge E. Hallyn
2010-03-22  2:20           ` Jamie Lokier
2010-03-22  3:37             ` Matt Helsley
2010-03-22 14:13               ` Jamie Lokier
     [not found]               ` <20100322033724.GA20796-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-03-22 14:13                 ` Jamie Lokier
     [not found]             ` <20100322022003.GA16462-yetKDKU6eevNLxjTenLetw@public.gmane.org>
2010-03-22  3:37               ` Matt Helsley
2010-03-22  2:55           ` Serge E. Hallyn
     [not found]       ` <20100320044310.GC2887-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-03-21 17:27         ` Jamie Lokier
     [not found]   ` <1268960401-16680-4-git-send-email-orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-03-19 23:19     ` Andreas Dilger
2010-03-22 10:30     ` Nick Piggin
2010-03-22 13:22       ` Matt Helsley
2010-03-22 13:22       ` Matt Helsley
2010-03-22 13:38         ` Nick Piggin
     [not found]         ` <20100322132232.GD20796-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-03-22 13:38           ` Nick Piggin
2010-03-19  0:59 ` [C/R v20][PATCH 39/96] c/r: restore " Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 40/96] c/r: introduce method '->checkpoint()' in struct vm_operations_struct Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 44/96] c/r: add generic '->checkpoint' f_op to ext fses Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 45/96] c/r: add generic '->checkpoint()' f_op to simple devices Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 46/96] c/r: add checkpoint operation for opened files of generic filesystems Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 50/96] splice: export pipe/file-to-pipe/file functionality Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 51/96] c/r: support for open pipes Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 52/96] c/r: checkpoint and restore FIFOs Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 53/96] c/r: refuse to checkpoint if monitoring directories with dnotify Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 66/96] c/r: restore file->f_cred Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 82/96] c/r: checkpoint/restart epoll sets Oren Laadan
2010-03-19  0:59 ` [C/R v20][PATCH 83/96] c/r: checkpoint/restart eventfd Oren Laadan
2010-03-19  1:00 ` [C/R v20][PATCH 84/96] c/r: restore task fs_root and pwd (v3) Oren Laadan
2010-03-19  1:00 ` [C/R v20][PATCH 85/96] c/r: preliminary support mounts namespace Oren Laadan
  -- strict thread matches above, loose matches on Subject: below --
2010-03-17 16:07 [C/R v20][PATCH 00/96] Linux Checkpoint-Restart - v20 Oren Laadan
2010-03-17 16:07 ` [C/R v20][PATCH 01/96] eclone (1/11): Factor out code to allocate pidmap page Oren Laadan
2010-03-17 16:07   ` [C/R v20][PATCH 02/96] eclone (2/11): Have alloc_pidmap() return actual error code Oren Laadan
2010-03-17 16:07     ` [C/R v20][PATCH 03/96] eclone (3/11): Define set_pidmap() function Oren Laadan
2010-03-17 16:07       ` [C/R v20][PATCH 04/96] eclone (4/11): Add target_pids parameter to alloc_pid() Oren Laadan
2010-03-17 16:07         ` [C/R v20][PATCH 05/96] eclone (5/11): Add target_pids parameter to copy_process() Oren Laadan
2010-03-17 16:07           ` [C/R v20][PATCH 06/96] eclone (6/11): Check invalid clone flags Oren Laadan
2010-03-17 16:07             ` [C/R v20][PATCH 07/96] eclone (7/11): Define do_fork_with_pids() Oren Laadan
2010-03-17 16:07               ` [C/R v20][PATCH 08/96] eclone (8/11): Implement sys_eclone for x86 (32,64) Oren Laadan
2010-03-17 16:07                 ` [C/R v20][PATCH 09/96] eclone (9/11): Implement sys_eclone for s390 Oren Laadan
2010-03-17 16:07                   ` [C/R v20][PATCH 10/96] eclone (10/11): Implement sys_eclone for powerpc Oren Laadan
2010-03-17 16:07                     ` [C/R v20][PATCH 11/96] eclone (11/11): Document sys_eclone Oren Laadan
2010-03-17 16:08                       ` [C/R v20][PATCH 12/96] c/r: extend arch_setup_additional_pages() Oren Laadan
2010-03-17 16:08                         ` [C/R v20][PATCH 13/96] c/r: break out new_user_ns() Oren Laadan
2010-03-17 16:08                           ` [C/R v20][PATCH 14/96] c/r: split core function out of some set*{u,g}id functions Oren Laadan
2010-03-17 16:08                             ` [C/R v20][PATCH 15/96] cgroup freezer: Fix buggy resume test for tasks frozen with cgroup freezer Oren Laadan
2010-03-17 16:08                               ` [C/R v20][PATCH 16/96] cgroup freezer: Update stale locking comments Oren Laadan
2010-03-17 16:08                                 ` [C/R v20][PATCH 17/96] cgroup freezer: Add CHECKPOINTING state to safeguard container checkpoint Oren Laadan
2010-03-17 16:08                                   ` [C/R v20][PATCH 18/96] cgroup freezer: interface to freeze a cgroup from within the kernel Oren Laadan
2010-03-17 16:08                                     ` [C/R v20][PATCH 19/96] Namespaces submenu Oren Laadan
2010-03-17 16:08                                       ` [C/R v20][PATCH 20/96] c/r: make file_pos_read/write() public Oren Laadan
2010-03-17 16:08                                         ` Oren Laadan
     [not found]                                       ` <1268842164-5590-20-git-send-email-orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-03-17 16:08                                         ` Oren Laadan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BA811C7.80800@cs.columbia.edu \
    --to=orenl@cs.columbia.edu \
    --cc=adilger@sun.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=matthltc@us.ibm.com \
    --cc=npiggin@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.