03 Apr, 2019

1 commit

  • commit 0cb98abb5bd13b9a636bde603d952d722688b428 upstream.

    Allow the async rpc task for finish and update the open state if needed,
    then free the slot. Otherwise, the async rpc unable to decode the reply.

    Signed-off-by: Olga Kornievskaia
    Fixes: ae55e59da0e4 ("pnfs: Don't release the sequence slot...")
    Cc: stable@vger.kernel.org # v4.18+
    Signed-off-by: Trond Myklebust
    Signed-off-by: Greg Kroah-Hartman

    Olga Kornievskaia
     

24 Mar, 2019

6 commits

  • commit c1dffe0bf7f9c3d57d9f237a7cb2a81e62babd2b upstream.

    If we have to retransmit a request, we should ensure that we reinitialise
    the sequence results structure, since in the event of a signal
    we need to treat the request as if it had not been sent.

    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     
  • commit 8127d82705998568b52ac724e28e00941538083d upstream.

    If the I/O completion failed with a fatal error, then we should just
    exit nfs_pageio_complete_mirror() rather than try to recoalesce.

    Fixes: a7d42ddb3099 ("nfs: add mirroring support to pgio layer")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.0+
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     
  • commit 4d91969ed4dbcefd0e78f77494f0cb8fada9048a upstream.

    Whether we need to exit early, or just reprocess the list, we
    must not lost track of the request which failed to get recoalesced.

    Fixes: 03d5eb65b538 ("NFS: Fix a memory leak in nfs_do_recoalesce")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.0+
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     
  • commit f57dcf4c72113c745d83f1c65f7291299f65c14f upstream.

    When we fail to add the request to the I/O queue, we currently leave it
    to the caller to free the failed request. However since some of the
    requests that fail are actually created by nfs_pageio_add_request()
    itself, and are not passed back the caller, this leads to a leakage
    issue, which can again cause page locks to leak.

    This commit addresses the leakage by freeing the created requests on
    error, using desc->pg_completion_ops->error_cleanup()

    Signed-off-by: Trond Myklebust
    Fixes: a7d42ddb30997 ("nfs: add mirroring support to pgio layer")
    Cc: stable@vger.kernel.org # v4.0: c18b96a1b862: nfs: clean up rest of reqs
    Cc: stable@vger.kernel.org # v4.0: d600ad1f2bdb: NFS41: pop some layoutget
    Cc: stable@vger.kernel.org # v4.0+
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     
  • [ Upstream commit 822ad64d7e46a8e2c8b8a796738d7b657cbb146d ]

    In the request_key() upcall mechanism there's a dependency loop by which if
    a key type driver overrides the ->request_key hook and the userspace side
    manages to lose the authorisation key, the auth key and the internal
    construction record (struct key_construction) can keep each other pinned.

    Fix this by the following changes:

    (1) Killing off the construction record and using the auth key instead.

    (2) Including the operation name in the auth key payload and making the
    payload available outside of security/keys/.

    (3) The ->request_key hook is given the authkey instead of the cons
    record and operation name.

    Changes (2) and (3) allow the auth key to naturally be cleaned up if the
    keyring it is in is destroyed or cleared or the auth key is unlinked.

    Fixes: 7ee02a316600 ("keys: Fix dependency loop between construction record and auth key")
    Signed-off-by: David Howells
    Signed-off-by: James Morris
    Signed-off-by: Sasha Levin

    David Howells
     
  • [ Upstream commit d2ceb7e57086750ea6198a31fd942d98099a0786 ]

    If nfs_page_async_flush() removes the page from the mapping, then we can't
    use page_file_mapping() on it as nfs_updatepate() is wont to do when
    receiving an error. Instead, push the mapping to the stack before the page
    is possibly truncated.

    Fixes: 8fc75bed96bb ("NFS: Fix up return value on fatal errors in nfs_page_async_flush()")
    Signed-off-by: Benjamin Coddington
    Signed-off-by: Anna Schumaker
    Signed-off-by: Sasha Levin

    Benjamin Coddington
     

14 Mar, 2019

