Re: [PATCH 06/16] fs: fix kernel_write prototype

2017-09-01 Thread Christoph Hellwig
On Wed, Aug 30, 2017 at 04:39:00PM +0100, Al Viro wrote:
> On Wed, Aug 30, 2017 at 04:59:57PM +0200, Christoph Hellwig wrote:
> 
> > for (prot = 0; prot < prot_length;) {
> > sector_t len = min_t(sector_t, bufsize, prot_length - prot);
> > -   ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
> > +   ssize_t ret = kernel_write(prot_fd, buf, len, );
> >  
> > if (ret != len) {
> > pr_err("vfs_write to prot file failed: %zd\n", ret);
> > return ret < 0 ? ret : -ENODEV;
> > }
> > -   prot += ret;
> > }
> 
> And that loop will terminate because of...?  IOW, the same bug class as in
> the kernel_read() patch.

Also fixed.


Re: [PATCH 06/16] fs: fix kernel_write prototype

2017-09-01 Thread Christoph Hellwig
On Wed, Aug 30, 2017 at 04:39:00PM +0100, Al Viro wrote:
> On Wed, Aug 30, 2017 at 04:59:57PM +0200, Christoph Hellwig wrote:
> 
> > for (prot = 0; prot < prot_length;) {
> > sector_t len = min_t(sector_t, bufsize, prot_length - prot);
> > -   ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
> > +   ssize_t ret = kernel_write(prot_fd, buf, len, );
> >  
> > if (ret != len) {
> > pr_err("vfs_write to prot file failed: %zd\n", ret);
> > return ret < 0 ? ret : -ENODEV;
> > }
> > -   prot += ret;
> > }
> 
> And that loop will terminate because of...?  IOW, the same bug class as in
> the kernel_read() patch.

Also fixed.


Re: [PATCH 06/16] fs: fix kernel_write prototype

2017-08-30 Thread Al Viro
On Wed, Aug 30, 2017 at 04:59:57PM +0200, Christoph Hellwig wrote:

>   for (prot = 0; prot < prot_length;) {
>   sector_t len = min_t(sector_t, bufsize, prot_length - prot);
> - ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
> + ssize_t ret = kernel_write(prot_fd, buf, len, );
>  
>   if (ret != len) {
>   pr_err("vfs_write to prot file failed: %zd\n", ret);
>   return ret < 0 ? ret : -ENODEV;
>   }
> - prot += ret;
>   }

And that loop will terminate because of...?  IOW, the same bug class as in
the kernel_read() patch.


Re: [PATCH 06/16] fs: fix kernel_write prototype

2017-08-30 Thread Al Viro
On Wed, Aug 30, 2017 at 04:59:57PM +0200, Christoph Hellwig wrote:

>   for (prot = 0; prot < prot_length;) {
>   sector_t len = min_t(sector_t, bufsize, prot_length - prot);
> - ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
> + ssize_t ret = kernel_write(prot_fd, buf, len, );
>  
>   if (ret != len) {
>   pr_err("vfs_write to prot file failed: %zd\n", ret);
>   return ret < 0 ? ret : -ENODEV;
>   }
> - prot += ret;
>   }

And that loop will terminate because of...?  IOW, the same bug class as in
the kernel_read() patch.


[PATCH 06/16] fs: fix kernel_write prototype

2017-08-30 Thread Christoph Hellwig
Make the position an in/out argument like all the other read/write
helpers.

