1. 16 Oct, 2023 27 commits
    • Dai Ngo's avatar
      NFSD: add support for CB_GETATTR callback · 738401a9
      Dai Ngo authored
      Includes:
         . CB_GETATTR proc for nfs4_cb_procedures[]
         . XDR encoding and decoding function for CB_GETATTR request/reply
         . add nfs4_cb_fattr to nfs4_delegation for sending CB_GETATTR
           and store file attributes from client's reply.
      Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      738401a9
    • NeilBrown's avatar
      SUNRPC: change the back-channel queue to lwq · 15d39883
      NeilBrown authored
      This removes the need to store and update back-links in the list.
      It also remove the need for the _bh version of spin_lock().
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
      Cc: Anna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      15d39883
    • NeilBrown's avatar
      SUNRPC: discard sp_lock · 580a2575
      NeilBrown authored
      sp_lock is now only used to protect sp_all_threads.  This isn't needed
      as sp_all_threads is only manipulated through svc_set_num_threads(),
      which is already serialized.  Read-acccess only requires rcu_read_lock().
      So no more locking is needed.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      580a2575
    • NeilBrown's avatar
      SUNRPC: change sp_nrthreads to atomic_t · 2e8fc923
      NeilBrown authored
      Using an atomic_t avoids the need to take a spinlock (which can soon be
      removed).
      
      Choosing a thread to kill needs to be careful as we cannot set the "die
      now" bit atomically with the test on the count.  Instead we temporarily
      increase the count.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      2e8fc923
    • NeilBrown's avatar
      SUNRPC: use lwq for sp_sockets - renamed to sp_xprts · 9a0e6acc
      NeilBrown authored
      lwq avoids using back pointers in lists, and uses less locking.
      This introduces a new spinlock, but the other one will be removed in a
      future patch.
      
      For svc_clean_up_xprts(), we now dequeue the entire queue, walk it to
      remove and process the xprts that need cleaning up, then re-enqueue the
      remaining queue.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      9a0e6acc
    • NeilBrown's avatar
      SUNRPC: only have one thread waking up at a time · 5b80147e
      NeilBrown authored
      Currently if several items of work become available in quick succession,
      that number of threads (if available) will be woken.  By the time some
      of them wake up another thread that was already cache-warm might have
      come along and completed the work.  Anecdotal evidence suggests as many
      as 15% of wakes find nothing to do once they get to the point of
      looking.
      
      This patch changes svc_pool_wake_idle_thread() to wake the first thread
      on the queue but NOT remove it.  Subsequent calls will wake the same
      thread.  Once that thread starts it will dequeue itself and after
      dequeueing some work to do, it will wake the next thread if there is more
      work ready.  This results in a more orderly increase in the number of
      busy threads.
      
      As a bonus, this allows us to reduce locking around the idle queue.
      svc_pool_wake_idle_thread() no longer needs to take a lock (beyond
      rcu_read_lock()) as it doesn't manipulate the queue, it just looks at
      the first item.
      
      The thread itself can avoid locking by using the new
      llist_del_first_this() interface.  This will safely remove the thread
      itself if it is the head.  If it isn't the head, it will do nothing.
      If multiple threads call this concurrently only one will succeed.  The
      others will do nothing, so no corruption can result.
      
      If a thread wakes up and finds that it cannot dequeue itself that means
      either
      - that it wasn't woken because it was the head of the queue.  Maybe the
        freezer woke it.  In that case it can go back to sleep (after trying
        to freeze of course).
      - some other thread found there was nothing to do very recently, and
        placed itself on the head of the queue in front of this thread.
        It must check again after placing itself there, so it can be deemed to
        be responsible for any pending work, and this thread can go back to
        sleep until woken.
      
      No code ever tests for busy threads any more.  Only each thread itself
      cares if it is busy.  So svc_thread_busy() is no longer needed.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      5b80147e
    • NeilBrown's avatar
      SUNRPC: rename some functions from rqst_ to svc_thread_ · d7926ee8
      NeilBrown authored
      Functions which directly manipulate a 'struct rqst', such as
      svc_rqst_alloc() or svc_rqst_release_pages(), can reasonably
      have "rqst" in there name.
      However functions that act on the running thread, such as
      XX_should_sleep() or XX_wait_for_work() should seem more
      natural with a "svc_thread_" prefix.
      
      So make those changes.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      d7926ee8
    • NeilBrown's avatar
      lib: add light-weight queuing mechanism. · de9e82c3
      NeilBrown authored
      lwq is a FIFO single-linked queue that only requires a spinlock
      for dequeueing, which happens in process context.  Enqueueing is atomic
      with no spinlock and can happen in any context.
      
      This is particularly useful when work items are queued from BH or IRQ
      context, and when they are handled one at a time by dedicated threads.
      
      Avoiding any locking when enqueueing means there is no need to disable
      BH or interrupts, which is generally best avoided (particularly when
      there are any RT tasks on the machine).
      
      This solution is superior to using "list_head" links because we need
      half as many pointers in the data structures, and because list_head
      lists would need locking to add items to the queue.
      
      This solution is superior to a bespoke solution as all locking and
      container_of casting is integrated, so the interface is simple.
      
      Despite the similar name, this solution meets a distinctly different
      need to kfifo.  kfifo provides a fixed sized circular buffer to which
      data can be added at one end and removed at the other, and does not
      provide any locking.  lwq does not have any size limit and works with
      data structures (objects?) rather than data (bytes).
      
      A unit test for basic functionality, which runs at boot time, is included.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: David Gow <davidgow@google.com>
      Cc: linux-kernel@vger.kernel.org
      Message-Id: <20230911111333.4d1a872330e924a00acb905b@linux-foundation.org>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      de9e82c3
    • NeilBrown's avatar
      llist: add llist_del_first_this() · 8a3e5975
      NeilBrown authored
      llist_del_first_this() deletes a specific entry from an llist, providing
      it is at the head of the list.  Multiple threads can call this
      concurrently providing they each offer a different entry.
      
      This can be uses for a set of worker threads which are on the llist when
      they are idle.  The head can always be woken, and when it is woken it
      can remove itself, and possibly wake the next if there is an excess of
      work to do.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      8a3e5975
    • NeilBrown's avatar
      SUNRPC: change service idle list to be an llist · 9bd4161c
      NeilBrown authored
      With an llist we don't need to take a lock to add a thread to the list,
      though we still need a lock to remove it.  That will go in the next
      patch.
      
      Unlike double-linked lists, a thread cannot reliably remove itself from
      the list.  Only the first thread can be removed, and that can change
      asynchronously.  So some care is needed.
      
      We already check if there is pending work to do, so we are unlikely to
      add ourselves to the idle list and then want to remove ourselves again.
      
      If we DO find something needs to be done after adding ourselves to the
      list, we simply wake up the first thread on the list.  If that was us,
      we successfully removed ourselves and can continue.  If it was some
      other thread, they will do the work that needs to be done.  We can
      safely sleep until woken.
      
      We also remove the test on freezing() from rqst_should_sleep().  Instead
      we set TASK_FREEZABLE before scheduling.  This makes is safe to
      schedule() when a freeze is pending.  As we now loop waiting to be
      removed from the idle queue, this is a cleaner way to handle freezing.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      9bd4161c
    • NeilBrown's avatar
      llist: add interface to check if a node is on a list. · d6b3358a
      NeilBrown authored
      With list.h lists, it is easy to test if a node is on a list, providing
      it was initialised and that it is removed with list_del_init().
      
      This patch provides similar functionality for llist.h lists.
      
       init_llist_node()
      marks a node as being not-on-any-list be setting the ->next pointer to
      the node itself.
       llist_on_list()
      tests if the node is on any list.
       llist_del_first_init()
      remove the first element from a llist, and marks it as being off-list.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      d6b3358a
    • NeilBrown's avatar
      SUNRPC: discard SP_CONGESTED · 2b65a226
      NeilBrown authored
      We can tell if a pool is congested by checking if the idle list is
      empty.  We don't need a separate flag.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      2b65a226
    • NeilBrown's avatar
      SUNRPC: add list of idle threads · 5ff817b2
      NeilBrown authored
      Rather than searching a list of threads to find an idle one, having a
      list of idle threads allows an idle thread to be found immediately.
      
      This adds some spin_lock calls which is not ideal, but as the hold-time
      is tiny it is still faster than searching a list.  A future patch will
      remove them using llist.h.  This involves some subtlety and so is left
      to a separate patch.
      
      This removes the need for the RQ_BUSY flag.  The rqst is "busy"
      precisely when it is not on the "idle" list.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      5ff817b2
    • NeilBrown's avatar
      SUNRPC: change how svc threads are asked to exit. · fa341560
      NeilBrown authored
      svc threads are currently stopped using kthread_stop().  This requires
      identifying a specific thread.  However we don't care which thread
      stops, just as long as one does.
      
      So instead, set a flag in the svc_pool to say that a thread needs to
      die, and have each thread check this flag instead of calling
      kthread_should_stop().  The first thread to find and clear this flag
      then moves towards exiting.
      
      This removes an explicit dependency on sp_all_threads which will make a
      future patch simpler.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      fa341560
    • NeilBrown's avatar
      lockd: hold a reference to nlmsvc_serv while stopping the thread. · f4578ba1
      NeilBrown authored
      Both nfsd and nfsv4-callback take a temporary reference to the svc_serv
      while calling svc_set_num_threads() to stop the last thread.  lockd does
      not.
      
      This extra reference prevents the scv_serv from being freed when the
      last thread drops its reference count.  This is not currently needed
      for lockd as the svc_serv is not accessed after the last thread is told
      to exit.
      
      However a future patch will require svc_exit_thread() to access the
      svc_serv after the svc_put() so it will need the code that calls
      svc_set_num_threads() to keep a reference and keep the svc_serv active.
      
      So copy the pattern from nfsd and nfsv4-cb to lockd, and take a
      reference around svc_set_num_threads(.., 0)
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Tested-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      f4578ba1
    • NeilBrown's avatar
      SUNRPC: integrate back-channel processing with svc_recv() · 063ab935
      NeilBrown authored
      Using svc_recv() for (NFSv4.1) back-channel handling means we have just
      one mechanism for waking threads.
      
      Also change kthread_freezable_should_stop() in nfs4_callback_svc() to
      kthread_should_stop() as used elsewhere.
      kthread_freezable_should_stop() effectively adds a try_to_freeze() call,
      and svc_recv() already contains that at an appropriate place.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
      Cc: Anna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      063ab935
    • Chuck Lever's avatar
      SUNRPC: Clean up bc_svc_process() · 6ed8cdf9
      Chuck Lever authored
      The test robot complained that, in some build configurations, the
      @error variable in bc_svc_process's only caller is set but never
      used. This happens because dprintk() is the only consumer of that
      value.
      
       - Remove the dprintk() call sites in favor of the svc_process
         tracepoint
       - The @error variable and the return value of bc_svc_process() are
         now unused, so get rid of them.
       - The @serv parameter is set to rqstp->rq_serv by the only caller,
         and bc_svc_process() then uses it only to set rqstp->rq_serv. It
         can be removed.
       - Rename bc_svc_process() according to the convention that
         globally-visible RPC server functions have names that begin with
         "svc_"; and because it is globally-visible, give it a proper
         kdoc comment.
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Closes: https://lore.kernel.org/oe-kbuild-all/202308121314.HA8Rq2XG-lkp@intel.com/Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      6ed8cdf9
    • NeilBrown's avatar
      SUNRPC: rename and refactor svc_get_next_xprt() · 7b31f4da
      NeilBrown authored
      svc_get_next_xprt() does a lot more than just get an xprt.  It also
      decides if it needs to sleep, depending not only on the availability of
      xprts but also on the need to exit or handle external work.
      
      So rename it to svc_rqst_wait_for_work() and only do the testing and
      waiting.  Move all the waiting-related code out of svc_recv() into the
      new svc_rqst_wait_for_work().
      
      Move the dequeueing code out of svc_get_next_xprt() into svc_recv().
      
      Previously svc_xprt_dequeue() would be called twice, once before waiting
      and possibly once after.  Now instead rqst_should_sleep() is called
      twice.  Once to decide if waiting is needed, and once to check against
      after setting the task state do see if we might have missed a wakeup.
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      7b31f4da
    • NeilBrown's avatar
      SUNRPC: move all of xprt handling into svc_xprt_handle() · e3274026
      NeilBrown authored
      svc_xprt_handle() does lots of things itself, but leaves some to the
      caller - svc_recv().  This isn't elegant.
      
      Move that code out of svc_recv() into svc_xprt_handle()
      
      Move the calls to svc_xprt_release() from svc_send() and svc_drop()
      (the two possible final steps in svc_process()) and from svc_recv() (in
      the case where svc_process() wasn't called) into svc_xprt_handle().
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      e3274026
    • Alexander Aring's avatar
      lockd: add doc to enable EXPORT_OP_ASYNC_LOCK · e70da176
      Alexander Aring authored
      This patch adds a note to enable EXPORT_OP_ASYNC_LOCK for
      asynchronous lock request handling.
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      e70da176
    • Alexander Aring's avatar
      lockd: fix race in async lock request handling · afb13302
      Alexander Aring authored
      This patch fixes a race in async lock request handling between adding
      the relevant struct nlm_block to nlm_blocked list after the request was
      sent by vfs_lock_file() and nlmsvc_grant_deferred() does a lookup of the
      nlm_block in the nlm_blocked list. It could be that the async request is
      completed before the nlm_block was added to the list. This would end
      in a -ENOENT and a kernel log message of "lockd: grant for unknown
      block".
      
      To solve this issue we add the nlm_block before the vfs_lock_file() call
      to be sure it has been added when a possible nlmsvc_grant_deferred() is
      called. If the vfs_lock_file() results in an case when it wouldn't be
      added to nlm_blocked list, the nlm_block struct will be removed from
      this list again.
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      afb13302
    • Alexander Aring's avatar
      lockd: don't call vfs_lock_file() for pending requests · b743612c
      Alexander Aring authored
      This patch returns nlm_lck_blocked in nlmsvc_lock() when an asynchronous
      lock request is pending. During testing I ran into the case with the
      side-effects that lockd is waiting for only one lm_grant() callback
      because it's already part of the nlm_blocked list. If another
      asynchronous for the same nlm_block is triggered two lm_grant()
      callbacks will occur but lockd was only waiting for one.
      
      To avoid any change of existing users this handling will only being made
      when export_op_support_safe_async_lock() returns true.
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      b743612c
    • Alexander Aring's avatar
      lockd: introduce safe async lock op · 2dd10de8
      Alexander Aring authored
      This patch reverts mostly commit 40595cdc ("nfs: block notification
      on fs with its own ->lock") and introduces an EXPORT_OP_ASYNC_LOCK
      export flag to signal that the "own ->lock" implementation supports
      async lock requests. The only main user is DLM that is used by GFS2 and
      OCFS2 filesystem. Those implement their own lock() implementation and
      return FILE_LOCK_DEFERRED as return value. Since commit 40595cdc
      ("nfs: block notification on fs with its own ->lock") the DLM
      implementation were never updated. This patch should prepare for DLM
      to set the EXPORT_OP_ASYNC_LOCK export flag and update the DLM
      plock implementation regarding to it.
      Acked-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      2dd10de8
    • Trond Myklebust's avatar
      nfsd: Don't reset the write verifier on a commit EAGAIN · 1b2021bd
      Trond Myklebust authored
      If fsync() is returning EAGAIN, then we can assume that the filesystem
      being exported is something like NFS with the 'softerr' mount option
      enabled, and that it is just asking us to replay the fsync() operation
      at a later date.
      
      If we see an ESTALE, then ditto: the file is gone, so there is no danger
      of losing the error.
      
      For those cases, do not reset the write verifier. A write verifier
      change has a global effect, causing retransmission by all clients of
      all uncommitted unstable writes for all files, so it is worth
      mitigating where possible.
      
      Link: https://lore.kernel.org/linux-nfs/20230911184357.11739-1-trond.myklebust@hammerspace.com/Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      1b2021bd
    • Trond Myklebust's avatar
      nfsd: Handle EOPENSTALE correctly in the filecache · d59b3515
      Trond Myklebust authored
      The nfsd_open code handles EOPENSTALE correctly, by retrying the call to
      fh_verify() and __nfsd_open(). However the filecache just drops the
      error on the floor, and immediately returns nfserr_stale to the caller.
      
      This patch ensures that we propagate the EOPENSTALE code back to
      nfsd_file_do_acquire, and that we handle it correctly.
      
      Fixes: 65294c1f ("nfsd: add a new struct file caching facility to nfsd")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Message-Id: <20230911183027.11372-1-trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      d59b3515
    • Dai Ngo's avatar
      NFSD: add trace points to track server copy progress · 5896a870
      Dai Ngo authored
      Add trace points on destination server to track inter and intra
      server copy operations.
      Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
      Tested-by: default avatarChen Hanxiao <chenhx.fnst@fujitsu.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      5896a870
    • Dai Ngo's avatar
      NFSD: initialize copy->cp_clp early in nfsd4_copy for use by trace point · 15d1975b
      Dai Ngo authored
      Prepare for adding server copy trace points.
      Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
      Tested-by: default avatarChen Hanxiao <chenhx.fnst@fujitsu.com>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      15d1975b
  2. 15 Oct, 2023 11 commits
    • Linus Torvalds's avatar
      Linux 6.6-rc6 · 58720809
      Linus Torvalds authored
      58720809
    • Linus Torvalds's avatar
      Revert "x86/smp: Put CPUs into INIT on shutdown if possible" · fbe1bf1e
      Linus Torvalds authored
      This reverts commit 45e34c8a, and the
      two subsequent fixes to it:
      
        3f874c9b ("x86/smp: Don't send INIT to non-present and non-booted CPUs")
        b1472a60 ("x86/smp: Don't send INIT to boot CPU")
      
      because it seems to result in hung machines at shutdown.  Particularly
      some Dell machines, but Thomas says
      
       "The rest seems to be Lenovo and Sony with Alderlake/Raptorlake CPUs -
        at least that's what I could figure out from the various bug reports.
      
        I don't know which CPUs the DELL machines have, so I can't say it's a
        pattern.
      
        I agree with the revert for now"
      
      Ashok Raj chimes in:
      
       "There was a report (probably this same one), and it turns out it was a
        bug in the BIOS SMI handler.
      
        The client BIOS's were waiting for the lowest APICID to be the SMI
        rendevous master. If this is MeteorLake, the BSP wasn't the one with
        the lowest APIC and it triped here.
      
        The BIOS change is also being pushed to others for assimilation :)
      
        Server BIOS's had this correctly for a while now"
      
      and it does look likely to be some bad interaction between SMI and the
      non-BSP cores having put into INIT (and thus unresponsive until reset).
      
      Link: https://bbs.archlinux.org/viewtopic.php?pid=2124429
      Link: https://www.reddit.com/r/openSUSE/comments/16qq99b/tumbleweed_shutdown_did_not_finish_completely/
      Link: https://forum.artixlinux.org/index.php/topic,5997.0.html
      Link: https://bugzilla.redhat.com/show_bug.cgi?id=2241279Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Ashok Raj <ashok.raj@intel.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      fbe1bf1e
    • Xuan Zhuo's avatar
      virtio_net: fix the missing of the dma cpu sync · 5720c43d
      Xuan Zhuo authored
      Commit 295525e2 ("virtio_net: merge dma operations when filling
      mergeable buffers") unmaps the buffer with DMA_ATTR_SKIP_CPU_SYNC when
      the dma->ref is zero. We do that with DMA_ATTR_SKIP_CPU_SYNC, because we
      do not want to do the sync for the entire page_frag. But that misses the
      sync for the current area.
      
      This patch does cpu sync regardless of whether the ref is zero or not.
      
      Fixes: 295525e2 ("virtio_net: merge dma operations when filling mergeable buffers")
      Reported-by: default avatarMichael Roth <michael.roth@amd.com>
      Closes: http://lore.kernel.org/all/20230926130451.axgodaa6tvwqs3ut@amd.comSigned-off-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
      Acked-by: default avatarJason Wang <jasowang@redhat.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5720c43d
    • Linus Torvalds's avatar
      Merge tag 'usb-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb · 11d3f726
      Linus Torvalds authored
      Pull USB / Thunderbolt fixes from Greg KH:
       "Here are some USB and Thunderbolt driver fixes for 6.6-rc6 to resolve
        a number of small reported issues. Included in here are:
      
         - thunderbolt driver fixes
      
         - xhci driver fixes
      
         - cdns3 driver fixes
      
         - musb driver fixes
      
         - a number of typec driver fixes
      
         - a few other small driver fixes
      
        All of these have been in linux-next with no reported issues"
      
      * tag 'usb-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (22 commits)
        usb: typec: ucsi: Use GET_CAPABILITY attributes data to set power supply scope
        usb: typec: ucsi: Fix missing link removal
        usb: typec: altmodes/displayport: Signal hpd low when exiting mode
        xhci: Preserve RsvdP bits in ERSTBA register correctly
        xhci: Clear EHB bit only at end of interrupt handler
        xhci: track port suspend state correctly in unsuccessful resume cases
        usb: xhci: xhci-ring: Use sysdev for mapping bounce buffer
        usb: typec: ucsi: Clear EVENT_PENDING bit if ucsi_send_command fails
        usb: misc: onboard_hub: add support for Microchip USB2412 USB 2.0 hub
        usb: gadget: udc-xilinx: replace memcpy with memcpy_toio
        usb: cdns3: Modify the return value of cdns_set_active () to void when CONFIG_PM_SLEEP is disabled
        usb: dwc3: Soft reset phy on probe for host
        usb: hub: Guard against accesses to uninitialized BOS descriptors
        usb: typec: qcom: Update the logic of regulator enable and disable
        usb: gadget: ncm: Handle decoding of multiple NTB's in unwrap call
        usb: musb: Get the musb_qh poniter after musb_giveback
        usb: musb: Modify the "HWVers" register address
        usb: cdnsp: Fixes issue with dequeuing not queued requests
        thunderbolt: Restart XDomain discovery handshake after failure
        thunderbolt: Correct TMU mode initialization from hardware
        ...
      11d3f726
    • Linus Torvalds's avatar
      Merge tag 'tty-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty · 41226a36
      Linus Torvalds authored
      Pull tty/serial driver fixes from Greg KH:
       "Here are some small tty/serial driver fixes for 6.6-rc6 that resolve
        some reported issues. Included in here are:
      
         - serial core pm runtime fix for issue reported by many
      
         - 8250_omap driver fix
      
         - rs485 spinlock fix for reported problem
      
         - ams-delta bugfix for previous tty api changes in -rc1 that missed
           this driver that never seems to get built in any test systems
      
        All of these have been in linux-next for over a week with no reported
        problems"
      
      * tag 'tty-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
        ASoC: ti: ams-delta: Fix cx81801_receive() argument types
        serial: core: Fix checks for tx runtime PM state
        serial: 8250_omap: Fix errors with no_console_suspend
        serial: Reduce spinlocked portion of uart_rs485_config()
      41226a36
    • Linus Torvalds's avatar
      Merge tag 'char-misc-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc · a477e3a7
      Linus Torvalds authored
      Pull char/misc driver fixes from Greg KH:
       "Here is a small set of char/misc and other smaller driver subsystem
        fixes for 6.6-rc6. Included in here are:
      
         - lots of iio driver fixes
      
         - binder memory leak fix
      
         - mcb driver fixes
      
         - counter driver fixes
      
         - firmware loader documentation fix
      
         - documentation update for embargoed hardware issues
      
        All of these have been in linux-next for over a week with no reported
        issues"
      
      * tag 'char-misc-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (22 commits)
        iio: pressure: ms5611: ms5611_prom_is_valid false negative bug
        dt-bindings: iio: adc: adi,ad7292: Fix additionalProperties on channel nodes
        iio: adc: ad7192: Correct reference voltage
        iio: light: vcnl4000: Don't power on/off chip in config
        iio: addac: Kconfig: update ad74413r selections
        iio: pressure: dps310: Adjust Timeout Settings
        iio: imu: bno055: Fix missing Kconfig dependencies
        iio: adc: imx8qxp: Fix address for command buffer registers
        iio: cros_ec: fix an use-after-free in cros_ec_sensors_push_data()
        iio: irsd200: fix -Warray-bounds bug in irsd200_trigger_handler
        dt-bindings: iio: rohm,bu27010: add missing vdd-supply to example
        binder: fix memory leaks of spam and pending work
        firmware_loader: Update contact emails for ABI docs
        Documentation: embargoed-hardware-issues.rst: Clarify prenotifaction
        mcb: remove is_added flag from mcb_device struct
        coresight: tmc-etr: Disable warnings for allocation failures
        coresight: Fix run time warnings while reusing ETR buffer
        iio: admv1013: add mixer_vgate corner cases
        iio: pressure: bmp280: Fix NULL pointer exception
        iio: dac: ad3552r: Correct device IDs
        ...
      a477e3a7
    • Linus Torvalds's avatar
      Merge tag 'ovl-fixes-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/overlayfs/vfs · 19fd4a91
      Linus Torvalds authored
      Pull overlayfs fixes from Amir Goldstein:
      
       - Various fixes for regressions due to conversion to new mount
         api in v6.5
      
       - Disable a new mount option syntax (append lowerdir) that was
         added in v6.5 because we plan to add a different lowerdir
         append syntax in v6.7
      
      * tag 'ovl-fixes-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/overlayfs/vfs:
        ovl: temporarily disable appending lowedirs
        ovl: fix regression in showing lowerdir mount option
        ovl: fix regression in parsing of mount options with escaped comma
        fs: factor out vfs_parse_monolithic_sep() helper
      19fd4a91
    • Linus Torvalds's avatar
      Merge tag 'powerpc-6.6-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux · f8bf101b
      Linus Torvalds authored
      Pull powerpc fixes from Michael Ellerman:
      
       - Fix softlockup/crash when using hcall tracing
      
       - Fix pte_access_permitted() for PAGE_NONE on 8xx
      
       - Fix inverted pte_young() test in __ptep_test_and_clear_young()
         on 64-bit BookE
      
       - Fix unhandled math emulation exception on 85xx
      
       - Fix kernel crash on syscall return on 476
      
      Thanks to Athira Rajeev, Christophe Leroy, Eddie James, and Naveen N
      Rao.
      
      * tag 'powerpc-6.6-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
        powerpc/47x: Fix 47x syscall return crash
        powerpc/85xx: Fix math emulation exception
        powerpc/64e: Fix wrong test in __ptep_test_and_clear_young()
        powerpc/8xx: Fix pte_access_permitted() for PAGE_NONE
        powerpc/pseries: Remove unused r0 in the hcall tracing code
        powerpc/pseries: Fix STK_PARAM access in the hcall tracing code
      f8bf101b
    • Linus Torvalds's avatar
      Merge tag 'smp-urgent-2023-10-15' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · ddf20855
      Linus Torvalds authored
      Pull CPU hotplug fix from Ingo Molnar:
       "Fix a Longsoon build warning by harmonizing the
        arch_[un]register_cpu() prototypes between architectures"
      
      * tag 'smp-urgent-2023-10-15' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        cpu-hotplug: Provide prototypes for arch CPU registration
      ddf20855
    • Linus Torvalds's avatar
      Merge tag '6.6-rc5-ksmbd-server-fixes' of git://git.samba.org/ksmbd · 9a3dad63
      Linus Torvalds authored
      Pull smb server fixes from Steve French:
      
       - Fix for possible double free in RPC read
      
       - Add additional check to clarify smb2_open path and quiet Coverity
      
       - Fix incorrect error rsp in a compounding path
      
       - Fix to properly fail open of file with pending delete on close
      
      * tag '6.6-rc5-ksmbd-server-fixes' of git://git.samba.org/ksmbd:
        ksmbd: fix potential double free on smb2_read_pipe() error path
        ksmbd: fix Null pointer dereferences in ksmbd_update_fstate()
        ksmbd: fix wrong error response status by using set_smb2_rsp_status()
        ksmbd: not allow to open file if delelete on close bit is set
      9a3dad63
    • Linus Torvalds's avatar
      Merge tag '6.6-rc5-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6 · bf2069d1
      Linus Torvalds authored
      Pull smb client fixes from Steve French:
      
       - fix caching race with open_cached_dir and laundromat cleanup of
         cached dirs (addresses a problem spotted with xfstest run with
         directory leases enabled)
      
       - reduce excessive resource usage of laundromat threads
      
      * tag '6.6-rc5-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6:
        smb: client: prevent new fids from being removed by laundromat
        smb: client: make laundromat a delayed worker
      bf2069d1
  3. 14 Oct, 2023 2 commits