Skip to content

Commit

Permalink
CIFS: Move close code to ops struct
Browse files Browse the repository at this point in the history
Signed-off-by: Pavel Shilovsky <pshilovsky@samba.org>
Signed-off-by: Steve French <smfrench@gmail.com>
  • Loading branch information
Pavel Shilovsky authored and Steve French committed Sep 25, 2012
1 parent fb1214e commit 0ff78a2
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 3 deletions.
2 changes: 2 additions & 0 deletions fs/cifs/cifsglob.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ struct smb_version_operations {
struct cifs_sb_info *);
/* set fid protocol-specific info */
void (*set_fid)(struct cifsFileInfo *, struct cifs_fid *, __u32);
/* close a file */
int (*close)(const unsigned int, struct cifs_tcon *, struct cifs_fid *);
};

struct smb_version_values {
Expand Down
10 changes: 7 additions & 3 deletions fs/cifs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,10 +326,13 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
cancel_work_sync(&cifs_file->oplock_break);

if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
struct TCP_Server_Info *server = tcon->ses->server;
unsigned int xid;
int rc;
int rc = -ENOSYS;

xid = get_xid();
rc = CIFSSMBClose(xid, tcon, cifs_file->fid.netfid);
if (server->ops->close)
rc = server->ops->close(xid, tcon, &cifs_file->fid);
free_xid(xid);
}

Expand Down Expand Up @@ -423,7 +426,8 @@ int cifs_open(struct inode *inode, struct file *file)

cfile = cifs_new_fileinfo(&fid, file, tlink, oplock);
if (cfile == NULL) {
CIFSSMBClose(xid, tcon, fid.netfid);
if (tcon->ses->server->ops->close)
tcon->ses->server->ops->close(xid, tcon, &fid);
rc = -ENOMEM;
goto out;
}
Expand Down
8 changes: 8 additions & 0 deletions fs/cifs/smb1ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,13 @@ cifs_set_fid(struct cifsFileInfo *cfile, struct cifs_fid *fid, __u32 oplock)
cinode->can_cache_brlcks = cinode->clientCanCacheAll;
}

static int
cifs_close_file(const unsigned int xid, struct cifs_tcon *tcon,
struct cifs_fid *fid)
{
return CIFSSMBClose(xid, tcon, fid->netfid);
}

struct smb_version_operations smb1_operations = {
.send_cancel = send_nt_cancel,
.compare_fids = cifs_compare_fids,
Expand Down Expand Up @@ -675,6 +682,7 @@ struct smb_version_operations smb1_operations = {
.rename_pending_delete = cifs_rename_pending_delete,
.open = cifs_open_file,
.set_fid = cifs_set_fid,
.close = cifs_close_file,
};

struct smb_version_values smb1_values = {
Expand Down

0 comments on commit 0ff78a2

Please sign in to comment.