1 commit

  • [ Upstream commit 80ff00172407e0aad4b10b94ef0816fc3e7813cb ]

    There is a NULL pointer dereference of dev_name in nfs_parse_devname()

    The oops looks something like:

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
    ...
    RIP: 0010:nfs_fs_mount+0x3b6/0xc20 [nfs]
    ...
    Call Trace:
    ? ida_alloc_range+0x34b/0x3d0
    ? nfs_clone_super+0x80/0x80 [nfs]
    ? nfs_free_parsed_mount_data+0x60/0x60 [nfs]
    mount_fs+0x52/0x170
    ? __init_waitqueue_head+0x3b/0x50
    vfs_kern_mount+0x6b/0x170
    do_mount+0x216/0xdc0
    ksys_mount+0x83/0xd0
    __x64_sys_mount+0x25/0x30
    do_syscall_64+0x65/0x220
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Fix this by adding a NULL check on dev_name

    Signed-off-by: Yao Liu
    Signed-off-by: Anna Schumaker
    Signed-off-by: Sasha Levin

    Yao Liu
     

13 Feb, 2019

1 commit

  • [ Upstream commit 594d1644cd59447f4fceb592448d5cd09eb09b5e ]

    This patch removes the check from nfs_compare_mount_options to see if a
    `sec' option was passed for the current mount before comparing auth
    flavors and instead just always compares auth flavors.

    Consider the following scenario:

    You have a server with the address 192.168.1.1 and two exports /export/a
    and /export/b. The first export supports `sys' and `krb5' security, the
    second just `sys'.

    Assume you start with no mounts from the server.

    The following results in EIOs being returned as the kernel nfs client
    incorrectly thinks it can share the underlying `struct nfs_server's:

    $ mkdir /tmp/{a,b}
    $ sudo mount -t nfs -o vers=3,sec=krb5 192.168.1.1:/export/a /tmp/a
    $ sudo mount -t nfs -o vers=3 192.168.1.1:/export/b /tmp/b
    $ df >/dev/null
    df: ‘/tmp/b’: Input/output error

    Signed-off-by: Chris Perl
    Signed-off-by: Anna Schumaker
    Signed-off-by: Sasha Levin

    Chris Perl
     

07 Feb, 2019

1 commit

  • commit 8fc75bed96bb94e23ca51bd9be4daf65c57697bf upstream.

    Ensure that we return the fatal error value that caused us to exit
    nfs_page_async_flush().

    Fixes: c373fff7bd25 ("NFSv4: Don't special case "launder"")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.12+
    Reviewed-by: Benjamin Coddington
    Signed-off-by: Anna Schumaker
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     

21 Dec, 2018

