提交 9ec3c882 编写于 作者: P Pavel Shilovsky 提交者: Steve French

CIFS: Separate pushing posix locks and lock_sem handling

Reviewed-by: NJeff Layton <jlayton@redhat.com>
Signed-off-by: NPavel Shilovsky <piastry@etersoft.ru>
Signed-off-by: NSteve French <smfrench@gmail.com>
上级 6d3ea7e4
......@@ -1041,9 +1041,8 @@ struct lock_to_push {
};
static int
cifs_push_posix_locks(struct cifsFileInfo *cfile)
cifs_push_posix_locks_locked(struct cifsFileInfo *cfile)
{
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
struct file_lock *flock, **before;
unsigned int count = 0, i = 0;
......@@ -1054,14 +1053,6 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
xid = get_xid();
/* we are going to update can_cache_brlcks here - need a write access */
down_write(&cinode->lock_sem);
if (!cinode->can_cache_brlcks) {
up_write(&cinode->lock_sem);
free_xid(xid);
return rc;
}
lock_flocks();
cifs_for_each_lock(cfile->dentry->d_inode, before) {
if ((*before)->fl_flags & FL_POSIX)
......@@ -1127,9 +1118,6 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
}
out:
cinode->can_cache_brlcks = false;
up_write(&cinode->lock_sem);
free_xid(xid);
return rc;
err_out:
......@@ -1140,6 +1128,24 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
goto out;
}
static int
cifs_push_posix_locks(struct cifsFileInfo *cfile)
{
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
int rc = 0;
/* we are going to update can_cache_brlcks here - need a write access */
down_write(&cinode->lock_sem);
if (!cinode->can_cache_brlcks) {
up_write(&cinode->lock_sem);
return rc;
}
rc = cifs_push_posix_locks_locked(cfile);
cinode->can_cache_brlcks = false;
up_write(&cinode->lock_sem);
return rc;
}
static int
cifs_push_locks(struct cifsFileInfo *cfile)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册