Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit c071b34

Browse files
nspmangaloreSteve French
authored andcommitted
cifs: is_network_name_deleted should return a bool
Currently, is_network_name_deleted and it's implementations do not return anything if the network name did get deleted. So the function doesn't fully achieve what it advertizes. Changed the function to return a bool instead. It will now return true if the error returned is STATUS_NETWORK_NAME_DELETED and the share (tree id) was found to be connected. It returns false otherwise. Signed-off-by: Shyam Prasad N <[email protected]> Acked-by: Paulo Alcantara (SUSE) <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent bf99f6b commit c071b34

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

fs/smb/client/cifsglob.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ struct smb_version_operations {
532532
/* Check for STATUS_IO_TIMEOUT */
533533
bool (*is_status_io_timeout)(char *buf);
534534
/* Check for STATUS_NETWORK_NAME_DELETED */
535-
void (*is_network_name_deleted)(char *buf, struct TCP_Server_Info *srv);
535+
bool (*is_network_name_deleted)(char *buf, struct TCP_Server_Info *srv);
536536
};
537537

538538
struct smb_version_values {

fs/smb/client/connect.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,9 +1226,14 @@ cifs_demultiplex_thread(void *p)
12261226
if (mids[i] != NULL) {
12271227
mids[i]->resp_buf_size = server->pdu_size;
12281228

1229-
if (bufs[i] && server->ops->is_network_name_deleted)
1230-
server->ops->is_network_name_deleted(bufs[i],
1231-
server);
1229+
if (bufs[i] != NULL) {
1230+
if (server->ops->is_network_name_deleted &&
1231+
server->ops->is_network_name_deleted(bufs[i],
1232+
server)) {
1233+
cifs_server_dbg(FYI,
1234+
"Share deleted. Reconnect needed");
1235+
}
1236+
}
12321237

12331238
if (!mids[i]->multiRsp || mids[i]->multiEnd)
12341239
mids[i]->callback(mids[i]);

fs/smb/client/smb2ops.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2395,7 +2395,7 @@ smb2_is_status_io_timeout(char *buf)
23952395
return false;
23962396
}
23972397

2398-
static void
2398+
static bool
23992399
smb2_is_network_name_deleted(char *buf, struct TCP_Server_Info *server)
24002400
{
24012401
struct smb2_hdr *shdr = (struct smb2_hdr *)buf;
@@ -2404,7 +2404,7 @@ smb2_is_network_name_deleted(char *buf, struct TCP_Server_Info *server)
24042404
struct cifs_tcon *tcon;
24052405

24062406
if (shdr->Status != STATUS_NETWORK_NAME_DELETED)
2407-
return;
2407+
return false;
24082408

24092409
/* If server is a channel, select the primary channel */
24102410
pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
@@ -2419,11 +2419,13 @@ smb2_is_network_name_deleted(char *buf, struct TCP_Server_Info *server)
24192419
spin_unlock(&cifs_tcp_ses_lock);
24202420
pr_warn_once("Server share %s deleted.\n",
24212421
tcon->tree_name);
2422-
return;
2422+
return true;
24232423
}
24242424
}
24252425
}
24262426
spin_unlock(&cifs_tcp_ses_lock);
2427+
2428+
return false;
24272429
}
24282430

24292431
static int

0 commit comments

Comments
 (0)