* Re: [PATCH 3/3] cifs: cache the directory content for shroot (fwd)
@ 2020-10-05 7:39 Julia Lawall
0 siblings, 0 replies; only message in thread
From: Julia Lawall @ 2020-10-05 7:39 UTC (permalink / raw)
To: Ronnie Sahlberg, linux-cifs; +Cc: Steve French, kbuild-all
[-- Attachment #1: Type: text/plain, Size: 15121 bytes --]
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@intel.com>
To: kbuild@lists.01.org
Cc: lkp@intel.com, Julia Lawall <julia.lawall@lip6.fr>
Subject: Re: [PATCH 3/3] cifs: cache the directory content for shroot
CC: kbuild-all@lists.01.org
In-Reply-To: <20201005023754.13604-4-lsahlber@redhat.com>
References: <20201005023754.13604-4-lsahlber@redhat.com>
TO: Ronnie Sahlberg <lsahlber@redhat.com>
TO: "linux-cifs" <linux-cifs@vger.kernel.org>
CC: Steve French <smfrench@gmail.com>
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@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
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 ¤t_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@lists.01.org
[-- Attachment #2: Type: application/gzip, Size: 30782 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-10-05 7:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-05 7:39 [PATCH 3/3] cifs: cache the directory content for shroot (fwd) Julia Lawall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox