Re: [PATCH 3/3] cifs: cache the directory content for shroot (fwd)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

It looks like an unlock may be needed on line 1056.

julia

---------- Forwarded message ----------
Date: Mon, 5 Oct 2020 14:47:01 +0800
From: kernel test robot <lkp@xxxxxxxxx>
To: kbuild@xxxxxxxxxxxx
Cc: lkp@xxxxxxxxx, Julia Lawall <julia.lawall@xxxxxxx>
Subject: Re: [PATCH 3/3] cifs: cache the directory content for shroot

CC: kbuild-all@xxxxxxxxxxxx
In-Reply-To: <20201005023754.13604-4-lsahlber@xxxxxxxxxx>
References: <20201005023754.13604-4-lsahlber@xxxxxxxxxx>
TO: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
TO: "linux-cifs" <linux-cifs@xxxxxxxxxxxxxxx>
CC: Steve French <smfrench@xxxxxxxxx>

Hi Ronnie,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on cifs/for-next]
[also build test WARNING on v5.9-rc8 next-20201002]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Ronnie-Sahlberg/cifs-cache-the-directory-content-for-shroot/20201005-104037
base:   git://git.samba.org/sfrench/cifs-2.6.git for-next
:::::: branch date: 4 hours ago
:::::: commit date: 4 hours ago
config: i386-randconfig-c001-20201005 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Reported-by: Julia Lawall <julia.lawall@xxxxxxx>

	echo
	echo "coccinelle warnings: (new ones prefixed by >>)"
	echo
>> fs/cifs/readdir.c:1184:1-7: preceding lock on line 1040

vim +1184 fs/cifs/readdir.c

