1. 21 11月, 2019 1 次提交
  2. 16 9月, 2019 1 次提交
  3. 02 9月, 2019 5 次提交
  4. 22 8月, 2019 3 次提交
    • Y
      afs: use correct afs_call_type in yfs_fs_store_opaque_acl2 · 7533be85
      YueHaibing 提交于
      It seems that 'yfs_RXYFSStoreOpaqueACL2' should be use in
      yfs_fs_store_opaque_acl2().
      
      Fixes: f5e45463 ("afs: Implement YFS ACL setting")
      Signed-off-by: NYueHaibing <yuehaibing@huawei.com>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      7533be85
    • M
      afs: Fix possible oops in afs_lookup trace event · c4c613ff
      Marc Dionne 提交于
      The afs_lookup trace event can cause the following:
      
      [  216.576777] BUG: kernel NULL pointer dereference, address: 000000000000023b
      [  216.576803] #PF: supervisor read access in kernel mode
      [  216.576813] #PF: error_code(0x0000) - not-present page
      ...
      [  216.576913] RIP: 0010:trace_event_raw_event_afs_lookup+0x9e/0x1c0 [kafs]
      
      If the inode from afs_do_lookup() is an error other than ENOENT, or if it
      is ENOENT and afs_try_auto_mntpt() returns an error, the trace event will
      try to dereference the error pointer as a valid pointer.
      
      Use IS_ERR_OR_NULL to only pass a valid pointer for the trace, or NULL.
      
      Ideally the trace would include the error value, but for now just avoid
      the oops.
      
      Fixes: 80548b03 ("afs: Add more tracepoints")
      Signed-off-by: NMarc Dionne <marc.dionne@auristor.com>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      c4c613ff
    • D
      afs: Fix leak in afs_lookup_cell_rcu() · a5fb8e6c
      David Howells 提交于
      Fix a leak on the cell refcount in afs_lookup_cell_rcu() due to
      non-clearance of the default error in the case a NULL cell name is passed
      and the workstation default cell is used.
      
      Also put a bit at the end to make sure we don't leak a cell ref if we're
      going to be returning an error.
      
      This leak results in an assertion like the following when the kafs module is
      unloaded:
      
      	AFS: Assertion failed
      	2 == 1 is false
      	0x2 == 0x1 is false
      	------------[ cut here ]------------
      	kernel BUG at fs/afs/cell.c:770!
      	...
      	RIP: 0010:afs_manage_cells+0x220/0x42f [kafs]
      	...
      	 process_one_work+0x4c2/0x82c
      	 ? pool_mayday_timeout+0x1e1/0x1e1
      	 ? do_raw_spin_lock+0x134/0x175
      	 worker_thread+0x336/0x4a6
      	 ? rescuer_thread+0x4af/0x4af
      	 kthread+0x1de/0x1ee
      	 ? kthread_park+0xd4/0xd4
      	 ret_from_fork+0x24/0x30
      
      Fixes: 989782dc ("afs: Overhaul cell database management")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      a5fb8e6c
  5. 30 7月, 2019 6 次提交
    • D
      afs: Fix missing dentry data version updating · 9dd0b82e
      David Howells 提交于
      In the in-kernel afs filesystem, the d_fsdata dentry field is used to hold
      the data version of the parent directory when it was created or when
      d_revalidate() last caused it to be updated.  This is compared to the
      ->invalid_before field in the directory inode, rather than the actual data
      version number, thereby allowing changes due to local edits to be ignored.
      Only if the server data version gets bumped unexpectedly (eg. by a
      competing client), do we need to revalidate stuff.
      
      However, the d_fsdata field should also be updated if an rpc op is
      performed that modifies that particular dentry.  Such ops return the
      revised data version of the directory(ies) involved, so we should use that.
      
      This is particularly problematic for rename, since a dentry from one
      directory may be moved directly into another directory (ie. mv a/x b/x).
      It would then be sporting the wrong data version - and if this is in the
      future, for the destination directory, revalidations would be missed,
      leading to foreign renames and hard-link deletion being missed.
      
      Fix this by the following means:
      
       (1) Return the data version number from operations that read the directory
           contents - if they issue the read.  This starts in afs_dir_iterate()
           and is used, ignored or passed back by its callers.
      
       (2) In afs_lookup*(), set the dentry version to the version returned by
           (1) before d_splice_alias() is called and the dentry published.
      
       (3) In afs_d_revalidate(), set the dentry version to that returned from
           (1) if an rpc call was issued.  This means that if a parallel
           procedure, such as mkdir(), modifies the directory, we won't
           accidentally use the data version from that.
      
       (4) In afs_{mkdir,create,link,symlink}(), set the new dentry's version to
           the directory data version before d_instantiate() is called.
      
       (5) In afs_{rmdir,unlink}, update the target dentry's version to the
           directory data version as soon as we've updated the directory inode.
      
       (6) In afs_rename(), we need to unhash the old dentry before we start so
           that we don't get afs_d_revalidate() reverting the version change in
           cross-directory renames.
      
           We then need to set both the old and the new dentry versions the data
           version of the new directory before we call d_move() as d_move() will
           rehash them.
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      9dd0b82e
    • D
      afs: Only update d_fsdata if different in afs_d_revalidate() · 5dc84855
      David Howells 提交于
      In the in-kernel afs filesystem, d_fsdata is set with the data version of
      the parent directory.  afs_d_revalidate() will update this to the current
      directory version, but it shouldn't do this if it the value it read from
      d_fsdata is the same as no lock is held and cmpxchg() is not used.
      
      Fix the code to only change the value if it is different from the current
      directory version.
      
      Fixes: 260a9803 ("[AFS]: Add "directory write" support.")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      5dc84855
    • D
      afs: Fix off-by-one in afs_rename() expected data version calculation · 37c0bbb3
      David Howells 提交于
      When afs_rename() calculates the expected data version of the target
      directory in a cross-directory rename, it doesn't increment it as it
      should, so it always thinks that the target inode is unexpectedly modified
      on the server.
      
      Fixes: a58823ac ("afs: Fix application of status and callback to be under same lock")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      37c0bbb3
    • J
      fs: afs: Fix a possible null-pointer dereference in afs_put_read() · a6eed4ab
      Jia-Ju Bai 提交于
      In afs_read_dir(), there is an if statement on line 255 to check whether
      req->pages is NULL:
      	if (!req->pages)
      		goto error;
      
      If req->pages is NULL, afs_put_read() on line 337 is executed.
      In afs_put_read(), req->pages[i] is used on line 195.
      Thus, a possible null-pointer dereference may occur in this case.
      
      To fix this possible bug, an if statement is added in afs_put_read() to
      check req->pages.
      
      This bug is found by a static analysis tool STCheck written by us.
      
      Fixes: f3ddee8d ("afs: Fix directory handling")
      Signed-off-by: NJia-Ju Bai <baijiaju1990@gmail.com>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      a6eed4ab
    • M
      afs: Fix loop index mixup in afs_deliver_vl_get_entry_by_name_u() · 4a46fdba
      Marc Dionne 提交于
      afs_deliver_vl_get_entry_by_name_u() scans through the vl entry
      received from the volume location server and builds a return list
      containing the sites that are currently valid.  When assigning
      values for the return list, the index into the vl entry (i) is used
      rather than the one for the new list (entry->nr_server).  If all
      sites are usable, this works out fine as the indices will match.
      If some sites are not valid, for example if AFS_VLSF_DONTUSE is
      set, fs_mask and the uuid will be set for the wrong return site.
      
      Fix this by using entry->nr_server as the index into the arrays
      being filled in rather than i.
      
      This can lead to EDESTADDRREQ errors if none of the returned sites
      have a valid fs_mask.
      
      Fixes: d2ddc776 ("afs: Overhaul volume and server record caching and fileserver rotation")
      Signed-off-by: NMarc Dionne <marc.dionne@auristor.com>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Reviewed-by: NJeffrey Altman <jaltman@auristor.com>
      4a46fdba
    • D
      afs: Fix the CB.ProbeUuid service handler to reply correctly · 2067b2b3
      David Howells 提交于
      Fix the service handler function for the CB.ProbeUuid RPC call so that it
      replies in the correct manner - that is an empty reply for success and an
      abort of 1 for failure.
      
      Putting 0 or 1 in an integer in the body of the reply should result in the
      fileserver throwing an RX_PROTOCOL_ERROR abort and discarding its record of
      the client; older servers, however, don't necessarily check that all the
      data got consumed, and so might incorrectly think that they got a positive
      response and associate the client with the wrong host record.
      
      If the client is incorrectly associated, this will result in callbacks
      intended for a different client being delivered to this one and then, when
      the other client connects and responds positively, all of the callback
      promises meant for the client that issued the improper response will be
      lost and it won't receive any further change notifications.
      
      Fixes: 9396d496 ("afs: support the CB.ProbeUuid RPC op")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Reviewed-by: NJeffrey Altman <jaltman@auristor.com>
      2067b2b3
  6. 26 7月, 2019 2 次提交
    • G
      afs: fsclient: Mark expected switch fall-throughs · 29881608
      Gustavo A. R. Silva 提交于
      In preparation to enabling -Wimplicit-fallthrough, mark switch
      cases where we are expecting to fall through.
      
      This patch fixes the following warnings:
      
      Warning level 3 was used: -Wimplicit-fallthrough=3
      
      fs/afs/fsclient.c: In function ‘afs_deliver_fs_fetch_acl’:
      fs/afs/fsclient.c:2199:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/fsclient.c:2202:2: note: here
        case 1:
        ^~~~
      fs/afs/fsclient.c:2216:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/fsclient.c:2219:2: note: here
        case 2:
        ^~~~
      fs/afs/fsclient.c:2225:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/fsclient.c:2228:2: note: here
        case 3:
        ^~~~
      
      This patch is part of the ongoing efforts to enable
      -Wimplicit-fallthrough.
      Signed-off-by: NGustavo A. R. Silva <gustavo@embeddedor.com>
      29881608
    • G
      afs: yfsclient: Mark expected switch fall-throughs · 35a3a90c
      Gustavo A. R. Silva 提交于
      In preparation to enabling -Wimplicit-fallthrough, mark switch
      cases where we are expecting to fall through.
      
      This patch fixes the following warnings:
      
      fs/afs/yfsclient.c: In function ‘yfs_deliver_fs_fetch_opaque_acl’:
      fs/afs/yfsclient.c:1984:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/yfsclient.c:1987:2: note: here
        case 1:
        ^~~~
      fs/afs/yfsclient.c:2005:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/yfsclient.c:2008:2: note: here
        case 2:
        ^~~~
      fs/afs/yfsclient.c:2014:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/yfsclient.c:2017:2: note: here
        case 3:
        ^~~~
      fs/afs/yfsclient.c:2035:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/yfsclient.c:2038:2: note: here
        case 4:
        ^~~~
      fs/afs/yfsclient.c:2047:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
         call->unmarshall++;
         ~~~~~~~~~~~~~~~~^~
      fs/afs/yfsclient.c:2050:2: note: here
        case 5:
        ^~~~
      
      Warning level 3 was used: -Wimplicit-fallthrough=3
      
      Also, fix some commenting style issues.
      
      This patch is part of the ongoing efforts to enable
      -Wimplicit-fallthrough.
      Signed-off-by: NGustavo A. R. Silva <gustavo@embeddedor.com>
      35a3a90c
  7. 11 7月, 2019 1 次提交
  8. 29 6月, 2019 1 次提交
  9. 28 6月, 2019 2 次提交
    • D
      keys: Replace uid/gid/perm permissions checking with an ACL · 2e12256b
      David Howells 提交于
      Replace the uid/gid/perm permissions checking on a key with an ACL to allow
      the SETATTR and SEARCH permissions to be split.  This will also allow a
      greater range of subjects to represented.
      
      ============
      WHY DO THIS?
      ============
      
      The problem is that SETATTR and SEARCH cover a slew of actions, not all of
      which should be grouped together.
      
      For SETATTR, this includes actions that are about controlling access to a
      key:
      
       (1) Changing a key's ownership.
      
       (2) Changing a key's security information.
      
       (3) Setting a keyring's restriction.
      
      And actions that are about managing a key's lifetime:
      
       (4) Setting an expiry time.
      
       (5) Revoking a key.
      
      and (proposed) managing a key as part of a cache:
      
       (6) Invalidating a key.
      
      Managing a key's lifetime doesn't really have anything to do with
      controlling access to that key.
      
      Expiry time is awkward since it's more about the lifetime of the content
      and so, in some ways goes better with WRITE permission.  It can, however,
      be set unconditionally by a process with an appropriate authorisation token
      for instantiating a key, and can also be set by the key type driver when a
      key is instantiated, so lumping it with the access-controlling actions is
      probably okay.
      
      As for SEARCH permission, that currently covers:
      
       (1) Finding keys in a keyring tree during a search.
      
       (2) Permitting keyrings to be joined.
      
       (3) Invalidation.
      
      But these don't really belong together either, since these actions really
      need to be controlled separately.
      
      Finally, there are number of special cases to do with granting the
      administrator special rights to invalidate or clear keys that I would like
      to handle with the ACL rather than key flags and special checks.
      
      
      ===============
      WHAT IS CHANGED
      ===============
      
      The SETATTR permission is split to create two new permissions:
      
       (1) SET_SECURITY - which allows the key's owner, group and ACL to be
           changed and a restriction to be placed on a keyring.
      
       (2) REVOKE - which allows a key to be revoked.
      
      The SEARCH permission is split to create:
      
       (1) SEARCH - which allows a keyring to be search and a key to be found.
      
       (2) JOIN - which allows a keyring to be joined as a session keyring.
      
       (3) INVAL - which allows a key to be invalidated.
      
      The WRITE permission is also split to create:
      
       (1) WRITE - which allows a key's content to be altered and links to be
           added, removed and replaced in a keyring.
      
       (2) CLEAR - which allows a keyring to be cleared completely.  This is
           split out to make it possible to give just this to an administrator.
      
       (3) REVOKE - see above.
      
      
      Keys acquire ACLs which consist of a series of ACEs, and all that apply are
      unioned together.  An ACE specifies a subject, such as:
      
       (*) Possessor - permitted to anyone who 'possesses' a key
       (*) Owner - permitted to the key owner
       (*) Group - permitted to the key group
       (*) Everyone - permitted to everyone
      
      Note that 'Other' has been replaced with 'Everyone' on the assumption that
      you wouldn't grant a permit to 'Other' that you wouldn't also grant to
      everyone else.
      
      Further subjects may be made available by later patches.
      
      The ACE also specifies a permissions mask.  The set of permissions is now:
      
      	VIEW		Can view the key metadata
      	READ		Can read the key content
      	WRITE		Can update/modify the key content
      	SEARCH		Can find the key by searching/requesting
      	LINK		Can make a link to the key
      	SET_SECURITY	Can change owner, ACL, expiry
      	INVAL		Can invalidate
      	REVOKE		Can revoke
      	JOIN		Can join this keyring
      	CLEAR		Can clear this keyring
      
      
      The KEYCTL_SETPERM function is then deprecated.
      
      The KEYCTL_SET_TIMEOUT function then is permitted if SET_SECURITY is set,
      or if the caller has a valid instantiation auth token.
      
      The KEYCTL_INVALIDATE function then requires INVAL.
      
      The KEYCTL_REVOKE function then requires REVOKE.
      
      The KEYCTL_JOIN_SESSION_KEYRING function then requires JOIN to join an
      existing keyring.
      
      The JOIN permission is enabled by default for session keyrings and manually
      created keyrings only.
      
      
      ======================
      BACKWARD COMPATIBILITY
      ======================
      
      To maintain backward compatibility, KEYCTL_SETPERM will translate the
      permissions mask it is given into a new ACL for a key - unless
      KEYCTL_SET_ACL has been called on that key, in which case an error will be
      returned.
      
      It will convert possessor, owner, group and other permissions into separate
      ACEs, if each portion of the mask is non-zero.
      
      SETATTR permission turns on all of INVAL, REVOKE and SET_SECURITY.  WRITE
      permission turns on WRITE, REVOKE and, if a keyring, CLEAR.  JOIN is turned
      on if a keyring is being altered.
      
      The KEYCTL_DESCRIBE function translates the ACL back into a permissions
      mask to return depending on possessor, owner, group and everyone ACEs.
      
      It will make the following mappings:
      
       (1) INVAL, JOIN -> SEARCH
      
       (2) SET_SECURITY -> SETATTR
      
       (3) REVOKE -> WRITE if SETATTR isn't already set
      
       (4) CLEAR -> WRITE
      
      Note that the value subsequently returned by KEYCTL_DESCRIBE may not match
      the value set with KEYCTL_SETATTR.
      
      
      =======
      TESTING
      =======
      
      This passes the keyutils testsuite for all but a couple of tests:
      
       (1) tests/keyctl/dh_compute/badargs: The first wrong-key-type test now
           returns EOPNOTSUPP rather than ENOKEY as READ permission isn't removed
           if the type doesn't have ->read().  You still can't actually read the
           key.
      
       (2) tests/keyctl/permitting/valid: The view-other-permissions test doesn't
           work as Other has been replaced with Everyone in the ACL.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      2e12256b
    • D
      keys: Pass the network namespace into request_key mechanism · a58946c1
      David Howells 提交于
      Create a request_key_net() function and use it to pass the network
      namespace domain tag into DNS revolver keys and rxrpc/AFS keys so that keys
      for different domains can coexist in the same keyring.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      cc: netdev@vger.kernel.org
      cc: linux-nfs@vger.kernel.org
      cc: linux-cifs@vger.kernel.org
      cc: linux-afs@lists.infradead.org
      a58946c1
  10. 21 6月, 2019 5 次提交
  11. 20 6月, 2019 4 次提交
    • D
      afs: Fix uninitialised spinlock afs_volume::cb_break_lock · 90fa9b64
      David Howells 提交于
      Fix the cb_break_lock spinlock in afs_volume struct by initialising it when
      the volume record is allocated.
      
      Also rename the lock to cb_v_break_lock to distinguish it from the lock of
      the same name in the afs_server struct.
      
      Without this, the following trace may be observed when a volume-break
      callback is received:
      
        INFO: trying to register non-static key.
        the code is fine but needs lockdep annotation.
        turning off the locking correctness validator.
        CPU: 2 PID: 50 Comm: kworker/2:1 Not tainted 5.2.0-rc1-fscache+ #3045
        Hardware name: ASUS All Series/H97-PLUS, BIOS 2306 10/09/2014
        Workqueue: afs SRXAFSCB_CallBack
        Call Trace:
         dump_stack+0x67/0x8e
         register_lock_class+0x23b/0x421
         ? check_usage_forwards+0x13c/0x13c
         __lock_acquire+0x89/0xf73
         lock_acquire+0x13b/0x166
         ? afs_break_callbacks+0x1b2/0x3dd
         _raw_write_lock+0x2c/0x36
         ? afs_break_callbacks+0x1b2/0x3dd
         afs_break_callbacks+0x1b2/0x3dd
         ? trace_event_raw_event_afs_server+0x61/0xac
         SRXAFSCB_CallBack+0x11f/0x16c
         process_one_work+0x2c5/0x4ee
         ? worker_thread+0x234/0x2ac
         worker_thread+0x1d8/0x2ac
         ? cancel_delayed_work_sync+0xf/0xf
         kthread+0x11f/0x127
         ? kthread_park+0x76/0x76
         ret_from_fork+0x24/0x30
      
      Fixes: 68251f0a ("afs: Fix whole-volume callback handling")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      90fa9b64
    • D
      afs: Fix vlserver record corruption · a6853b9c
      David Howells 提交于
      Because I made the afs_call struct share pointers to an afs_server object
      and an afs_vlserver object to save space, afs_put_call() calls
      afs_put_server() on afs_vlserver object (which is only meant for the
      afs_server object) because it sees that call->server isn't NULL.
      
      This means that the afs_vlserver object gets unpredictably and randomly
      modified, depending on what config options are set (such as lockdep).
      
      Fix this by getting rid of the union and having two non-overlapping
      pointers in the afs_call struct.
      
      Fixes: ffba718e ("afs: Get rid of afs_call::reply[]")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      a6853b9c
    • D
      afs: Fix over zealous "vnode modified" warnings · 3647e42b
      David Howells 提交于
      Occasionally, warnings like this:
      
      	vnode modified 2af7 on {10000b:1} [exp 2af2] YFS.FetchStatus(vnode)
      
      are emitted into the kernel log.  This indicates that when we were applying
      the updated vnode (file) status retrieved from the server to an inode we
      saw that the data version number wasn't what we were expecting (in this
      case it's 0x2af7 rather than 0x2af2).
      
      We've usually received a callback from the server prior to this point - or
      the callback promise has lapsed - so the warning is merely informative and
      the state is to be expected.
      
      Fix this by only emitting the warning if the we still think that we have a
      valid callback promise and haven't received a callback.
      
      Also change the format slightly so so that the new data version doesn't
      look like part of the text, the like is prefixed with "kAFS: " and the
      message is ranked as a warning.
      
      Fixes: 31143d5d ("AFS: implement basic file write support")
      Reported-by: NIan Wienand <iwienand@redhat.com>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      3647e42b
    • A
      fsnotify: move fsnotify_nameremove() hook out of d_delete() · 49246466
      Amir Goldstein 提交于
      d_delete() was piggy backed for the fsnotify_nameremove() hook when
      in fact not all callers of d_delete() care about fsnotify events.
      
      For all callers of d_delete() that may be interested in fsnotify events,
      we made sure to call one of fsnotify_{unlink,rmdir}() hooks before
      calling d_delete().
      
      Now we can move the fsnotify_nameremove() call from d_delete() to the
      fsnotify_{unlink,rmdir}() hooks.
      
      Two explicit calls to fsnotify_nameremove() from nfs/afs sillyrename
      are also removed. This will cause a change of behavior - nfs/afs will
      NOT generate an fsnotify delete event when renaming over a positive
      dentry.  This change is desirable, because it is consistent with the
      behavior of all other filesystems.
      Signed-off-by: NAmir Goldstein <amir73il@gmail.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      49246466
  12. 03 6月, 2019 1 次提交
    • F
      afs: do not send list of client addresses · 35ebfc22
      Florian Westphal 提交于
      David Howells says:
        I'm told that there's not really any point populating the list.
        Current OpenAFS ignores it, as does AuriStor - and IBM AFS 3.6 will
        do the right thing.
        The list is actually useless as it's the client's view of the world,
        not the servers, so if there's any NAT in the way its contents are
        invalid.  Further, it doesn't support IPv6 addresses.
      
        On that basis, feel free to make it an empty list and remove all the
        interface enumeration.
      
      V1 of this patch reworked the function to use a new helper for the
      ifa_list iteration to avoid sparse warnings once the proper __rcu
      annotations get added in struct in_device later.
      
      But, in light of the above, just remove afs_get_ipv4_interfaces.
      
      Compile tested only.
      
      Cc: David Howells <dhowells@redhat.com>
      Cc: linux-afs@lists.infradead.org
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Tested-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      35ebfc22
  13. 31 5月, 2019 1 次提交
  14. 24 5月, 2019 1 次提交
  15. 21 5月, 2019 1 次提交
  16. 17 5月, 2019 5 次提交