diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-26 23:16:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-26 23:16:07 -0500 |
commit | d895cb1af15c04c522a25c79cc429076987c089b (patch) | |
tree | 895dc9157e28f603d937a58be664e4e440d5530c /drivers/target | |
parent | 9626357371b519f2b955fef399647181034a77fe (diff) | |
parent | d3d009cb965eae7e002ea5badf603ea8f4c34915 (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.c | 35 | ||||
-rw-r--r-- | drivers/target/target_core_file.c | 2 | ||||
-rw-r--r-- | drivers/target/target_core_pr.c | 27 |
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 | ||
2004 | static int | 1993 | static int |