Skip to content

Commit

Permalink
FS: cifs, remove unneeded NULL tests
Browse files Browse the repository at this point in the history
Stanse found that pSMBFile in cifs_ioctl and file->f_path.dentry in
cifs_user_write are dereferenced prior their test to NULL.

The alternative is not to dereference them before the tests. The patch is
to point out the problem, you have to decide.

While at it we cache the inode in cifs_user_write to a local variable
and use all over the function.

Signed-off-by: Jiri Slaby <[email protected]>
Cc: Steve French <[email protected]>
Cc: [email protected]
Cc: Jeff Layton <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Signed-off-by: Steve French <[email protected]>
  • Loading branch information
Jiri Slaby authored and Steve French committed Nov 2, 2010
1 parent c8ddb27 commit 50ae28f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 18 deletions.
25 changes: 11 additions & 14 deletions fs/cifs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -956,14 +956,15 @@ cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
ssize_t cifs_user_write(struct file *file, const char __user *write_data,
size_t write_size, loff_t *poffset)
{
struct inode *inode = file->f_path.dentry->d_inode;
int rc = 0;
unsigned int bytes_written = 0;
unsigned int total_written;
struct cifs_sb_info *cifs_sb;
struct cifsTconInfo *pTcon;
int xid, long_op;
struct cifsFileInfo *open_file;
struct cifsInodeInfo *cifsi = CIFS_I(file->f_path.dentry->d_inode);
struct cifsInodeInfo *cifsi = CIFS_I(inode);

cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);

Expand Down Expand Up @@ -1029,21 +1030,17 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data,

cifs_stats_bytes_written(pTcon, total_written);

/* since the write may have blocked check these pointers again */
if ((file->f_path.dentry) && (file->f_path.dentry->d_inode)) {
struct inode *inode = file->f_path.dentry->d_inode;
/* Do not update local mtime - server will set its actual value on write
* inode->i_ctime = inode->i_mtime =
* current_fs_time(inode->i_sb);*/
if (total_written > 0) {
spin_lock(&inode->i_lock);
if (*poffset > file->f_path.dentry->d_inode->i_size)
i_size_write(file->f_path.dentry->d_inode,
*poffset);
spin_unlock(&inode->i_lock);
}
mark_inode_dirty_sync(file->f_path.dentry->d_inode);
* inode->i_ctime = inode->i_mtime =
* current_fs_time(inode->i_sb);*/
if (total_written > 0) {
spin_lock(&inode->i_lock);
if (*poffset > inode->i_size)
i_size_write(inode, *poffset);
spin_unlock(&inode->i_lock);
}
mark_inode_dirty_sync(inode);

FreeXid(xid);
return total_written;
}
Expand Down
4 changes: 0 additions & 4 deletions fs/cifs/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
#ifdef CONFIG_CIFS_POSIX
case FS_IOC_GETFLAGS:
if (CIFS_UNIX_EXTATTR_CAP & caps) {
if (pSMBFile == NULL)
break;
rc = CIFSGetExtAttr(xid, tcon, pSMBFile->netfid,
&ExtAttrBits, &ExtAttrMask);
if (rc == 0)
Expand All @@ -80,8 +78,6 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
rc = -EFAULT;
break;
}
if (pSMBFile == NULL)
break;
/* rc= CIFSGetExtAttr(xid,tcon,pSMBFile->netfid,
extAttrBits, &ExtAttrMask);*/
}
Expand Down

0 comments on commit 50ae28f

Please sign in to comment.