Signed-off-by: Christoph Hellwig 
---
 drivers/mtd/nand/nandsim.c| 2 +-
 drivers/target/target_core_alua.c | 3 ++-
 drivers/target/target_core_file.c | 3 +--
 drivers/target/target_core_pr.c   | 3 ++-
 fs/ecryptfs/read_write.c  | 2 +-
 fs/read_write.c   | 4 ++--
 include/linux/fs.h| 2 +-
 kernel/sysctl_binary.c| 9 ++---
 security/keys/big_key.c   | 3 ++-
 9 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index a8089656879a..3300a77667fb 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -1395,7 +1395,7 @@ static ssize_t write_file(struct nandsim *ns, struct file 
*file, void *buf, size
if (err)
return err;
noreclaim_flag = memalloc_noreclaim_save();
-   tx = kernel_write(file, buf, count, pos);
+   tx = kernel_write(file, buf, count, );
memalloc_noreclaim_restore(noreclaim_flag);
put_pages(ns);
return tx;
diff --git a/drivers/target/target_core_alua.c 
b/drivers/target/target_core_alua.c
index a91b7c25ffd4..928127642574 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -896,13 +896,14 @@ static int core_alua_write_tpg_metadata(
u32 md_buf_len)
 {
struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600);
+   loff_t pos = 0;
int ret;
 
if (IS_ERR(file)) {
pr_err("filp_open(%s) for ALUA metadata failed\n", path);
return -ENODEV;
}
-   ret = kernel_write(file, md_buf, md_buf_len, 0);
+   ret = kernel_write(file, md_buf, md_buf_len, );
if (ret < 0)
pr_err("Error writing ALUA metadata file: %s\n", path);
fput(file);
diff --git a/drivers/target/target_core_file.c 
b/drivers/target/target_core_file.c
index 24cf11d9e50a..21e65d69ab2e 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -443,13 +443,12 @@ fd_do_prot_fill(struct se_device *se_dev, sector_t lba, 
sector_t nolb,
 
for (prot = 0; prot < prot_length;) {
sector_t len = min_t(sector_t, bufsize, prot_length - prot);
-   ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
+   ssize_t ret = kernel_write(prot_fd, buf, len, );
 
if (ret != len) {
pr_err("vfs_write to prot file failed: %zd\n", ret);
return ret < 0 ? ret : -ENODEV;
}
-   prot += ret;
}
 
return 0;
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 6d5def64db61..dd2cd8048582 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -1974,6 +1974,7 @@ static int __core_scsi3_write_aptpl_to_file(
char path[512];
u32 pr_aptpl_buf_len;
int ret;
+   loff_t pos = 0;
 
memset(path, 0, 512);
 
@@ -1993,7 +1994,7 @@ static int __core_scsi3_write_aptpl_to_file(
 
pr_aptpl_buf_len = (strlen(buf) + 1); /* Add extra for NULL */
 
-   ret = kernel_write(file, buf, pr_aptpl_buf_len, 0);
+   ret = kernel_write(file, buf, pr_aptpl_buf_len, );
 
if (ret < 0)
pr_debug("Error writing APTPL metadata file: %s\n", path);
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
index d8af0e99bfaf..c596e7c03424 100644
--- a/fs/ecryptfs/read_write.c
+++ b/fs/ecryptfs/read_write.c
@@ -47,7 +47,7 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char 
*data,
lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
if (!lower_file)
return -EIO;
-   rc = kernel_write(lower_file, data, size, offset);
+   rc = kernel_write(lower_file, data, size, );
mark_inode_dirty_sync(ecryptfs_inode);
return rc;
 }
diff --git a/fs/read_write.c b/fs/read_write.c
index 1966fd6e03ce..82f0111b98cf 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -513,7 +513,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, 
size_t count, loff_t
 EXPORT_SYMBOL(__kernel_write);
 
 ssize_t kernel_write(struct file *file, const char *buf, size_t count,
-   loff_t pos)
+   loff_t *pos)
 {
mm_segment_t old_fs;
ssize_t res;
@@ -521,7 +521,7 @@ ssize_t kernel_write(struct file *file, const char *buf, 
size_t count,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
-   res = vfs_write(file, (__force const char __user *)buf, count, );
+   res = vfs_write(file, (__force const char __user *)buf, count, pos);
set_fs(old_fs);
 
return res;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 

[PATCH 06/16] fs: fix kernel_write prototype

2017-08-30 Thread Christoph Hellwig
Make the position an in/out argument like all the other read/write
helpers.

Signed-off-by: Christoph Hellwig 
---
 drivers/mtd/nand/nandsim.c| 2 +-
 drivers/target/target_core_alua.c | 3 ++-
 drivers/target/target_core_file.c | 3 +--
 drivers/target/target_core_pr.c   | 3 ++-
 fs/ecryptfs/read_write.c  | 2 +-
 fs/read_write.c   | 4 ++--
 include/linux/fs.h| 2 +-
 kernel/sysctl_binary.c| 9 ++---
 security/keys/big_key.c   | 3 ++-
 9 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index a8089656879a..3300a77667fb 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -1395,7 +1395,7 @@ static ssize_t write_file(struct nandsim *ns, struct file 
*file, void *buf, size
if (err)
return err;
noreclaim_flag = memalloc_noreclaim_save();
-   tx = kernel_write(file, buf, count, pos);
+   tx = kernel_write(file, buf, count, );
memalloc_noreclaim_restore(noreclaim_flag);
put_pages(ns);
return tx;
diff --git a/drivers/target/target_core_alua.c 
b/drivers/target/target_core_alua.c
index a91b7c25ffd4..928127642574 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -896,13 +896,14 @@ static int core_alua_write_tpg_metadata(
u32 md_buf_len)
 {
struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600);
+   loff_t pos = 0;
int ret;
 
if (IS_ERR(file)) {
pr_err("filp_open(%s) for ALUA metadata failed\n", path);
return -ENODEV;
}
-   ret = kernel_write(file, md_buf, md_buf_len, 0);
+   ret = kernel_write(file, md_buf, md_buf_len, );
if (ret < 0)
pr_err("Error writing ALUA metadata file: %s\n", path);
fput(file);
diff --git a/drivers/target/target_core_file.c 
b/drivers/target/target_core_file.c
index 24cf11d9e50a..21e65d69ab2e 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -443,13 +443,12 @@ fd_do_prot_fill(struct se_device *se_dev, sector_t lba, 
sector_t nolb,
 
for (prot = 0; prot < prot_length;) {
sector_t len = min_t(sector_t, bufsize, prot_length - prot);
-   ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
+   ssize_t ret = kernel_write(prot_fd, buf, len, );
 
if (ret != len) {
pr_err("vfs_write to prot file failed: %zd\n", ret);
return ret < 0 ? ret : -ENODEV;
}
-   prot += ret;
}
 
return 0;
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 6d5def64db61..dd2cd8048582 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -1974,6 +1974,7 @@ static int __core_scsi3_write_aptpl_to_file(
char path[512];
u32 pr_aptpl_buf_len;
int ret;
+   loff_t pos = 0;
 
memset(path, 0, 512);
 
@@ -1993,7 +1994,7 @@ static int __core_scsi3_write_aptpl_to_file(
 
pr_aptpl_buf_len = (strlen(buf) + 1); /* Add extra for NULL */
 
-   ret = kernel_write(file, buf, pr_aptpl_buf_len, 0);
+   ret = kernel_write(file, buf, pr_aptpl_buf_len, );
 
if (ret < 0)
pr_debug("Error writing APTPL metadata file: %s\n", path);
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
index d8af0e99bfaf..c596e7c03424 100644
--- a/fs/ecryptfs/read_write.c
+++ b/fs/ecryptfs/read_write.c
@@ -47,7 +47,7 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char 
*data,
lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
if (!lower_file)
return -EIO;
-   rc = kernel_write(lower_file, data, size, offset);
+   rc = kernel_write(lower_file, data, size, );
mark_inode_dirty_sync(ecryptfs_inode);
return rc;
 }
diff --git a/fs/read_write.c b/fs/read_write.c
index 1966fd6e03ce..82f0111b98cf 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -513,7 +513,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, 
size_t count, loff_t
 EXPORT_SYMBOL(__kernel_write);
 
 ssize_t kernel_write(struct file *file, const char *buf, size_t count,
-   loff_t pos)
+   loff_t *pos)
 {
mm_segment_t old_fs;
ssize_t res;
@@ -521,7 +521,7 @@ ssize_t kernel_write(struct file *file, const char *buf, 
size_t count,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
-   res = vfs_write(file, (__force const char __user *)buf, count, );
+   res = vfs_write(file, (__force const char __user *)buf, count, pos);
set_fs(old_fs);
 
return res;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index