mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00: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
					
				
					 2 changed files with 17 additions and 45 deletions
				
			
		|  | @ -27,6 +27,7 @@ | |||
| #include <linux/spinlock.h> | ||||
| #include <linux/configfs.h> | ||||
| #include <linux/export.h> | ||||
| #include <linux/file.h> | ||||
| #include <scsi/scsi.h> | ||||
| #include <scsi/scsi_cmnd.h> | ||||
| #include <asm/unaligned.h> | ||||
|  | @ -715,36 +716,18 @@ static int core_alua_write_tpg_metadata( | |||
| 	unsigned char *md_buf, | ||||
| 	u32 md_buf_len) | ||||
| { | ||||
| 	mm_segment_t old_fs; | ||||
| 	struct file *file; | ||||
| 	struct iovec iov[1]; | ||||
| 	int flags = O_RDWR | O_CREAT | O_TRUNC, ret; | ||||
| 	struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600); | ||||
| 	int ret; | ||||
| 
 | ||||
| 	memset(iov, 0, sizeof(struct iovec)); | ||||
| 
 | ||||
| 	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); | ||||
| 	if (IS_ERR(file)) { | ||||
| 		pr_err("filp_open(%s) for ALUA metadata failed\n", path); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
| 
 | ||||
| 	iov[0].iov_base = &md_buf[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) { | ||||
| 	ret = kernel_write(file, md_buf, md_buf_len, 0); | ||||
| 	if (ret < 0) | ||||
| 		pr_err("Error writing ALUA metadata file: %s\n", path); | ||||
| 		filp_close(file, NULL); | ||||
| 		return -EIO; | ||||
| 	} | ||||
| 	filp_close(file, NULL); | ||||
| 
 | ||||
| 	return 0; | ||||
| 	fput(file); | ||||
| 	return ret ? -EIO : 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
| #include <linux/slab.h> | ||||
| #include <linux/spinlock.h> | ||||
| #include <linux/list.h> | ||||
| #include <linux/file.h> | ||||
| #include <scsi/scsi.h> | ||||
| #include <scsi/scsi_cmnd.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 file *file; | ||||
| 	struct iovec iov[1]; | ||||
| 	mm_segment_t old_fs; | ||||
| 	int flags = O_RDWR | O_CREAT | O_TRUNC; | ||||
| 	char path[512]; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	memset(iov, 0, sizeof(struct iovec)); | ||||
| 	memset(path, 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]); | ||||
| 	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" | ||||
| 			" 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) | ||||
| 		iov[0].iov_len = (strlen(&buf[0]) + 1); /* Add extra for NULL */ | ||||
| 	else | ||||
| 		iov[0].iov_len = pr_aptpl_buf_len; | ||||
| 		pr_aptpl_buf_len = (strlen(&buf[0]) + 1); /* Add extra for NULL */ | ||||
| 
 | ||||
| 	old_fs = get_fs(); | ||||
| 	set_fs(get_ds()); | ||||
| 	ret = vfs_writev(file, &iov[0], 1, &file->f_pos); | ||||
| 	set_fs(old_fs); | ||||
| 	ret = kernel_write(file, buf, pr_aptpl_buf_len, 0); | ||||
| 
 | ||||
| 	if (ret < 0) { | ||||
| 	if (ret < 0) | ||||
| 		pr_debug("Error writing APTPL metadata file: %s\n", path); | ||||
| 		filp_close(file, NULL); | ||||
| 		return -EIO; | ||||
| 	} | ||||
| 	filp_close(file, NULL); | ||||
| 	fput(file); | ||||
| 
 | ||||
| 	return 0; | ||||
| 	return ret ? -EIO : 0; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Al Viro
						Al Viro