aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_alua.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2013-02-23 15:22:43 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2013-02-26 02:46:11 -0500
commit0e9b10a90f1c30f25dd6f130130240745ab14010 (patch)
treebd77dadf79f5c4b5e859e42815d33eb284faa086 /drivers/target/target_core_alua.c
parent7bb307e894d51308aa0582a8c4cc5875bbc645b9 (diff)
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>
Diffstat (limited to 'drivers/target/target_core_alua.c')
-rw-r--r--drivers/target/target_core_alua.c35
1 files changed, 9 insertions, 26 deletions
diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
index 7d4ec02e29a9..ff1c5ee352cb 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -27,6 +27,7 @@
27#include <linux/spinlock.h> 27#include <linux/spinlock.h>
28#include <linux/configfs.h> 28#include <linux/configfs.h>
29#include <linux/export.h> 29#include <linux/export.h>
30#include <linux/file.h>
30#include <scsi/scsi.h> 31#include <scsi/scsi.h>
31#include <scsi/scsi_cmnd.h> 32#include <scsi/scsi_cmnd.h>
32#include <asm/unaligned.h> 33#include <asm/unaligned.h>
@@ -715,36 +716,18 @@ static int core_alua_write_tpg_metadata(
715 unsigned char *md_buf, 716 unsigned char *md_buf,
716 u32 md_buf_len) 717 u32 md_buf_len)
717{ 718{
718 mm_segment_t old_fs; 719 struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600);
719 struct file *file; 720 int ret;
720 struct iovec iov[1];
721 int flags = O_RDWR | O_CREAT | O_TRUNC, ret;
722
723 memset(iov, 0, sizeof(struct iovec));
724 721
725 file = filp_open(path, flags, 0600); 722 if (IS_ERR(file)) {
726 if (IS_ERR(file) || !file || !file->f_dentry) { 723 pr_err("filp_open(%s) for ALUA metadata failed\n", path);
727 pr_err("filp_open(%s) for ALUA metadata failed\n",
728 path);
729 return -ENODEV; 724 return -ENODEV;
730 } 725 }
731 726 ret = kernel_write(file, md_buf, md_buf_len, 0);
732 iov[0].iov_base = &md_buf[0]; 727 if (ret < 0)
733 iov[0].iov_len = md_buf_len;
734
735 old_fs = get_fs();
736 set_fs(get_ds());
737 ret = vfs_writev(file, &iov[0], 1, &file->f_pos);
738 set_fs(old_fs);
739
740 if (ret < 0) {
741 pr_err("Error writing ALUA metadata file: %s\n", path); 728 pr_err("Error writing ALUA metadata file: %s\n", path);
742 filp_close(file, NULL); 729 fput(file);
743 return -EIO; 730 return ret ? -EIO : 0;
744 }
745 filp_close(file, NULL);
746
747 return 0;
748} 731}
749 732
750/* 733/*