cifs: have cifsFileInfo hold an extra inode reference
It's possible that this struct will outlive the filp to which it is attached. If it does and it needs to do some work on the inode, then it'll need a reference. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
058daf4f67
commit
48541bd3dd
|
@ -365,8 +365,10 @@ static inline void cifsFileInfo_get(struct cifsFileInfo *cifs_file)
|
|||
/* Release a reference on the file private data */
|
||||
static inline void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
{
|
||||
if (atomic_dec_and_test(&cifs_file->count))
|
||||
if (atomic_dec_and_test(&cifs_file->count)) {
|
||||
iput(cifs_file->pInode);
|
||||
kfree(cifs_file);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -147,7 +147,7 @@ cifs_fill_fileinfo(struct inode *newinode, __u16 fileHandle,
|
|||
|
||||
pCifsFile->netfid = fileHandle;
|
||||
pCifsFile->pid = current->tgid;
|
||||
pCifsFile->pInode = newinode;
|
||||
pCifsFile->pInode = igrab(newinode);
|
||||
pCifsFile->invalidHandle = false;
|
||||
pCifsFile->closePend = false;
|
||||
mutex_init(&pCifsFile->fh_mutex);
|
||||
|
|
|
@ -50,7 +50,7 @@ static inline struct cifsFileInfo *cifs_init_private(
|
|||
mutex_init(&private_data->lock_mutex);
|
||||
INIT_LIST_HEAD(&private_data->llist);
|
||||
private_data->pfile = file; /* needed for writepage */
|
||||
private_data->pInode = inode;
|
||||
private_data->pInode = igrab(inode);
|
||||
private_data->invalidHandle = false;
|
||||
private_data->closePend = false;
|
||||
/* Initialize reference count to one. The private data is
|
||||
|
|
Loading…
Reference in New Issue