^1da177e4c3f415 Linus Torvalds   2005-04-16  1010
be4ccdcc2575ae1 Al Viro          2013-05-22  1011  int cifs_readdir(struct file *file, struct dir_context *ctx)
^1da177e4c3f415 Linus Torvalds   2005-04-16  1012  {
^1da177e4c3f415 Linus Torvalds   2005-04-16  1013  	int rc = 0;
6d5786a34d98bff Pavel Shilovsky  2012-06-20  1014  	unsigned int xid;
6d5786a34d98bff Pavel Shilovsky  2012-06-20  1015  	int i;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1016  	struct cifs_tcon *tcon, *mtcon;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1017  	struct cifsFileInfo *cifsFile = NULL;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1018  	char *current_entry;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1019  	int num_to_fill = 0;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1020  	char *tmp_buf = NULL;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1021  	char *end_of_smb;
18295796a30cada Jeff Layton      2009-04-30  1022  	unsigned int max_len;
010d984773e7614 Ronnie Sahlberg  2020-10-05  1023  	char *full_path = NULL;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1024  	struct cached_fid *cfid = NULL;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1025  	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1026
6d5786a34d98bff Pavel Shilovsky  2012-06-20  1027  	xid = get_xid();
010d984773e7614 Ronnie Sahlberg  2020-10-05  1028  	full_path = build_path_from_dentry(file_dentry(file));
010d984773e7614 Ronnie Sahlberg  2020-10-05  1029  	if (full_path == NULL) {
010d984773e7614 Ronnie Sahlberg  2020-10-05  1030  		rc = -ENOMEM;
010d984773e7614 Ronnie Sahlberg  2020-10-05  1031  		goto rddir2_exit;
010d984773e7614 Ronnie Sahlberg  2020-10-05  1032  	}
010d984773e7614 Ronnie Sahlberg  2020-10-05  1033
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1034  	mtcon = cifs_sb_master_tcon(cifs_sb);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1035  	if (!is_smb1_server(mtcon->ses->server) && !strcmp(full_path, "")) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1036  		rc = open_shroot(xid, mtcon, cifs_sb, &cfid);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1037  		if (rc)
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1038  			goto cache_not_found;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1039
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05 @1040  		mutex_lock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1041  		/*
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1042  		 * If this was reading from the start of the directory
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1043  		 * we need to initialize scanning and storing the
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1044  		 * directory content.
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1045  		 */
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1046  		if (ctx->pos == 0 && cfid->dirents.ctx == NULL) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1047  			cfid->dirents.ctx = ctx;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1048  			cfid->dirents.pos = 2;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1049  		}
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1050  		/*
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1051  		 * If we already have the entire directory cached then
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1052  		 * we can just serve the cache.
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1053  		 */
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1054  		if (cfid->dirents.is_valid) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1055  			if (!dir_emit_dots(file, ctx))
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1056  				goto rddir2_exit;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1057  			emit_cached_dirents(&cfid->dirents, ctx);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1058  			mutex_unlock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1059  			goto rddir2_exit;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1060  		}
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1061  		mutex_unlock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1062  	}
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1063   cache_not_found:
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1064
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1065  	/* Drop the cache while calling initiate_cifs_search and
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1066  	 * find_cifs_entry in case there will be reconnects during
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1067  	 * query_directory.
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1068  	 */
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1069  	if (cfid) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1070  		close_shroot(cfid);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1071  		cfid = NULL;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1072  	}
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1073
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1074
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1075  	/*
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1076  	 * Ensure FindFirst doesn't fail before doing filldir() for '.' and
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1077  	 * '..'. Otherwise we won't be able to notify VFS in case of failure.
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1078  	 */
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1079  	if (file->private_data == NULL) {
010d984773e7614 Ronnie Sahlberg  2020-10-05  1080  		rc = initiate_cifs_search(xid, file, full_path);
f96637be081141d Joe Perches      2013-05-04  1081  		cifs_dbg(FYI, "initiate cifs search rc %d\n", rc);
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1082  		if (rc)
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1083  			goto rddir2_exit;
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1084  	}
6221ddd0f5e2ddc Suresh Jayaraman 2010-10-01  1085
be4ccdcc2575ae1 Al Viro          2013-05-22  1086  	if (!dir_emit_dots(file, ctx))
be4ccdcc2575ae1 Al Viro          2013-05-22  1087  		goto rddir2_exit;
be4ccdcc2575ae1 Al Viro          2013-05-22  1088
^1da177e4c3f415 Linus Torvalds   2005-04-16  1089  	/* 1) If search is active,
^1da177e4c3f415 Linus Torvalds   2005-04-16  1090  		is in current search buffer?
^1da177e4c3f415 Linus Torvalds   2005-04-16  1091  		if it before then restart search
^1da177e4c3f415 Linus Torvalds   2005-04-16  1092  		if after then keep searching till find it */
^1da177e4c3f415 Linus Torvalds   2005-04-16  1093
^1da177e4c3f415 Linus Torvalds   2005-04-16  1094  	cifsFile = file->private_data;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1095  	tcon = tlink_tcon(cifsFile->tlink);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1096  	if (cifsFile->srch_inf.endOfSearch) {
^1da177e4c3f415 Linus Torvalds   2005-04-16  1097  		if (cifsFile->srch_inf.emptyDir) {
f96637be081141d Joe Perches      2013-05-04  1098  			cifs_dbg(FYI, "End of search, empty dir\n");
^1da177e4c3f415 Linus Torvalds   2005-04-16  1099  			rc = 0;
be4ccdcc2575ae1 Al Viro          2013-05-22  1100  			goto rddir2_exit;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1101  		}
^1da177e4c3f415 Linus Torvalds   2005-04-16  1102  	} /* else {
4b18f2a9c3964f7 Steve French     2008-04-29  1103  		cifsFile->invalidHandle = true;
92fc65a74a2be13 Pavel Shilovsky  2012-09-18  1104  		tcon->ses->server->close(xid, tcon, &cifsFile->fid);
aaa9bbe039febf1 Steve French     2008-05-23  1105  	} */
^1da177e4c3f415 Linus Torvalds   2005-04-16  1106
010d984773e7614 Ronnie Sahlberg  2020-10-05  1107  	rc = find_cifs_entry(xid, tcon, ctx->pos, file, full_path,
010d984773e7614 Ronnie Sahlberg  2020-10-05  1108  			     &current_entry, &num_to_fill);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1109  	if (!is_smb1_server(tcon->ses->server) && !strcmp(full_path, "")) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1110  		open_shroot(xid, mtcon, cifs_sb, &cfid);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1111  	}
^1da177e4c3f415 Linus Torvalds   2005-04-16  1112  	if (rc) {
f96637be081141d Joe Perches      2013-05-04  1113  		cifs_dbg(FYI, "fce error %d\n", rc);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1114  		goto rddir2_exit;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1115  	} else if (current_entry != NULL) {
be4ccdcc2575ae1 Al Viro          2013-05-22  1116  		cifs_dbg(FYI, "entry %lld found\n", ctx->pos);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1117  	} else {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1118  		if (cfid) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1119  			mutex_lock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1120  			finished_cached_dirents_count(&cfid->dirents, ctx);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1121  			mutex_unlock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1122  		}
a0a3036b81f1f66 Joe Perches      2020-04-14  1123  		cifs_dbg(FYI, "Could not find entry\n");
^1da177e4c3f415 Linus Torvalds   2005-04-16  1124  		goto rddir2_exit;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1125  	}
f96637be081141d Joe Perches      2013-05-04  1126  	cifs_dbg(FYI, "loop through %d times filling dir for net buf %p\n",
b6b38f704a8193d Joe Perches      2010-04-21  1127  		 num_to_fill, cifsFile->srch_inf.ntwrk_buf_start);
92fc65a74a2be13 Pavel Shilovsky  2012-09-18  1128  	max_len = tcon->ses->server->ops->calc_smb_size(
9ec672bd17131fe Ronnie Sahlberg  2018-04-22  1129  			cifsFile->srch_inf.ntwrk_buf_start,
9ec672bd17131fe Ronnie Sahlberg  2018-04-22  1130  			tcon->ses->server);
5bafd76593f0605 Steve French     2006-06-07  1131  	end_of_smb = cifsFile->srch_inf.ntwrk_buf_start + max_len;
5bafd76593f0605 Steve French     2006-06-07  1132
f58841666bc22e8 Jeff Layton      2009-04-30  1133  	tmp_buf = kmalloc(UNICODE_NAME_MAX, GFP_KERNEL);
f55fdcca6bf1c17 Kulikov Vasiliy  2010-07-16  1134  	if (tmp_buf == NULL) {
f55fdcca6bf1c17 Kulikov Vasiliy  2010-07-16  1135  		rc = -ENOMEM;
be4ccdcc2575ae1 Al Viro          2013-05-22  1136  		goto rddir2_exit;
f55fdcca6bf1c17 Kulikov Vasiliy  2010-07-16  1137  	}
f55fdcca6bf1c17 Kulikov Vasiliy  2010-07-16  1138
be4ccdcc2575ae1 Al Viro          2013-05-22  1139  	for (i = 0; i < num_to_fill; i++) {
^1da177e4c3f415 Linus Torvalds   2005-04-16  1140  		if (current_entry == NULL) {
^1da177e4c3f415 Linus Torvalds   2005-04-16  1141  			/* evaluate whether this case is an error */
f96637be081141d Joe Perches      2013-05-04  1142  			cifs_dbg(VFS, "past SMB end,  num to fill %d i %d\n",
b6b38f704a8193d Joe Perches      2010-04-21  1143  				 num_to_fill, i);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1144  			break;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1145  		}
92fc65a74a2be13 Pavel Shilovsky  2012-09-18  1146  		/*
92fc65a74a2be13 Pavel Shilovsky  2012-09-18  1147  		 * if buggy server returns . and .. late do we want to
92fc65a74a2be13 Pavel Shilovsky  2012-09-18  1148  		 * check for that here?
92fc65a74a2be13 Pavel Shilovsky  2012-09-18  1149  		 */
01b9b0b28626db4 Vasily Averin    2016-01-14  1150  		*tmp_buf = 0;
be4ccdcc2575ae1 Al Viro          2013-05-22  1151  		rc = cifs_filldir(current_entry, file, ctx,
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1152  				  tmp_buf, max_len, cfid);
be4ccdcc2575ae1 Al Viro          2013-05-22  1153  		if (rc) {
be4ccdcc2575ae1 Al Viro          2013-05-22  1154  			if (rc > 0)
7ca85ba752e521f Steve French     2006-10-30  1155  				rc = 0;
7ca85ba752e521f Steve French     2006-10-30  1156  			break;
7ca85ba752e521f Steve French     2006-10-30  1157  		}
7ca85ba752e521f Steve French     2006-10-30  1158
be4ccdcc2575ae1 Al Viro          2013-05-22  1159  		ctx->pos++;
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1160  		if (cfid) {
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1161  			mutex_lock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1162  			update_cached_dirents_count(&cfid->dirents, ctx);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1163  			mutex_unlock(&cfid->dirents.de_mutex);
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1164  		}
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1165
be4ccdcc2575ae1 Al Viro          2013-05-22  1166  		if (ctx->pos ==
3979877e5606ecc Steve French     2006-05-31  1167  			cifsFile->srch_inf.index_of_last_entry) {
f96637be081141d Joe Perches      2013-05-04  1168  			cifs_dbg(FYI, "last entry in buf at pos %lld %s\n",
be4ccdcc2575ae1 Al Viro          2013-05-22  1169  				 ctx->pos, tmp_buf);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1170  			cifs_save_resume_key(current_entry, cifsFile);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1171  			break;
^1da177e4c3f415 Linus Torvalds   2005-04-16  1172  		} else
5bafd76593f0605 Steve French     2006-06-07  1173  			current_entry =
5bafd76593f0605 Steve French     2006-06-07  1174  				nxt_dir_entry(current_entry, end_of_smb,
5bafd76593f0605 Steve French     2006-06-07  1175  					cifsFile->srch_inf.info_level);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1176  	}
^1da177e4c3f415 Linus Torvalds   2005-04-16  1177  	kfree(tmp_buf);
^1da177e4c3f415 Linus Torvalds   2005-04-16  1178
^1da177e4c3f415 Linus Torvalds   2005-04-16  1179  rddir2_exit:
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1180  	if (cfid)
7975d587dc0ef40 Ronnie Sahlberg  2020-10-05  1181  		close_shroot(cfid);
010d984773e7614 Ronnie Sahlberg  2020-10-05  1182  	kfree(full_path);
6d5786a34d98bff Pavel Shilovsky  2012-06-20  1183  	free_xid(xid);
^1da177e4c3f415 Linus Torvalds   2005-04-16 @1184  	return rc;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux