Message ID | 1405451837-8235-1-git-send-email-fabf@skynet.be (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Tue, Jul 15, 2014 at 09:17:17PM +0200, Fabian Frederick wrote: > Fix the following sparse warning: > fs/btrfs/send.c:518:51: warning: incorrect type in argument 2 (different address spaces) > fs/btrfs/send.c:518:51: expected char const [noderef] <asn:1>*<noident> > fs/btrfs/send.c:518:51: got char * > > We can safely use (const char __user *) with set_fs(KERNEL_DS) Yeah, that cast is correct. Reviewed-by: Zach Brown <zab@zabbo.net> > @@ -515,7 +515,8 @@ static int write_buf(struct file *filp, const void *buf, u32 len, loff_t *off) Though this probably wants to be rewritten in terms of kernel_write(). That'd give an opportunity to get rid of the sctx->send_off and have it use f_pos in the filp. - z -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> On 16 July 2014 at 19:20 Zach Brown <zab@zabbo.net> wrote: > > > On Tue, Jul 15, 2014 at 09:17:17PM +0200, Fabian Frederick wrote: > > Fix the following sparse warning: > > fs/btrfs/send.c:518:51: warning: incorrect type in argument 2 (different > > address spaces) > > fs/btrfs/send.c:518:51: expected char const [noderef] * > > fs/btrfs/send.c:518:51: got char * > > > > We can safely use (const char __user *) with set_fs(KERNEL_DS) > > Yeah, that cast is correct. > > Reviewed-by: Zach Brown <zab@zabbo.net> > > > @@ -515,7 +515,8 @@ static int write_buf(struct file *filp, const void *buf, > > u32 len, loff_t *off) > > Though this probably wants to be rewritten in terms of kernel_write(). > That'd give an opportunity to get rid of the sctx->send_off and have it > use f_pos in the filp. Do you mean directly call kernel_write from send_cmd/send_header ? I guess that loop around vfs_write in write_buf is there for something ... Fabian > > - z -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> > > @@ -515,7 +515,8 @@ static int write_buf(struct file *filp, const void *buf, > > > u32 len, loff_t *off) > > > > Though this probably wants to be rewritten in terms of kernel_write(). > > That'd give an opportunity to get rid of the sctx->send_off and have it > > use f_pos in the filp. > > Do you mean directly call kernel_write from send_cmd/send_header ? > I guess that loop around vfs_write in write_buf is there for something ... write_buf() could still exist to iterate over the buffer in the case of partial writes but it doesn't need to muck around with set_fs() and forcing casts. - z -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 6528aa6..b67e12e 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -515,7 +515,8 @@ static int write_buf(struct file *filp, const void *buf, u32 len, loff_t *off) set_fs(KERNEL_DS); while (pos < len) { - ret = vfs_write(filp, (char *)buf + pos, len - pos, off); + ret = vfs_write(filp, (__force const char __user *)buf + pos, + len - pos, off); /* TODO handle that correctly */ /*if (ret == -ERESTARTSYS) { continue;
Fix the following sparse warning: fs/btrfs/send.c:518:51: warning: incorrect type in argument 2 (different address spaces) fs/btrfs/send.c:518:51: expected char const [noderef] <asn:1>*<noident> fs/btrfs/send.c:518:51: got char * We can safely use (const char __user *) with set_fs(KERNEL_DS) __force added to avoid sparse-all warning: fs/btrfs/send.c:518:40: warning: cast adds address space to expression (<asn:1>) Signed-off-by: Fabian Frederick <fabf@skynet.be> --- This is untested. fs/btrfs/send.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)