]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge patch series "netfs: Miscellaneous fixes"
authorChristian Brauner <brauner@kernel.org>
Wed, 21 May 2025 12:35:34 +0000 (14:35 +0200)
committerChristian Brauner <brauner@kernel.org>
Wed, 21 May 2025 12:35:34 +0000 (14:35 +0200)
David Howells <dhowells@redhat.com> says:

Here are some miscellaneous fixes and changes for netfslib, if you could
pull them:

 (1) Fix an oops in write-retry due to mis-resetting the I/O iterator.

 (2) Fix the recording of transferred bytes for short DIO reads.

 (3) Fix a request's work item to not require a reference, thereby avoiding
     the need to get rid of it in BH/IRQ context.

 (4) Fix waiting and waking to be consistent about the waitqueue used.

* patches from https://lore.kernel.org/20250519090707.2848510-1-dhowells@redhat.com:
  netfs: Fix wait/wake to be consistent about the waitqueue used
  netfs: Fix the request's work item to not require a ref
  netfs: Fix setting of transferred bytes with short DIO reads
  netfs: Fix oops in write-retry from mis-resetting the subreq iterator

Link: https://lore.kernel.org/20250519090707.2848510-1-dhowells@redhat.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
1  2 
fs/netfs/buffered_read.c
fs/netfs/buffered_write.c
fs/netfs/direct_read.c
fs/netfs/objects.c
fs/netfs/read_collect.c
fs/netfs/write_collect.c
include/linux/fscache.h
include/linux/netfs.h
include/trace/events/netfs.h

index 5f53634a386254829454c347f1f83c234325a738,fd4619275801be98f6a936a84a4724bf600b0dfe..18b3dc74c70e413726a4192de7e93c80ab21b91e
@@@ -364,14 -362,13 +364,12 @@@ void netfs_readahead(struct readahead_c
        rreq->submitted = rreq->start;
        if (rolling_buffer_init(&rreq->buffer, rreq->debug_id, ITER_DEST) < 0)
                goto cleanup_free;
 -      netfs_read_to_pagecache(rreq);
 +      netfs_read_to_pagecache(rreq, ractl);
  
-       netfs_put_request(rreq, true, netfs_rreq_trace_put_return);
-       return;
+       return netfs_put_request(rreq, netfs_rreq_trace_put_return);
  
  cleanup_free:
-       netfs_put_request(rreq, false, netfs_rreq_trace_put_failed);
-       return;
+       return netfs_put_request(rreq, netfs_rreq_trace_put_failed);
  }
  EXPORT_SYMBOL(netfs_readahead);
  
@@@ -528,9 -526,9 +526,9 @@@ int netfs_read_folio(struct file *file
        if (ret < 0)
                goto discard;
  
 -      netfs_read_to_pagecache(rreq);
 +      netfs_read_to_pagecache(rreq, NULL);
        ret = netfs_wait_for_read(rreq);
-       netfs_put_request(rreq, false, netfs_rreq_trace_put_return);
+       netfs_put_request(rreq, netfs_rreq_trace_put_return);
        return ret < 0 ? ret : 0;
  
  discard:
@@@ -750,9 -748,9 +748,9 @@@ int netfs_prefetch_for_write(struct fil
        if (ret < 0)
                goto error_put;
  
 -      netfs_read_to_pagecache(rreq);
 +      netfs_read_to_pagecache(rreq, NULL);
        ret = netfs_wait_for_read(rreq);
-       netfs_put_request(rreq, false, netfs_rreq_trace_put_return);
+       netfs_put_request(rreq, netfs_rreq_trace_put_return);
        return ret < 0 ? ret : 0;
  
  error_put:
Simple merge
index f11a89f2fdd9af09093a59f7dfb938ddae2cc1fe,a24e63d2c8186a6059201ee850aa20bb52871e01..e72c8b69b1475eedaa15199479f2056007374608
@@@ -103,9 -103,12 +103,9 @@@ static int netfs_dispatch_unbuffered_re
                rreq->netfs_ops->issue_read(subreq);
  
                if (test_bit(NETFS_RREQ_PAUSE, &rreq->flags))
-                       netfs_wait_for_pause(rreq);
+                       netfs_wait_for_paused_read(rreq);
                if (test_bit(NETFS_RREQ_FAILED, &rreq->flags))
                        break;
 -              if (test_bit(NETFS_RREQ_BLOCKED, &rreq->flags) &&
 -                  test_bit(NETFS_RREQ_NONBLOCK, &rreq->flags))
 -                      break;
                cond_resched();
        } while (size > 0);
  
Simple merge
Simple merge
Simple merge
Simple merge
index cf634c28522d5fb0ac4b52378c839832d6242c12,c3f230732f51dfffc92bab0c678c219f5d10df69..7a649cfedc0967babd82684908287d909f98f9cb
@@@ -48,10 -48,10 +48,9 @@@ enum netfs_io_source 
        NETFS_INVALID_READ,
        NETFS_UPLOAD_TO_SERVER,
        NETFS_WRITE_TO_CACHE,
 -      NETFS_INVALID_WRITE,
  } __mode(byte);
  
- typedef void (*netfs_io_terminated_t)(void *priv, ssize_t transferred_or_error,
-                                     bool was_async);
+ typedef void (*netfs_io_terminated_t)(void *priv, ssize_t transferred_or_error);
  
  /*
   * Per-inode context.  This wraps the VFS inode.
@@@ -266,10 -268,13 +266,10 @@@ struct netfs_io_request 
        unsigned long           flags;
  #define NETFS_RREQ_OFFLOAD_COLLECTION 0       /* Offload collection to workqueue */
  #define NETFS_RREQ_NO_UNLOCK_FOLIO    2       /* Don't unlock no_unlock_folio on completion */
 -#define NETFS_RREQ_DONT_UNLOCK_FOLIOS 3       /* Don't unlock the folios on completion */
  #define NETFS_RREQ_FAILED             4       /* The request failed */
- #define NETFS_RREQ_IN_PROGRESS                5       /* Unlocked when the request completes */
+ #define NETFS_RREQ_IN_PROGRESS                5       /* Unlocked when the request completes (has ref) */
  #define NETFS_RREQ_FOLIO_COPY_TO_CACHE        6       /* Copy current folio to cache from read */
  #define NETFS_RREQ_UPLOAD_TO_SERVER   8       /* Need to write to the server */
 -#define NETFS_RREQ_NONBLOCK           9       /* Don't block if possible (O_NONBLOCK) */
 -#define NETFS_RREQ_BLOCKED            10      /* We blocked */
  #define NETFS_RREQ_PAUSE              11      /* Pause subrequest generation */
  #define NETFS_RREQ_USE_IO_ITER                12      /* Use ->io_iter rather than ->i_pages */
  #define NETFS_RREQ_ALL_QUEUED         13      /* All subreqs are now queued */
Simple merge