mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
target: writev() on single-element vector is pointless
... in other news: filp_open() can't return a struct file with NULL dentry filp_open() can't return a struct file negative dentry filp_close() of something that never had been in any descriptor tables is pointless - fput() is all you need Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7bb307e894
commit
0e9b10a90f
@ -27,6 +27,7 @@
|
|||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/configfs.h>
|
#include <linux/configfs.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
#include <linux/file.h>
|
||||||
#include <scsi/scsi.h>
|
#include <scsi/scsi.h>
|
||||||
#include <scsi/scsi_cmnd.h>
|
#include <scsi/scsi_cmnd.h>
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
@ -715,36 +716,18 @@ static int core_alua_write_tpg_metadata(
|
|||||||
unsigned char *md_buf,
|
unsigned char *md_buf,
|
||||||
u32 md_buf_len)
|
u32 md_buf_len)
|
||||||
{
|
{
|
||||||
mm_segment_t old_fs;
|
struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600);
|
||||||
struct file *file;
|
int ret;
|
||||||
struct iovec iov[1];
|
|
||||||
int flags = O_RDWR | O_CREAT | O_TRUNC, ret;
|
|
||||||
|
|
||||||
memset(iov, 0, sizeof(struct iovec));
|
if (IS_ERR(file)) {
|
||||||
|
pr_err("filp_open(%s) for ALUA metadata failed\n", path);
|
||||||
file = filp_open(path, flags, 0600);
|
|
||||||
if (IS_ERR(file) || !file || !file->f_dentry) {
|
|
||||||
pr_err("filp_open(%s) for ALUA metadata failed\n",
|
|
||||||
path);
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
ret = kernel_write(file, md_buf, md_buf_len, 0);
|
||||||
iov[0].iov_base = &md_buf[0];
|
if (ret < 0)
|
||||||
iov[0].iov_len = md_buf_len;
|
|
||||||
|
|
||||||
old_fs = get_fs();
|
|
||||||
set_fs(get_ds());
|
|
||||||
ret = vfs_writev(file, &iov[0], 1, &file->f_pos);
|
|
||||||
set_fs(old_fs);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
|
||||||
pr_err("Error writing ALUA metadata file: %s\n", path);
|
pr_err("Error writing ALUA metadata file: %s\n", path);
|
||||||
filp_close(file, NULL);
|
fput(file);
|
||||||
return -EIO;
|
return ret ? -EIO : 0;
|
||||||
}
|
|
||||||
filp_close(file, NULL);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
|
#include <linux/file.h>
|
||||||
#include <scsi/scsi.h>
|
#include <scsi/scsi.h>
|
||||||
#include <scsi/scsi_cmnd.h>
|
#include <scsi/scsi_cmnd.h>
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
@ -1957,13 +1958,10 @@ static int __core_scsi3_write_aptpl_to_file(
|
|||||||
{
|
{
|
||||||
struct t10_wwn *wwn = &dev->t10_wwn;
|
struct t10_wwn *wwn = &dev->t10_wwn;
|
||||||
struct file *file;
|
struct file *file;
|
||||||
struct iovec iov[1];
|
|
||||||
mm_segment_t old_fs;
|
|
||||||
int flags = O_RDWR | O_CREAT | O_TRUNC;
|
int flags = O_RDWR | O_CREAT | O_TRUNC;
|
||||||
char path[512];
|
char path[512];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
memset(iov, 0, sizeof(struct iovec));
|
|
||||||
memset(path, 0, 512);
|
memset(path, 0, 512);
|
||||||
|
|
||||||
if (strlen(&wwn->unit_serial[0]) >= 512) {
|
if (strlen(&wwn->unit_serial[0]) >= 512) {
|
||||||
@ -1974,31 +1972,22 @@ static int __core_scsi3_write_aptpl_to_file(
|
|||||||
|
|
||||||
snprintf(path, 512, "/var/target/pr/aptpl_%s", &wwn->unit_serial[0]);
|
snprintf(path, 512, "/var/target/pr/aptpl_%s", &wwn->unit_serial[0]);
|
||||||
file = filp_open(path, flags, 0600);
|
file = filp_open(path, flags, 0600);
|
||||||
if (IS_ERR(file) || !file || !file->f_dentry) {
|
if (IS_ERR(file)) {
|
||||||
pr_err("filp_open(%s) for APTPL metadata"
|
pr_err("filp_open(%s) for APTPL metadata"
|
||||||
" failed\n", path);
|
" failed\n", path);
|
||||||
return IS_ERR(file) ? PTR_ERR(file) : -ENOENT;
|
return PTR_ERR(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
iov[0].iov_base = &buf[0];
|
|
||||||
if (!pr_aptpl_buf_len)
|
if (!pr_aptpl_buf_len)
|
||||||
iov[0].iov_len = (strlen(&buf[0]) + 1); /* Add extra for NULL */
|
pr_aptpl_buf_len = (strlen(&buf[0]) + 1); /* Add extra for NULL */
|
||||||
else
|
|
||||||
iov[0].iov_len = pr_aptpl_buf_len;
|
|
||||||
|
|
||||||
old_fs = get_fs();
|
ret = kernel_write(file, buf, pr_aptpl_buf_len, 0);
|
||||||
set_fs(get_ds());
|
|
||||||
ret = vfs_writev(file, &iov[0], 1, &file->f_pos);
|
|
||||||
set_fs(old_fs);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0)
|
||||||
pr_debug("Error writing APTPL metadata file: %s\n", path);
|
pr_debug("Error writing APTPL metadata file: %s\n", path);
|
||||||
filp_close(file, NULL);
|
fput(file);
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
filp_close(file, NULL);
|
|
||||||
|
|
||||||
return 0;
|
return ret ? -EIO : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user