diff options
| -rw-r--r-- | fs/cifs/cifs_debug.c | 53 | ||||
| -rw-r--r-- | fs/cifs/cifsfs.c | 71 | ||||
| -rw-r--r-- | fs/cifs/cifssmb.c | 3 | ||||
| -rw-r--r-- | fs/cifs/connect.c | 8 |
4 files changed, 61 insertions, 74 deletions
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c index 688a2d42153f..69a12aae91d3 100644 --- a/fs/cifs/cifs_debug.c +++ b/fs/cifs/cifs_debug.c | |||
| @@ -79,27 +79,25 @@ void cifs_dump_mids(struct TCP_Server_Info *server) | |||
| 79 | spin_lock(&GlobalMid_Lock); | 79 | spin_lock(&GlobalMid_Lock); |
| 80 | list_for_each(tmp, &server->pending_mid_q) { | 80 | list_for_each(tmp, &server->pending_mid_q) { |
| 81 | mid_entry = list_entry(tmp, struct mid_q_entry, qhead); | 81 | mid_entry = list_entry(tmp, struct mid_q_entry, qhead); |
| 82 | if (mid_entry) { | 82 | cERROR(1, ("State: %d Cmd: %d Pid: %d Tsk: %p Mid %d", |
| 83 | cERROR(1, ("State: %d Cmd: %d Pid: %d Tsk: %p Mid %d", | 83 | mid_entry->midState, |
| 84 | mid_entry->midState, | 84 | (int)mid_entry->command, |
| 85 | (int)mid_entry->command, | 85 | mid_entry->pid, |
| 86 | mid_entry->pid, | 86 | mid_entry->tsk, |
| 87 | mid_entry->tsk, | 87 | mid_entry->mid)); |
| 88 | mid_entry->mid)); | ||
| 89 | #ifdef CONFIG_CIFS_STATS2 | 88 | #ifdef CONFIG_CIFS_STATS2 |
| 90 | cERROR(1, ("IsLarge: %d buf: %p time rcv: %ld now: %ld", | 89 | cERROR(1, ("IsLarge: %d buf: %p time rcv: %ld now: %ld", |
| 91 | mid_entry->largeBuf, | 90 | mid_entry->largeBuf, |
| 92 | mid_entry->resp_buf, | 91 | mid_entry->resp_buf, |
| 93 | mid_entry->when_received, | 92 | mid_entry->when_received, |
| 94 | jiffies)); | 93 | jiffies)); |
| 95 | #endif /* STATS2 */ | 94 | #endif /* STATS2 */ |
| 96 | cERROR(1, ("IsMult: %d IsEnd: %d", mid_entry->multiRsp, | 95 | cERROR(1, ("IsMult: %d IsEnd: %d", mid_entry->multiRsp, |
| 97 | mid_entry->multiEnd)); | 96 | mid_entry->multiEnd)); |
| 98 | if (mid_entry->resp_buf) { | 97 | if (mid_entry->resp_buf) { |
| 99 | cifs_dump_detail(mid_entry->resp_buf); | 98 | cifs_dump_detail(mid_entry->resp_buf); |
| 100 | cifs_dump_mem("existing buf: ", | 99 | cifs_dump_mem("existing buf: ", |
| 101 | mid_entry->resp_buf, 62); | 100 | mid_entry->resp_buf, 62); |
| 102 | } | ||
| 103 | } | 101 | } |
| 104 | } | 102 | } |
| 105 | spin_unlock(&GlobalMid_Lock); | 103 | spin_unlock(&GlobalMid_Lock); |
| @@ -163,16 +161,13 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v) | |||
| 163 | mid_entry = list_entry(tmp1, struct | 161 | mid_entry = list_entry(tmp1, struct |
| 164 | mid_q_entry, | 162 | mid_q_entry, |
| 165 | qhead); | 163 | qhead); |
| 166 | if (mid_entry) { | 164 | seq_printf(m, "State: %d com: %d pid:" |
| 167 | seq_printf(m, | 165 | " %d tsk: %p mid %d\n", |
| 168 | "State: %d com: %d pid:" | 166 | mid_entry->midState, |
| 169 | " %d tsk: %p mid %d\n", | 167 | (int)mid_entry->command, |
| 170 | mid_entry->midState, | 168 | mid_entry->pid, |
| 171 | (int)mid_entry->command, | 169 | mid_entry->tsk, |
| 172 | mid_entry->pid, | 170 | mid_entry->mid); |
| 173 | mid_entry->tsk, | ||
| 174 | mid_entry->mid); | ||
| 175 | } | ||
| 176 | } | 171 | } |
| 177 | spin_unlock(&GlobalMid_Lock); | 172 | spin_unlock(&GlobalMid_Lock); |
| 178 | } | 173 | } |
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 1ec7076f7b24..e8da4ee761b5 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c | |||
| @@ -930,36 +930,34 @@ static int cifs_oplock_thread(void *dummyarg) | |||
| 930 | schedule_timeout(39*HZ); | 930 | schedule_timeout(39*HZ); |
| 931 | } else { | 931 | } else { |
| 932 | oplock_item = list_entry(GlobalOplock_Q.next, | 932 | oplock_item = list_entry(GlobalOplock_Q.next, |
| 933 | struct oplock_q_entry, qhead); | 933 | struct oplock_q_entry, qhead); |
| 934 | if (oplock_item) { | 934 | cFYI(1, ("found oplock item to write out")); |
| 935 | cFYI(1, ("found oplock item to write out")); | 935 | pTcon = oplock_item->tcon; |
| 936 | pTcon = oplock_item->tcon; | 936 | inode = oplock_item->pinode; |
| 937 | inode = oplock_item->pinode; | 937 | netfid = oplock_item->netfid; |
| 938 | netfid = oplock_item->netfid; | 938 | spin_unlock(&GlobalMid_Lock); |
| 939 | spin_unlock(&GlobalMid_Lock); | 939 | DeleteOplockQEntry(oplock_item); |
| 940 | DeleteOplockQEntry(oplock_item); | 940 | /* can not grab inode sem here since it would |
| 941 | /* can not grab inode sem here since it would | ||
| 942 | deadlock when oplock received on delete | 941 | deadlock when oplock received on delete |
| 943 | since vfs_unlink holds the i_mutex across | 942 | since vfs_unlink holds the i_mutex across |
| 944 | the call */ | 943 | the call */ |
| 945 | /* mutex_lock(&inode->i_mutex);*/ | 944 | /* mutex_lock(&inode->i_mutex);*/ |
| 946 | if (S_ISREG(inode->i_mode)) { | 945 | if (S_ISREG(inode->i_mode)) { |
| 947 | rc = | 946 | rc = filemap_fdatawrite(inode->i_mapping); |
| 948 | filemap_fdatawrite(inode->i_mapping); | 947 | if (CIFS_I(inode)->clientCanCacheRead == 0) { |
| 949 | if (CIFS_I(inode)->clientCanCacheRead | 948 | waitrc = filemap_fdatawait( |
| 950 | == 0) { | 949 | inode->i_mapping); |
| 951 | waitrc = filemap_fdatawait(inode->i_mapping); | 950 | invalidate_remote_inode(inode); |
| 952 | invalidate_remote_inode(inode); | 951 | } |
| 953 | } | 952 | if (rc == 0) |
| 954 | if (rc == 0) | 953 | rc = waitrc; |
| 955 | rc = waitrc; | 954 | } else |
| 956 | } else | 955 | rc = 0; |
| 957 | rc = 0; | 956 | /* mutex_unlock(&inode->i_mutex);*/ |
| 958 | /* mutex_unlock(&inode->i_mutex);*/ | 957 | if (rc) |
| 959 | if (rc) | 958 | CIFS_I(inode)->write_behind_rc = rc; |
| 960 | CIFS_I(inode)->write_behind_rc = rc; | 959 | cFYI(1, ("Oplock flush inode %p rc %d", |
| 961 | cFYI(1, ("Oplock flush inode %p rc %d", | 960 | inode, rc)); |
| 962 | inode, rc)); | ||
| 963 | 961 | ||
| 964 | /* releasing stale oplock after recent reconnect | 962 | /* releasing stale oplock after recent reconnect |
| 965 | of smb session using a now incorrect file | 963 | of smb session using a now incorrect file |
| @@ -967,15 +965,13 @@ static int cifs_oplock_thread(void *dummyarg) | |||
| 967 | not bother sending an oplock release if session | 965 | not bother sending an oplock release if session |
| 968 | to server still is disconnected since oplock | 966 | to server still is disconnected since oplock |
| 969 | already released by the server in that case */ | 967 | already released by the server in that case */ |
| 970 | if (pTcon->tidStatus != CifsNeedReconnect) { | 968 | if (pTcon->tidStatus != CifsNeedReconnect) { |
| 971 | rc = CIFSSMBLock(0, pTcon, netfid, | 969 | rc = CIFSSMBLock(0, pTcon, netfid, |
| 972 | 0 /* len */ , 0 /* offset */, 0, | 970 | 0 /* len */ , 0 /* offset */, 0, |
| 973 | 0, LOCKING_ANDX_OPLOCK_RELEASE, | 971 | 0, LOCKING_ANDX_OPLOCK_RELEASE, |
| 974 | false /* wait flag */); | 972 | false /* wait flag */); |
| 975 | cFYI(1, ("Oplock release rc = %d", rc)); | 973 | cFYI(1, ("Oplock release rc = %d", rc)); |
| 976 | } | 974 | } |
| 977 | } else | ||
| 978 | spin_unlock(&GlobalMid_Lock); | ||
| 979 | set_current_state(TASK_INTERRUPTIBLE); | 975 | set_current_state(TASK_INTERRUPTIBLE); |
| 980 | schedule_timeout(1); /* yield in case q were corrupt */ | 976 | schedule_timeout(1); /* yield in case q were corrupt */ |
| 981 | } | 977 | } |
| @@ -1001,8 +997,7 @@ static int cifs_dnotify_thread(void *dummyarg) | |||
| 1001 | list_for_each(tmp, &GlobalSMBSessionList) { | 997 | list_for_each(tmp, &GlobalSMBSessionList) { |
| 1002 | ses = list_entry(tmp, struct cifsSesInfo, | 998 | ses = list_entry(tmp, struct cifsSesInfo, |
| 1003 | cifsSessionList); | 999 | cifsSessionList); |
| 1004 | if (ses && ses->server && | 1000 | if (ses->server && atomic_read(&ses->server->inFlight)) |
| 1005 | atomic_read(&ses->server->inFlight)) | ||
| 1006 | wake_up_all(&ses->server->response_q); | 1001 | wake_up_all(&ses->server->response_q); |
| 1007 | } | 1002 | } |
| 1008 | read_unlock(&GlobalSMBSeslock); | 1003 | read_unlock(&GlobalSMBSeslock); |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 6e8e8fc04c02..994de7c90474 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -128,8 +128,7 @@ static void mark_open_files_invalid(struct cifsTconInfo *pTcon) | |||
| 128 | write_lock(&GlobalSMBSeslock); | 128 | write_lock(&GlobalSMBSeslock); |
| 129 | list_for_each_safe(tmp, tmp1, &pTcon->openFileList) { | 129 | list_for_each_safe(tmp, tmp1, &pTcon->openFileList) { |
| 130 | open_file = list_entry(tmp, struct cifsFileInfo, tlist); | 130 | open_file = list_entry(tmp, struct cifsFileInfo, tlist); |
| 131 | if (open_file) | 131 | open_file->invalidHandle = true; |
| 132 | open_file->invalidHandle = true; | ||
| 133 | } | 132 | } |
| 134 | write_unlock(&GlobalSMBSeslock); | 133 | write_unlock(&GlobalSMBSeslock); |
| 135 | /* BB Add call to invalidate_inodes(sb) for all superblocks mounted | 134 | /* BB Add call to invalidate_inodes(sb) for all superblocks mounted |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index ff4345db7201..0711db65afe8 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
| @@ -151,7 +151,7 @@ cifs_reconnect(struct TCP_Server_Info *server) | |||
| 151 | } | 151 | } |
| 152 | list_for_each(tmp, &GlobalTreeConnectionList) { | 152 | list_for_each(tmp, &GlobalTreeConnectionList) { |
| 153 | tcon = list_entry(tmp, struct cifsTconInfo, cifsConnectionList); | 153 | tcon = list_entry(tmp, struct cifsTconInfo, cifsConnectionList); |
| 154 | if ((tcon) && (tcon->ses) && (tcon->ses->server == server)) | 154 | if ((tcon->ses) && (tcon->ses->server == server)) |
| 155 | tcon->tidStatus = CifsNeedReconnect; | 155 | tcon->tidStatus = CifsNeedReconnect; |
| 156 | } | 156 | } |
| 157 | read_unlock(&GlobalSMBSeslock); | 157 | read_unlock(&GlobalSMBSeslock); |
| @@ -173,14 +173,12 @@ cifs_reconnect(struct TCP_Server_Info *server) | |||
| 173 | mid_entry = list_entry(tmp, struct | 173 | mid_entry = list_entry(tmp, struct |
| 174 | mid_q_entry, | 174 | mid_q_entry, |
| 175 | qhead); | 175 | qhead); |
| 176 | if (mid_entry) { | 176 | if (mid_entry->midState == MID_REQUEST_SUBMITTED) { |
| 177 | if (mid_entry->midState == MID_REQUEST_SUBMITTED) { | ||
| 178 | /* Mark other intransit requests as needing | 177 | /* Mark other intransit requests as needing |
| 179 | retry so we do not immediately mark the | 178 | retry so we do not immediately mark the |
| 180 | session bad again (ie after we reconnect | 179 | session bad again (ie after we reconnect |
| 181 | below) as they timeout too */ | 180 | below) as they timeout too */ |
| 182 | mid_entry->midState = MID_RETRY_NEEDED; | 181 | mid_entry->midState = MID_RETRY_NEEDED; |
| 183 | } | ||
| 184 | } | 182 | } |
| 185 | } | 183 | } |
| 186 | spin_unlock(&GlobalMid_Lock); | 184 | spin_unlock(&GlobalMid_Lock); |