1 commit

  • [ Upstream commit ad3cba223ac02dc769c3bbe88efe277bbb457566 ]

    When we use direct_IO with an NFS backing store, we can trigger a
    WARNING in __set_page_dirty(), as below, since we're dirtying the page
    unnecessarily in nfs_direct_read_completion().

    To fix, replicate the logic in commit 53cbf3b157a0 ("fs: direct-io:
    don't dirtying pages for ITER_BVEC/ITER_KVEC direct read").

    Other filesystems that implement direct_IO handle this; most use
    blockdev_direct_IO(). ceph and cifs have similar logic.

    mount 127.0.0.1:/export /nfs
    dd if=/dev/zero of=/nfs/image bs=1M count=200
    losetup --direct-io=on -f /nfs/image
    mkfs.btrfs /dev/loop0
    mount -t btrfs /dev/loop0 /mnt/

    kernel: WARNING: CPU: 0 PID: 8067 at fs/buffer.c:580 __set_page_dirty+0xaf/0xd0
    kernel: Modules linked in: loop(E) nfsv3(E) rpcsec_gss_krb5(E) nfsv4(E) dns_resolver(E) nfs(E) fscache(E) nfsd(E) auth_rpcgss(E) nfs_acl(E) lockd(E) grace(E) fuse(E) tun(E) ip6t_rpfilter(E) ipt_REJECT(E) nf_
    kernel: snd_seq(E) snd_seq_device(E) snd_pcm(E) video(E) snd_timer(E) snd(E) soundcore(E) ip_tables(E) xfs(E) libcrc32c(E) sd_mod(E) sr_mod(E) cdrom(E) ata_generic(E) pata_acpi(E) crc32c_intel(E) ahci(E) li
    kernel: CPU: 0 PID: 8067 Comm: kworker/0:2 Tainted: G E 4.20.0-rc1.master.20181111.ol7.x86_64 #1
    kernel: Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    kernel: Workqueue: nfsiod rpc_async_release [sunrpc]
    kernel: RIP: 0010:__set_page_dirty+0xaf/0xd0
    kernel: Code: c3 48 8b 02 f6 c4 04 74 d4 48 89 df e8 ba 05 f7 ff 48 89 c6 eb cb 48 8b 43 08 a8 01 75 1f 48 89 d8 48 8b 00 a8 04 74 02 eb 87 0b eb 83 48 83 e8 01 eb 9f 48 83 ea 01 0f 1f 00 eb 8b 48 83 e8
    kernel: RSP: 0000:ffffc1c8825b7d78 EFLAGS: 00013046
    kernel: RAX: 000fffffc0020089 RBX: fffff2b603308b80 RCX: 0000000000000001
    kernel: RDX: 0000000000000001 RSI: ffff9d11478115c8 RDI: ffff9d11478115d0
    kernel: RBP: ffffc1c8825b7da0 R08: 0000646f6973666e R09: 8080808080808080
    kernel: R10: 0000000000000001 R11: 0000000000000000 R12: ffff9d11478115d0
    kernel: R13: ffff9d11478115c8 R14: 0000000000003246 R15: 0000000000000001
    kernel: FS: 0000000000000000(0000) GS:ffff9d115ba00000(0000) knlGS:0000000000000000
    kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    kernel: CR2: 00007f408686f640 CR3: 0000000104d8e004 CR4: 00000000000606f0
    kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    kernel: DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    kernel: Call Trace:
    kernel: __set_page_dirty_buffers+0xb6/0x110
    kernel: set_page_dirty+0x52/0xb0
    kernel: nfs_direct_read_completion+0xc4/0x120 [nfs]
    kernel: nfs_pgio_release+0x10/0x20 [nfs]
    kernel: rpc_free_task+0x30/0x70 [sunrpc]
    kernel: rpc_async_release+0x12/0x20 [sunrpc]
    kernel: process_one_work+0x174/0x390
    kernel: worker_thread+0x4f/0x3e0
    kernel: kthread+0x102/0x140
    kernel: ? drain_workqueue+0x130/0x130
    kernel: ? kthread_stop+0x110/0x110
    kernel: ret_from_fork+0x35/0x40
    kernel: ---[ end trace 01341980905412c9 ]---

    Signed-off-by: Dave Kleikamp
    Signed-off-by: Santosh Shilimkar

    [forward-ported to v4.20]
    Signed-off-by: Calum Mackay
    Reviewed-by: Dave Kleikamp
    Reviewed-by: Chuck Lever
    Signed-off-by: Trond Myklebust
    Signed-off-by: Sasha Levin

    Dave Kleikamp
     

17 Dec, 2018

1 commit


13 Dec, 2018

3 commits

  • [ Upstream commit bb21ce0ad227b69ec0f83279297ee44232105d96 ]

    rfc8435 says:

    For tight coupling, ffds_stateid provides the stateid to be used by
    the client to access the file.

    However current implementation replaces per-mirror provided stateid with
    by open or lock stateid.

    Ensure that per-mirror stateid is used by ff_layout_write_prepare_v4 and
    nfs4_ff_layout_prepare_ds.

    Signed-off-by: Tigran Mkrtchyan
    Signed-off-by: Rick Macklem
    Signed-off-by: Trond Myklebust
    Signed-off-by: Sasha Levin

    Tigran Mkrtchyan
     
  • [ Upstream commit 99f2c55591fb5c1b536263970d98c2ebc2089906 ]

    Bruce pointed out that we shouldn't allocate memory while holding
    a lock in the nfs4_callback_offload() and handle_async_copy()
    that deal with a racing CB_OFFLOAD and reply to COPY case.

    Signed-off-by: Olga Kornievskaia
    Signed-off-by: Trond Myklebust
    Signed-off-by: Sasha Levin

    Olga Kornievskaia
     
  • [ Upstream commit aeabb3c96186a0f944fc2b1f25c84d5eb3a93fa9 ]

    Fix a deadlock whereby the NFSv4 state manager can get stuck in the
    delegation return code, waiting for a layout return to complete in
    another thread. If the server reboots before that other thread
    completes, then we need to be able to start a second state
    manager thread in order to perform recovery.

    Signed-off-by: Trond Myklebust
    Signed-off-by: Sasha Levin

    Trond Myklebust
     

01 Dec, 2018

1 commit

  • [ Upstream commit e39d8a186ed002854196668cb7562ffdfbc6d379 ]

    If the server sends a CB_GETATTR or a CB_RECALL while the filesystem is
    being unmounted, then we can Oops when releasing the inode in
    nfs4_callback_getattr() and nfs4_callback_recall().

    Signed-off-by: Trond Myklebust
    Signed-off-by: Sasha Levin

    Trond Myklebust
     

21 Nov, 2018

1 commit

  • commit 21a446cf186570168b7281b154b1993968598aca upstream.

    If we exit the NFSv4 state manager due to a umount, then we can end up
    leaving the NFS4CLNT_MANAGER_RUNNING flag set. If another mount causes
    the nfs4_client to be rereferenced before it is destroyed, then we end
    up never being able to recover state.

    Fixes: 47c2199b6eb5 ("NFSv4.1: Ensure state manager thread dies on last ...")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.15+
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     

14 Nov, 2018

2 commits

  • commit fdbd1a2e4a71adcb1ae219fcfd964930d77a7f84 upstream.

    We must check pg_error and call error_cleanup after any call to pg_doio.
    Currently, we are skipping the unlock of a page if we encounter an error in
    nfs_pageio_complete() before handing off the work to the RPC layer.

    Signed-off-by: Benjamin Coddington
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust
    Signed-off-by: Greg Kroah-Hartman

    Benjamin Coddington
     
  • commit 943cff67b842839f4f35364ba2db5c2d3f025d94 upstream.

    The intention of nfs4_session_set_rwsize() was to cap the r/wsize to the
    buffer sizes negotiated by the CREATE_SESSION. The initial code had a
    bug whereby we would not check the values negotiated by nfs_probe_fsinfo()
    (the assumption being that CREATE_SESSION will always negotiate buffer values
    that are sane w.r.t. the server's preferred r/wsizes) but would only check
    values set by the user in the 'mount' command.

    The code was changed in 4.11 to _always_ set the r/wsize, meaning that we
    now never use the server preferred r/wsizes. This is the regression that
    this patch fixes.
    Also rename the function to nfs4_session_limit_rwsize() in order to avoid
    future confusion.

    Fixes: 033853325fe3 (NFSv4.1 respect server's max size in CREATE_SESSION")
    Cc: stable@vger.kernel.org # v4.11+
    Signed-off-by: Trond Myklebust
    Signed-off-by: Greg Kroah-Hartman

    Trond Myklebust
     

15 Sep, 2018

6 commits

  • Pull NFS client bugfixes from Anna Schumaker:
    "These are a handful of fixes for problems that Trond found. Patch #1
    and #3 have the same name, a second issue was found after applying the
    first patch.

    Stable bugfixes:
    - v4.17+: Fix tracepoint Oops in initiate_file_draining()
    - v4.11+: Fix an infinite loop on I/O

    Other fixes:
    - Return errors if a waiting layoutget is killed
    - Don't open code clearing of delegation state"

    * tag 'nfs-for-4.19-2' of git://git.linux-nfs.org/projects/anna/linux-nfs:
    NFS: Don't open code clearing of delegation state
    NFSv4.1 fix infinite loop on I/O.
    NFSv4: Fix a tracepoint Oops in initiate_file_draining()
    pNFS: Ensure we return the error if someone kills a waiting layoutget
    NFSv4: Fix a tracepoint Oops in initiate_file_draining()

    Linus Torvalds
     
  • Add a helper for the case when the nfs4 open state has been set to use
    a delegation stateid, and we want to revert to using the open stateid.

    Signed-off-by: Trond Myklebust
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     
  • The previous fix broke recovery of delegated stateids because it assumes
    that if we did not mark the delegation as suspect, then the delegation has
    effectively been revoked, and so it removes that delegation irrespectively
    of whether or not it is valid and still in use. While this is "mostly
    harmless" for ordinary I/O, we've seen pNFS fail with LAYOUTGET spinning
    in an infinite loop while complaining that we're using an invalid stateid
    (in this case the all-zero stateid).

    What we rather want to do here is ensure that the delegation is always
    correctly marked as needing testing when that is the case. So we want
    to close the loophole offered by nfs4_schedule_stateid_recovery(),
    which marks the state as needing to be reclaimed, but not the
    delegation that may be backing it.

    Fixes: 0e3d3e5df07dc ("NFSv4.1 fix infinite loop on IO BAD_STATEID error")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.11+
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     
  • Now that the value of 'ino' can be NULL or an ERR_PTR(), we need to
    change the test in the tracepoint.

    Fixes: ce5624f7e6675 ("NFSv4: Return NFS4ERR_DELAY when a layout fails...")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.17+
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     
  • If someone interrupts a wait on one or more outstanding layoutgets in
    pnfs_update_layout() then return the ERESTARTSYS/EINTR error.

    Signed-off-by: Trond Myklebust
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     
  • Now that the value of 'ino' can be NULL or an ERR_PTR(), we need to
    change the test in the tracepoint.

    Fixes: ce5624f7e6675 ("NFSv4: Return NFS4ERR_DELAY when a layout fails...")
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org # v4.17+
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     

24 Aug, 2018

1 commit

  • Pull NFS client updates from Anna Schumaker:
    "These patches include adding async support for the v4.2 COPY
    operation. I think Bruce is planning to send the server patches for
    the next release, but I figured we could get the client side out of
    the way now since it's been in my tree for a while. This shouldn't
    cause any problems, since the server will still respond with
    synchronous copies even if the client requests async.

    Features:
    - Add support for asynchronous server-side COPY operations

    Stable bufixes:
    - Fix an off-by-one in bl_map_stripe() (v3.17+)
    - NFSv4 client live hangs after live data migration recovery (v4.9+)
    - xprtrdma: Fix disconnect regression (v4.18+)
    - Fix locking in pnfs_generic_recover_commit_reqs (v4.14+)
    - Fix a sleep in atomic context in nfs4_callback_sequence() (v4.9+)

    Other bugfixes and cleanups:
    - Optimizations and fixes involving NFS v4.1 / pNFS layout handling
    - Optimize lseek(fd, SEEK_CUR, 0) on directories to avoid locking
    - Immediately reschedule writeback when the server replies with an
    error
    - Fix excessive attribute revalidation in nfs_execute_ok()
    - Add error checking to nfs_idmap_prepare_message()
    - Use new vm_fault_t return type
    - Return a delegation when reclaiming one that the server has
    recalled
    - Referrals should inherit proto setting from parents
    - Make rpc_auth_create_args a const
    - Improvements to rpc_iostats tracking
    - Fix a potential reference leak when there is an error processing a
    callback
    - Fix rmdir / mkdir / rename nlink accounting
    - Fix updating inode change attribute
    - Fix error handling in nfsn4_sp4_select_mode()
    - Use an appropriate work queue for direct-write completion
    - Don't busy wait if NFSv4 session draining is interrupted"

    * tag 'nfs-for-4.19-1' of git://git.linux-nfs.org/projects/anna/linux-nfs: (54 commits)
    pNFS: Remove unwanted optimisation of layoutget
    pNFS/flexfiles: ff_layout_pg_init_read should exit on error
    pNFS: Treat RECALLCONFLICT like DELAY...
    pNFS: When updating the stateid in layoutreturn, also update the recall range
    NFSv4: Fix a sleep in atomic context in nfs4_callback_sequence()
    NFSv4: Fix locking in pnfs_generic_recover_commit_reqs
    NFSv4: Fix a typo in nfs4_init_channel_attrs()
    NFSv4: Don't busy wait if NFSv4 session draining is interrupted
    NFS recover from destination server reboot for copies
    NFS add a simple sync nfs4_proc_commit after async COPY
    NFS handle COPY ERR_OFFLOAD_NO_REQS
    NFS send OFFLOAD_CANCEL when COPY killed
    NFS export nfs4_async_handle_error
    NFS handle COPY reply CB_OFFLOAD call race
    NFS add support for asynchronous COPY
    NFS COPY xdr handle async reply
    NFS OFFLOAD_CANCEL xdr
    NFS CB_OFFLOAD xdr
    NFS: Use an appropriate work queue for direct-write completion
    NFSv4: Fix error handling in nfs4_sp4_select_mode()
    ...

    Linus Torvalds
     

22 Aug, 2018

2 commits


17 Aug, 2018

2 commits


16 Aug, 2018

1 commit


15 Aug, 2018

1 commit

  • The use of the inode->i_lock was converted to a mutex, but we forgot
    to remove the old inode unlock/lock() pair that allowed the layout
    segment to be put inside the loop.

    Reported-by: Jia-Ju Bai
    Fixes: e824f99adaaf1 ("NFSv4: Use a mutex to protect the per-inode commit...")
    Cc: stable@vger.kernel.org # v4.14+
    Signed-off-by: Trond Myklebust
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     

14 Aug, 2018

5 commits

  • Pull vfs icache updates from Al Viro:

    - NFS mkdir/open_by_handle race fix

    - analogous solution for FUSE, replacing the one currently in mainline

    - new primitive to be used when discarding halfway set up inodes on
    failed object creation; gives sane warranties re icache lookups not
    returning such doomed by still not freed inodes. A bunch of
    filesystems switched to that animal.

    - Miklos' fix for last cycle regression in iget5_locked(); -stable will
    need a slightly different variant, unfortunately.

    - misc bits and pieces around things icache-related (in adfs and jfs).

    * 'work.mkdir' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    jfs: don't bother with make_bad_inode() in ialloc()
    adfs: don't put inodes into icache
    new helper: inode_fake_hash()
    vfs: don't evict uninitialized inode
    jfs: switch to discard_new_inode()
    ext2: make sure that partially set up inodes won't be returned by ext2_iget()
    udf: switch to discard_new_inode()
    ufs: switch to discard_new_inode()
    btrfs: switch to discard_new_inode()
    new primitive: discard_new_inode()
    kill d_instantiate_no_diralias()
    nfs_instantiate(): prevent multiple aliases for directory inode

    Linus Torvalds
     
  • Pull vfs open-related updates from Al Viro:

    - "do we need fput() or put_filp()" rules are gone - it's always fput()
    now. We keep track of that state where it belongs - in ->f_mode.

    - int *opened mess killed - in finish_open(), in ->atomic_open()
    instances and in fs/namei.c code around do_last()/lookup_open()/atomic_open().

    - alloc_file() wrappers with saner calling conventions are introduced
    (alloc_file_clone() and alloc_file_pseudo()); callers converted, with
    much simplification.

    - while we are at it, saner calling conventions for path_init() and
    link_path_walk(), simplifying things inside fs/namei.c (both on
    open-related paths and elsewhere).

    * 'work.open3' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (40 commits)
    few more cleanups of link_path_walk() callers
    allow link_path_walk() to take ERR_PTR()
    make path_init() unconditionally paired with terminate_walk()
    document alloc_file() changes
    make alloc_file() static
    do_shmat(): grab shp->shm_file earlier, switch to alloc_file_clone()
    new helper: alloc_file_clone()
    create_pipe_files(): switch the first allocation to alloc_file_pseudo()
    anon_inode_getfile(): switch to alloc_file_pseudo()
    hugetlb_file_setup(): switch to alloc_file_pseudo()
    ocxlflash_getfile(): switch to alloc_file_pseudo()
    cxl_getfile(): switch to alloc_file_pseudo()
    ... and switch shmem_file_setup() to alloc_file_pseudo()
    __shmem_file_setup(): reorder allocations
    new wrapper: alloc_file_pseudo()
    kill FILE_{CREATED,OPENED}
    switch atomic_open() and lookup_open() to returning 0 in all success cases
    document ->atomic_open() changes
    ->atomic_open(): return 0 in all success cases
    get rid of 'opened' in path_openat() and the helpers downstream
    ...

    Linus Torvalds
     
  • The back channel size is allowed to be 1 or greater.

    Signed-off-by: Trond Myklebust
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     
  • Catch the ERESTARTSYS error so that it can be processed by the callers.

    Signed-off-by: Trond Myklebust
    Signed-off-by: Anna Schumaker

    Trond Myklebust
     
  • Mark the destination state to indicate a server-side copy is
    happening. On detecting a reboot and recovering open state check
    if any state is engaged in a server-side copy, if so, find the
    copy and mark it and then signal the waiting thread. Upon wakeup,
    if copy was marked then propage EAGAIN to the nfsd_copy_file_range
    and restart the copy from scratch.

    Signed-off-by: Olga Kornievskaia
    Signed-off-by: Anna Schumaker

    Olga Kornievskaia
     

10 Aug, 2018

3 commits