From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Wilcox Subject: Re: aio_read const struct iovec * Date: Wed, 9 Sep 2009 05:53:50 -0600 Message-ID: <20090909115350.GA29320@parisc-linux.org> References: <20090909111838.GA14369@localdomain.by> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Al Viro , Jens Axboe , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org To: Sergey Senozhatsky Return-path: Received: from palinux.external.hp.com ([192.25.206.14]:35341 "EHLO mail.parisc-linux.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752102AbZIILxt (ORCPT ); Wed, 9 Sep 2009 07:53:49 -0400 Content-Disposition: inline In-Reply-To: <20090909111838.GA14369@localdomain.by> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Wed, Sep 09, 2009 at 02:18:38PM +0300, Sergey Senozhatsky wrote: > Hello, > I have the following question: > struct file_operations { > ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); > ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); > At the same time: > ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); > ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); > > 'const struct iovec *' both for aio_write and aio_read. > And "char __user *" and "const char __user *" for read/write. > > For example, > pipe_read(struct kiocb *iocb, const struct iovec *_iov, > unsigned long nr_segs, loff_t ppos) > { > struct iovec *iov = (struct iovec *)_iov; > > Could we avoid 'struct iovec *iov = (struct iovec *)_iov;' by changing aio_read 'const struct iovec *' > to 'struct iovec *'? If you try it, it'll be educational for you to see where it fails ;-) But if you're too impatient, aio_rw_vect_retry() will be (one of) the problems: ssize_t (*rw_op)(struct kiocb *, const struct iovec *, unsigned long, loff_t); [...] rw_op = file->f_op->aio_read; [...] rw_op = file->f_op->aio_write; so aio_read and aio_write need to have the same prototype. Now, I'm not sure why it's more beneficial to have a lying const in the aio_read prototype than simply omitting the const from the aio_write prototype ... but I'm sure if you try that, you'll find a good reason too. -- Matthew Wilcox Intel Open Source Technology Centre "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step."