|
@@ -247,39 +247,39 @@ cifs_new_fileinfo(__u16 fileHandle, struct file *file,
|
|
|
{
|
|
|
struct dentry *dentry = file->f_path.dentry;
|
|
|
struct inode *inode = dentry->d_inode;
|
|
|
- struct cifsInodeInfo *pCifsInode = CIFS_I(inode);
|
|
|
- struct cifsFileInfo *pCifsFile;
|
|
|
-
|
|
|
- pCifsFile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
|
|
|
- if (pCifsFile == NULL)
|
|
|
- return pCifsFile;
|
|
|
-
|
|
|
- pCifsFile->count = 1;
|
|
|
- pCifsFile->netfid = fileHandle;
|
|
|
- pCifsFile->pid = current->tgid;
|
|
|
- pCifsFile->uid = current_fsuid();
|
|
|
- pCifsFile->dentry = dget(dentry);
|
|
|
- pCifsFile->f_flags = file->f_flags;
|
|
|
- pCifsFile->invalidHandle = false;
|
|
|
- pCifsFile->tlink = cifs_get_tlink(tlink);
|
|
|
- mutex_init(&pCifsFile->fh_mutex);
|
|
|
- INIT_WORK(&pCifsFile->oplock_break, cifs_oplock_break);
|
|
|
- INIT_LIST_HEAD(&pCifsFile->llist);
|
|
|
+ struct cifsInodeInfo *cinode = CIFS_I(inode);
|
|
|
+ struct cifsFileInfo *cfile;
|
|
|
+
|
|
|
+ cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
|
|
|
+ if (cfile == NULL)
|
|
|
+ return cfile;
|
|
|
+
|
|
|
+ cfile->count = 1;
|
|
|
+ cfile->fid.netfid = fileHandle;
|
|
|
+ cfile->pid = current->tgid;
|
|
|
+ cfile->uid = current_fsuid();
|
|
|
+ cfile->dentry = dget(dentry);
|
|
|
+ cfile->f_flags = file->f_flags;
|
|
|
+ cfile->invalidHandle = false;
|
|
|
+ cfile->tlink = cifs_get_tlink(tlink);
|
|
|
+ mutex_init(&cfile->fh_mutex);
|
|
|
+ INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
|
|
|
+ INIT_LIST_HEAD(&cfile->llist);
|
|
|
|
|
|
spin_lock(&cifs_file_list_lock);
|
|
|
- list_add(&pCifsFile->tlist, &(tlink_tcon(tlink)->openFileList));
|
|
|
+ list_add(&cfile->tlist, &(tlink_tcon(tlink)->openFileList));
|
|
|
/* if readable file instance put first in list*/
|
|
|
if (file->f_mode & FMODE_READ)
|
|
|
- list_add(&pCifsFile->flist, &pCifsInode->openFileList);
|
|
|
+ list_add(&cfile->flist, &cinode->openFileList);
|
|
|
else
|
|
|
- list_add_tail(&pCifsFile->flist, &pCifsInode->openFileList);
|
|
|
+ list_add_tail(&cfile->flist, &cinode->openFileList);
|
|
|
spin_unlock(&cifs_file_list_lock);
|
|
|
|
|
|
- cifs_set_oplock_level(pCifsInode, oplock);
|
|
|
- pCifsInode->can_cache_brlcks = pCifsInode->clientCanCacheAll;
|
|
|
+ cifs_set_oplock_level(cinode, oplock);
|
|
|
+ cinode->can_cache_brlcks = cinode->clientCanCacheAll;
|
|
|
|
|
|
- file->private_data = pCifsFile;
|
|
|
- return pCifsFile;
|
|
|
+ file->private_data = cfile;
|
|
|
+ return cfile;
|
|
|
}
|
|
|
|
|
|
static void cifs_del_lock_waiters(struct cifsLockInfo *lock);
|
|
@@ -336,7 +336,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
|
|
unsigned int xid;
|
|
|
int rc;
|
|
|
xid = get_xid();
|
|
|
- rc = CIFSSMBClose(xid, tcon, cifs_file->netfid);
|
|
|
+ rc = CIFSSMBClose(xid, tcon, cifs_file->fid.netfid);
|
|
|
free_xid(xid);
|
|
|
}
|
|
|
|
|
@@ -561,7 +561,7 @@ static int cifs_reopen_file(struct cifsFileInfo *pCifsFile, bool can_flush)
|
|
|
}
|
|
|
|
|
|
reopen_success:
|
|
|
- pCifsFile->netfid = netfid;
|
|
|
+ pCifsFile->fid.netfid = netfid;
|
|
|
pCifsFile->invalidHandle = false;
|
|
|
mutex_unlock(&pCifsFile->fh_mutex);
|
|
|
pCifsInode = CIFS_I(inode);
|
|
@@ -609,39 +609,37 @@ int cifs_closedir(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
int rc = 0;
|
|
|
unsigned int xid;
|
|
|
- struct cifsFileInfo *pCFileStruct = file->private_data;
|
|
|
- char *ptmp;
|
|
|
+ struct cifsFileInfo *cfile = file->private_data;
|
|
|
+ char *tmp;
|
|
|
|
|
|
cFYI(1, "Closedir inode = 0x%p", inode);
|
|
|
|
|
|
xid = get_xid();
|
|
|
|
|
|
- if (pCFileStruct) {
|
|
|
- struct cifs_tcon *pTcon = tlink_tcon(pCFileStruct->tlink);
|
|
|
+ if (cfile) {
|
|
|
+ struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
|
|
|
|
|
cFYI(1, "Freeing private data in close dir");
|
|
|
spin_lock(&cifs_file_list_lock);
|
|
|
- if (!pCFileStruct->srch_inf.endOfSearch &&
|
|
|
- !pCFileStruct->invalidHandle) {
|
|
|
- pCFileStruct->invalidHandle = true;
|
|
|
+ if (!cfile->srch_inf.endOfSearch && !cfile->invalidHandle) {
|
|
|
+ cfile->invalidHandle = true;
|
|
|
spin_unlock(&cifs_file_list_lock);
|
|
|
- rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
|
|
|
- cFYI(1, "Closing uncompleted readdir with rc %d",
|
|
|
- rc);
|
|
|
+ rc = CIFSFindClose(xid, tcon, cfile->fid.netfid);
|
|
|
+ cFYI(1, "Closing uncompleted readdir with rc %d", rc);
|
|
|
/* not much we can do if it fails anyway, ignore rc */
|
|
|
rc = 0;
|
|
|
} else
|
|
|
spin_unlock(&cifs_file_list_lock);
|
|
|
- ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
|
|
|
- if (ptmp) {
|
|
|
+ tmp = cfile->srch_inf.ntwrk_buf_start;
|
|
|
+ if (tmp) {
|
|
|
cFYI(1, "closedir free smb buf in srch struct");
|
|
|
- pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
|
|
|
- if (pCFileStruct->srch_inf.smallBuf)
|
|
|
- cifs_small_buf_release(ptmp);
|
|
|
+ cfile->srch_inf.ntwrk_buf_start = NULL;
|
|
|
+ if (cfile->srch_inf.smallBuf)
|
|
|
+ cifs_small_buf_release(tmp);
|
|
|
else
|
|
|
- cifs_buf_release(ptmp);
|
|
|
+ cifs_buf_release(tmp);
|
|
|
}
|
|
|
- cifs_put_tlink(pCFileStruct->tlink);
|
|
|
+ cifs_put_tlink(cfile->tlink);
|
|
|
kfree(file->private_data);
|
|
|
file->private_data = NULL;
|
|
|
}
|
|
@@ -932,7 +930,8 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
|
|
|
cur->OffsetLow = cpu_to_le32((u32)li->offset);
|
|
|
cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
|
|
|
if (++num == max_num) {
|
|
|
- stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
|
|
|
+ stored_rc = cifs_lockv(xid, tcon,
|
|
|
+ cfile->fid.netfid,
|
|
|
(__u8)li->type, 0, num,
|
|
|
buf);
|
|
|
if (stored_rc)
|
|
@@ -944,7 +943,7 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
|
|
|
}
|
|
|
|
|
|
if (num) {
|
|
|
- stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
|
|
|
+ stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
|
|
|
(__u8)types[i], 0, num, buf);
|
|
|
if (stored_rc)
|
|
|
rc = stored_rc;
|
|
@@ -1038,7 +1037,7 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
|
|
|
type = CIFS_WRLCK;
|
|
|
lck = list_entry(el, struct lock_to_push, llist);
|
|
|
lck->pid = flock->fl_pid;
|
|
|
- lck->netfid = cfile->netfid;
|
|
|
+ lck->netfid = cfile->fid.netfid;
|
|
|
lck->length = length;
|
|
|
lck->type = type;
|
|
|
lck->offset = flock->fl_start;
|
|
@@ -1137,7 +1136,7 @@ static int
|
|
|
cifs_mandatory_lock(unsigned int xid, struct cifsFileInfo *cfile, __u64 offset,
|
|
|
__u64 length, __u32 type, int lock, int unlock, bool wait)
|
|
|
{
|
|
|
- return CIFSSMBLock(xid, tlink_tcon(cfile->tlink), cfile->netfid,
|
|
|
+ return CIFSSMBLock(xid, tlink_tcon(cfile->tlink), cfile->fid.netfid,
|
|
|
current->tgid, length, offset, unlock, lock,
|
|
|
(__u8)type, wait, 0);
|
|
|
}
|
|
@@ -1151,7 +1150,7 @@ cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
|
|
|
struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
|
|
|
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
|
|
struct TCP_Server_Info *server = tcon->ses->server;
|
|
|
- __u16 netfid = cfile->netfid;
|
|
|
+ __u16 netfid = cfile->fid.netfid;
|
|
|
|
|
|
if (posix_lck) {
|
|
|
int posix_lock_type;
|
|
@@ -1295,7 +1294,8 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
|
|
|
*/
|
|
|
list_move(&li->llist, &tmp_llist);
|
|
|
if (++num == max_num) {
|
|
|
- stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
|
|
|
+ stored_rc = cifs_lockv(xid, tcon,
|
|
|
+ cfile->fid.netfid,
|
|
|
li->type, num, 0, buf);
|
|
|
if (stored_rc) {
|
|
|
/*
|
|
@@ -1318,7 +1318,7 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
|
|
|
cur++;
|
|
|
}
|
|
|
if (num) {
|
|
|
- stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
|
|
|
+ stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
|
|
|
types[i], num, 0, buf);
|
|
|
if (stored_rc) {
|
|
|
cifs_move_llist(&tmp_llist, &cfile->llist);
|
|
@@ -1343,7 +1343,7 @@ cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
|
|
|
struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
|
|
|
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
|
|
struct TCP_Server_Info *server = tcon->ses->server;
|
|
|
- __u16 netfid = cfile->netfid;
|
|
|
+ __u16 netfid = cfile->fid.netfid;
|
|
|
|
|
|
if (posix_lck) {
|
|
|
int posix_lock_type;
|
|
@@ -1423,7 +1423,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
|
|
|
tcon->ses->server);
|
|
|
|
|
|
cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
|
|
|
- netfid = cfile->netfid;
|
|
|
+ netfid = cfile->fid.netfid;
|
|
|
cinode = CIFS_I(file->f_path.dentry->d_inode);
|
|
|
|
|
|
if (cap_unix(tcon->ses) &&
|
|
@@ -1514,7 +1514,7 @@ static ssize_t cifs_write(struct cifsFileInfo *open_file, __u32 pid,
|
|
|
/* iov[0] is reserved for smb header */
|
|
|
iov[1].iov_base = (char *)write_data + total_written;
|
|
|
iov[1].iov_len = len;
|
|
|
- io_parms.netfid = open_file->netfid;
|
|
|
+ io_parms.netfid = open_file->fid.netfid;
|
|
|
io_parms.pid = pid;
|
|
|
io_parms.tcon = pTcon;
|
|
|
io_parms.offset = *poffset;
|
|
@@ -2078,7 +2078,7 @@ int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
|
|
|
|
|
|
tcon = tlink_tcon(smbfile->tlink);
|
|
|
if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
|
|
|
- rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
|
|
|
+ rc = CIFSSMBFlush(xid, tcon, smbfile->fid.netfid);
|
|
|
|
|
|
free_xid(xid);
|
|
|
mutex_unlock(&inode->i_mutex);
|
|
@@ -2106,7 +2106,7 @@ int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
|
|
|
|
|
|
tcon = tlink_tcon(smbfile->tlink);
|
|
|
if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
|
|
|
- rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
|
|
|
+ rc = CIFSSMBFlush(xid, tcon, smbfile->fid.netfid);
|
|
|
|
|
|
free_xid(xid);
|
|
|
mutex_unlock(&inode->i_mutex);
|
|
@@ -2802,7 +2802,7 @@ static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
|
|
|
if (rc != 0)
|
|
|
break;
|
|
|
}
|
|
|
- io_parms.netfid = open_file->netfid;
|
|
|
+ io_parms.netfid = open_file->fid.netfid;
|
|
|
io_parms.pid = pid;
|
|
|
io_parms.tcon = tcon;
|
|
|
io_parms.offset = *poffset;
|
|
@@ -3374,7 +3374,7 @@ void cifs_oplock_break(struct work_struct *work)
|
|
|
* disconnected since oplock already released by the server
|
|
|
*/
|
|
|
if (!cfile->oplock_break_cancelled) {
|
|
|
- rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->netfid,
|
|
|
+ rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->fid.netfid,
|
|
|
current->tgid, 0, 0, 0, 0,
|
|
|
LOCKING_ANDX_OPLOCK_RELEASE, false,
|
|
|
cinode->clientCanCacheRead ? 1 : 0);
|