* [ammarfaizi2-block:dhowells/linux-fs/netfs-linked-list 61/61] fs/netfs/buffered_flush.c:1072:1-7: preceding lock on line 1011
@ 2022-07-09 15:03 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-07-09 15:03 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 9974 bytes --]
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: "GNU/Weeb Mailing List" <gwml@vger.gnuweeb.org>
CC: linux-kernel(a)vger.kernel.org
TO: David Howells <dhowells@redhat.com>
tree: https://github.com/ammarfaizi2/linux-block dhowells/linux-fs/netfs-linked-list
head: ce4670495468b797b0c5927fcb661bc0da48b9ab
commit: ce4670495468b797b0c5927fcb661bc0da48b9ab [61/61] netfs: Add a struct to group modifications together and flushed in order
:::::: branch date: 8 days ago
:::::: commit date: 8 days ago
config: openrisc-randconfig-c024-20220707 (https://download.01.org/0day-ci/archive/20220709/202207092348.fCpvRbGD-lkp(a)intel.com/config)
compiler: or1k-linux-gcc (GCC) 11.3.0
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
cocci warnings: (new ones prefixed by >>)
>> fs/netfs/buffered_flush.c:1072:1-7: preceding lock on line 1011
vim +1072 fs/netfs/buffered_flush.c
ce4670495468b79 David Howells 2022-02-07 962
2dc27084e13c291 David Howells 2021-06-29 963 /*
2dc27084e13c291 David Howells 2021-06-29 964 * Flush some of the dirty queue, transforming a part of a sequence of dirty
2dc27084e13c291 David Howells 2021-06-29 965 * regions into a block we can flush.
2dc27084e13c291 David Howells 2021-06-29 966 *
2dc27084e13c291 David Howells 2021-06-29 967 * A number of things constrain us:
2dc27084e13c291 David Howells 2021-06-29 968 * - The region we write out should not be undergoing modification
2dc27084e13c291 David Howells 2021-06-29 969 * - We may need to expand or split the region for a number of reasons:
2dc27084e13c291 David Howells 2021-06-29 970 * - Filesystem storage block/object size
2dc27084e13c291 David Howells 2021-06-29 971 * - Filesystem RPC size (wsize)
2dc27084e13c291 David Howells 2021-06-29 972 * - Cache block size
2dc27084e13c291 David Howells 2021-06-29 973 * - Cache DIO block size
2dc27084e13c291 David Howells 2021-06-29 974 * - Crypto/compression block size
2dc27084e13c291 David Howells 2021-06-29 975 *
2dc27084e13c291 David Howells 2021-06-29 976 * This may be entered multiple times simultaneously. Automatic flushing by
2dc27084e13c291 David Howells 2021-06-29 977 * the VM is serialised on I_SYNC, but things like fsync() may enter multiple
2dc27084e13c291 David Howells 2021-06-29 978 * times simultaneously.
2dc27084e13c291 David Howells 2021-06-29 979 */
2dc27084e13c291 David Howells 2021-06-29 980 static int netfs_select_dirty(struct netfs_io_request *wreq,
2dc27084e13c291 David Howells 2021-06-29 981 struct writeback_control *wbc,
2dc27084e13c291 David Howells 2021-06-29 982 struct netfs_inode *ctx,
2dc27084e13c291 David Howells 2021-06-29 983 pgoff_t *_first, pgoff_t last)
2dc27084e13c291 David Howells 2021-06-29 984 {
2dc27084e13c291 David Howells 2021-06-29 985 struct netfs_dirty_region *region;
ce4670495468b79 David Howells 2022-02-07 986 struct netfs_flush_group *group;
2dc27084e13c291 David Howells 2021-06-29 987 pgoff_t first = *_first;
2dc27084e13c291 David Howells 2021-06-29 988 pgoff_t csize = 1UL << ctx->cache_order;
ce4670495468b79 David Howells 2022-02-07 989 bool advance = true;
2dc27084e13c291 David Howells 2021-06-29 990 int ret;
2dc27084e13c291 David Howells 2021-06-29 991
2dc27084e13c291 David Howells 2021-06-29 992 /* Round out the range we're looking through to accommodate whole cache
2dc27084e13c291 David Howells 2021-06-29 993 * blocks. The cache may only be able to store blocks of that size, in
2dc27084e13c291 David Howells 2021-06-29 994 * which case we may need to add non-dirty pages to the buffer too.
2dc27084e13c291 David Howells 2021-06-29 995 */
2dc27084e13c291 David Howells 2021-06-29 996 if (ctx->cache_order) {
2dc27084e13c291 David Howells 2021-06-29 997 first = round_down(first, csize);
2dc27084e13c291 David Howells 2021-06-29 998 last = round_up_incl(last, csize);
2dc27084e13c291 David Howells 2021-06-29 999 }
2dc27084e13c291 David Howells 2021-06-29 1000
2dc27084e13c291 David Howells 2021-06-29 1001 _enter("%lx-%lx", first, last);
2dc27084e13c291 David Howells 2021-06-29 1002
2dc27084e13c291 David Howells 2021-06-29 1003 if (wbc->sync_mode == WB_SYNC_NONE) {
2dc27084e13c291 David Howells 2021-06-29 1004 if (!mutex_trylock(&ctx->wb_mutex))
2dc27084e13c291 David Howells 2021-06-29 1005 return 0;
2dc27084e13c291 David Howells 2021-06-29 1006 } else {
2dc27084e13c291 David Howells 2021-06-29 1007 mutex_lock(&ctx->wb_mutex);
2dc27084e13c291 David Howells 2021-06-29 1008 }
2dc27084e13c291 David Howells 2021-06-29 1009
2dc27084e13c291 David Howells 2021-06-29 1010 /* Find the first dirty region that overlaps the requested range */
2dc27084e13c291 David Howells 2021-06-29 @1011 spin_lock(&ctx->dirty_lock);
ce4670495468b79 David Howells 2022-02-07 1012
2dc27084e13c291 David Howells 2021-06-29 1013 region = netfs_scan_for_region(ctx, first, last);
ce4670495468b79 David Howells 2022-02-07 1014 if (region)
ce4670495468b79 David Howells 2022-02-07 1015 kdebug("scan got D=%08x", region->debug_id);
ce4670495468b79 David Howells 2022-02-07 1016
ce4670495468b79 David Howells 2022-02-07 1017 /* If the region selected is not in the bottommost flush group, we need
ce4670495468b79 David Howells 2022-02-07 1018 * to flush prerequisites first.
ce4670495468b79 David Howells 2022-02-07 1019 */
ce4670495468b79 David Howells 2022-02-07 1020 if (region && region->group) {
ce4670495468b79 David Howells 2022-02-07 1021 group = list_first_entry(&ctx->flush_groups,
ce4670495468b79 David Howells 2022-02-07 1022 struct netfs_flush_group, group_link);
ce4670495468b79 David Howells 2022-02-07 1023 if (region->group != group) {
ce4670495468b79 David Howells 2022-02-07 1024 kdebug("flush prereq");
ce4670495468b79 David Howells 2022-02-07 1025 region = netfs_select_from_flush_group(wbc, ctx, group);
ce4670495468b79 David Howells 2022-02-07 1026 if (IS_ERR(region)) {
ce4670495468b79 David Howells 2022-02-07 1027 ret = PTR_ERR(region);
ce4670495468b79 David Howells 2022-02-07 1028 goto unlock;
ce4670495468b79 David Howells 2022-02-07 1029 }
ce4670495468b79 David Howells 2022-02-07 1030 advance = false;
ce4670495468b79 David Howells 2022-02-07 1031 }
2dc27084e13c291 David Howells 2021-06-29 1032 }
ce4670495468b79 David Howells 2022-02-07 1033
ce4670495468b79 David Howells 2022-02-07 1034 if (region)
ce4670495468b79 David Howells 2022-02-07 1035 netfs_get_dirty_region(ctx, region, netfs_region_trace_get_wback);
ce4670495468b79 David Howells 2022-02-07 1036
2dc27084e13c291 David Howells 2021-06-29 1037 spin_unlock(&ctx->dirty_lock);
2dc27084e13c291 David Howells 2021-06-29 1038 if (!region) {
2dc27084e13c291 David Howells 2021-06-29 1039 _debug("scan failed");
2dc27084e13c291 David Howells 2021-06-29 1040 *_first = last;
2dc27084e13c291 David Howells 2021-06-29 1041 ret = 0;
2dc27084e13c291 David Howells 2021-06-29 1042 goto unlock;
2dc27084e13c291 David Howells 2021-06-29 1043 }
2dc27084e13c291 David Howells 2021-06-29 1044
2dc27084e13c291 David Howells 2021-06-29 1045 /* Try to grab the first folio of the requested range within that
2dc27084e13c291 David Howells 2021-06-29 1046 * region.
2dc27084e13c291 David Howells 2021-06-29 1047 */
2dc27084e13c291 David Howells 2021-06-29 1048 if (*_first < region->first)
2dc27084e13c291 David Howells 2021-06-29 1049 *_first = region->first;
ce4670495468b79 David Howells 2022-02-07 1050
2dc27084e13c291 David Howells 2021-06-29 1051 ret = netfs_find_writeback_start(wreq, wbc, region, _first, last);
2dc27084e13c291 David Howells 2021-06-29 1052 if (ret <= 0)
ce4670495468b79 David Howells 2022-02-07 1053 goto put_region;
2dc27084e13c291 David Howells 2021-06-29 1054
2dc27084e13c291 David Howells 2021-06-29 1055 netfs_extend_writeback(wreq, wbc, ctx, region);
ce4670495468b79 David Howells 2022-02-07 1056 if (advance)
2dc27084e13c291 David Howells 2021-06-29 1057 *_first = wreq->last + 1;
2dc27084e13c291 David Howells 2021-06-29 1058
2dc27084e13c291 David Howells 2021-06-29 1059 netfs_split_out_regions(wreq, ctx, region);
2dc27084e13c291 David Howells 2021-06-29 1060
2dc27084e13c291 David Howells 2021-06-29 1061 /* The assembled write request gets placed on the list to prevent
2dc27084e13c291 David Howells 2021-06-29 1062 * conflicting write requests happening simultaneously.
2dc27084e13c291 David Howells 2021-06-29 1063 */
2dc27084e13c291 David Howells 2021-06-29 1064 netfs_add_wback_to_list(ctx, wreq);
2dc27084e13c291 David Howells 2021-06-29 1065 ret = 1;
2dc27084e13c291 David Howells 2021-06-29 1066
ce4670495468b79 David Howells 2022-02-07 1067 put_region:
ce4670495468b79 David Howells 2022-02-07 1068 netfs_put_dirty_region(ctx, region, netfs_region_trace_put_wback);
2dc27084e13c291 David Howells 2021-06-29 1069 unlock:
2dc27084e13c291 David Howells 2021-06-29 1070 mutex_unlock(&ctx->wb_mutex);
2dc27084e13c291 David Howells 2021-06-29 1071 _leave(" = %d [%lx]", ret, *_first);
2dc27084e13c291 David Howells 2021-06-29 @1072 return ret;
2dc27084e13c291 David Howells 2021-06-29 1073 }
2dc27084e13c291 David Howells 2021-06-29 1074
:::::: The code at line 1072 was first introduced by commit
:::::: 2dc27084e13c29183f0a6853b81e5fa2941948e3 netfs: Generate a write request from ->writepages()
:::::: TO: David Howells <dhowells@redhat.com>
:::::: CC: David Howells <dhowells@redhat.com>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-07-09 15:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-09 15:03 [ammarfaizi2-block:dhowells/linux-fs/netfs-linked-list 61/61] fs/netfs/buffered_flush.c:1072:1-7: preceding lock on line 1011 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.