diff options
| -rw-r--r-- | drivers/target/target_core_alua.c | 35 | ||||
| -rw-r--r-- | drivers/target/target_core_pr.c | 27 |
2 files changed, 17 insertions, 45 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 | /* |
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c index 8e0290b38e43..3240f2cc81ef 100644 --- a/drivers/target/target_core_pr.c +++ b/drivers/target/target_core_pr.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
| 28 | #include <linux/spinlock.h> | 28 | #include <linux/spinlock.h> |
| 29 | #include <linux/list.h> | 29 | #include <linux/list.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> |
| @@ -1957,13 +1958,10 @@ static int __core_scsi3_write_aptpl_to_file( | |||
| 1957 | { | 1958 | { |
| 1958 | struct t10_wwn *wwn = &dev->t10_wwn; | 1959 | struct t10_wwn *wwn = &dev->t10_wwn; |
| 1959 | struct file *file; | 1960 | struct file *file; |
| 1960 | struct iovec iov[1]; | ||
| 1961 | mm_segment_t old_fs; | ||
| 1962 | int flags = O_RDWR | O_CREAT | O_TRUNC; | 1961 | int flags = O_RDWR | O_CREAT | O_TRUNC; |
| 1963 | char path[512]; | 1962 | char path[512]; |
| 1964 | int ret; | 1963 | int ret; |
| 1965 | 1964 | ||
| 1966 | memset(iov, 0, sizeof(struct iovec)); | ||
| 1967 | memset(path, 0, 512); | 1965 | memset(path, 0, 512); |
| 1968 | 1966 | ||
| 1969 | if (strlen(&wwn->unit_serial[0]) >= 512) { | 1967 | if (strlen(&wwn->unit_serial[0]) >= 512) { |
| @@ -1974,31 +1972,22 @@ static int __core_scsi3_write_aptpl_to_file( | |||
| 1974 | 1972 | ||
| 1975 | snprintf(path, 512, "/var/target/pr/aptpl_%s", &wwn->unit_serial[0]); | 1973 | snprintf(path, 512, "/var/target/pr/aptpl_%s", &wwn->unit_serial[0]); |
| 1976 | file = filp_open(path, flags, 0600); | 1974 | file = filp_open(path, flags, 0600); |
| 1977 | if (IS_ERR(file) || !file || !file->f_dentry) { | 1975 | if (IS_ERR(file)) { |
| 1978 | pr_err("filp_open(%s) for APTPL metadata" | 1976 | pr_err("filp_open(%s) for APTPL metadata" |
| 1979 | " failed\n", path); | 1977 | " failed\n", path); |
| 1980 | return IS_ERR(file) ? PTR_ERR(file) : -ENOENT; | 1978 | return PTR_ERR(file); |
| 1981 | } | 1979 | } |
| 1982 | 1980 | ||
| 1983 | iov[0].iov_base = &buf[0]; | ||
| 1984 | if (!pr_aptpl_buf_len) | 1981 | if (!pr_aptpl_buf_len) |
| 1985 | iov[0].iov_len = (strlen(&buf[0]) + 1); /* Add extra for NULL */ | 1982 | pr_aptpl_buf_len = (strlen(&buf[0]) + 1); /* Add extra for NULL */ |
| 1986 | else | ||
| 1987 | iov[0].iov_len = pr_aptpl_buf_len; | ||
| 1988 | 1983 | ||
| 1989 | old_fs = get_fs(); | 1984 | ret = kernel_write(file, buf, pr_aptpl_buf_len, 0); |
| 1990 | set_fs(get_ds()); | ||
| 1991 | ret = vfs_writev(file, &iov[0], 1, &file->f_pos); | ||
| 1992 | set_fs(old_fs); | ||
| 1993 | 1985 | ||
| 1994 | if (ret < 0) { | 1986 | if (ret < 0) |
| 1995 | pr_debug("Error writing APTPL metadata file: %s\n", path); | 1987 | pr_debug("Error writing APTPL metadata file: %s\n", path); |
| 1996 | filp_close(file, NULL); | 1988 | fput(file); |
| 1997 | return -EIO; | ||
| 1998 | } | ||
| 1999 | filp_close(file, NULL); | ||
| 2000 | 1989 | ||
| 2001 | return 0; | 1990 | return ret ? -EIO : 0; |
| 2002 | } | 1991 | } |
| 2003 | 1992 | ||
| 2004 | static int | 1993 | static int |
