From: Dmitry Eremin Date: Thu, 11 Apr 2013 11:55:57 +0000 (+0400) Subject: LU-3157 llite: A not locked mutex can be unlocked. X-Git-Tag: 2.4.51~63 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=d821adb626e050206f1b4605f1159cf65ad22af5 LU-3157 llite: A not locked mutex can be unlocked. In case of memory pressure a not locked mutex can be unlocked in function ll_file_open(). This is not allowed and subsequent behavior is not defined. Signed-off-by: Dmitry Eremin Change-Id: I21368247cac23038f9b995e9de328f9286909731 Reviewed-on: http://review.whamcloud.com/6028 Reviewed-by: John Hammond Reviewed-by: Nikitas Angelinas Tested-by: Hudson Reviewed-by: Sebastien Buisson Tested-by: Maloo Reviewed-by: Andreas Dilger --- diff --git a/lustre/llite/file.c b/lustre/llite/file.c index ce4259d..85c3944 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -526,12 +526,12 @@ int ll_file_open(struct inode *inode, struct file *file) it = file->private_data; /* XXX: compat macro */ file->private_data = NULL; /* prevent ll_local_open assertion */ - fd = ll_file_data_get(); - if (fd == NULL) - GOTO(out_och_free, rc = -ENOMEM); + fd = ll_file_data_get(); + if (fd == NULL) + GOTO(out_openerr, rc = -ENOMEM); - fd->fd_file = file; - if (S_ISDIR(inode->i_mode)) { + fd->fd_file = file; + if (S_ISDIR(inode->i_mode)) { spin_lock(&lli->lli_sa_lock); if (lli->lli_opendir_key == NULL && lli->lli_sai == NULL && lli->lli_opendir_pid == 0) { @@ -540,7 +540,7 @@ int ll_file_open(struct inode *inode, struct file *file) opendir_set = 1; } spin_unlock(&lli->lli_sa_lock); - } + } if (inode->i_sb->s_root == file->f_dentry) { LUSTRE_FPRIVATE(file) = fd;