aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-02-26 23:16:07 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-26 23:16:07 -0500
commitd895cb1af15c04c522a25c79cc429076987c089b (patch)
tree895dc9157e28f603d937a58be664e4e440d5530c /drivers/target
parent9626357371b519f2b955fef399647181034a77fe (diff)
parentd3d009cb965eae7e002ea5badf603ea8f4c34915 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs pile (part one) from Al Viro: "Assorted stuff - cleaning namei.c up a bit, fixing ->d_name/->d_parent locking violations, etc. The most visible changes here are death of FS_REVAL_DOT (replaced with "has ->d_weak_revalidate()") and a new helper getting from struct file to inode. Some bits of preparation to xattr method interface changes. Misc patches by various people sent this cycle *and* ocfs2 fixes from several cycles ago that should've been upstream right then. PS: the next vfs pile will be xattr stuff." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (46 commits) saner proc_get_inode() calling conventions proc: avoid extra pde_put() in proc_fill_super() fs: change return values from -EACCES to -EPERM fs/exec.c: make bprm_mm_init() static ocfs2/dlm: use GFP_ATOMIC inside a spin_lock ocfs2: fix possible use-after-free with AIO ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path get_empty_filp()/alloc_file() leave both ->f_pos and ->f_version zero target: writev() on single-element vector is pointless export kernel_write(), convert open-coded instances fs: encode_fh: return FILEID_INVALID if invalid fid_type kill f_vfsmnt vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op nfsd: handle vfs_getattr errors in acl protocol switch vfs_getattr() to struct path default SET_PERSONALITY() in linux/elf.h ceph: prepopulate inodes only when request is aborted d_hash_and_lookup(): export, switch open-coded instances 9p: switch v9fs_set_create_acl() to inode+fid, do it before d_instantiate() 9p: split dropping the acls from v9fs_set_create_acl() ...
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/target_core_alua.c35
-rw-r--r--drivers/target/target_core_file.c2
-rw-r--r--drivers/target/target_core_pr.c27
3 files changed, 18 insertions, 46 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_file.c b/drivers/target/target_core_file.c
index ca36a38eb274..d226c10a985b 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -270,7 +270,7 @@ static int fd_do_rw(struct se_cmd *cmd, struct scatterlist *sgl,
270 * the expected virt_size for struct file w/o a backing struct 270 * the expected virt_size for struct file w/o a backing struct
271 * block_device. 271 * block_device.
272 */ 272 */
273 if (S_ISBLK(fd->f_dentry->d_inode->i_mode)) { 273 if (S_ISBLK(file_inode(fd)->i_mode)) {
274 if (ret < 0 || ret != cmd->data_length) { 274 if (ret < 0 || ret != cmd->data_length) {
275 pr_err("%s() returned %d, expecting %u for " 275 pr_err("%s() returned %d, expecting %u for "
276 "S_ISBLK\n", __func__, ret, 276 "S_ISBLK\n", __func__, ret,
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
2004static int 1993static int