23 Mar, 2020

1 commit

  • For the case where we have a DFS path like below and we're currently
    connected to targetA:

    //dfsroot/link -> //targetA/share/foo, //targetB/share/bar

    after failover, we should make sure to update cifs_sb->prepath so the
    next operations will use the new prefix path "/bar".

    Besides, in order to simplify the use of different prefix paths,
    enforce CIFS_MOUNT_USE_PREFIX_PATH for DFS mounts so we don't have to
    revalidate the root dentry every time we set a new prefix path.

    Signed-off-by: Paulo Alcantara (SUSE)
    Acked-by: Ronnie Sahlberg
    Reviewed-by: Aurelien Aptel
    Signed-off-by: Steve French

    Paulo Alcantara (SUSE)
     

04 Feb, 2020

1 commit

  • The most notable change is DEFINE_SHOW_ATTRIBUTE macro split in
    seq_file.h.

    Conversion rule is:

    llseek => proc_lseek
    unlocked_ioctl => proc_ioctl

    xxx => proc_xxx

    delete ".owner = THIS_MODULE" line

    [akpm@linux-foundation.org: fix drivers/isdn/capi/kcapi_proc.c]
    [sfr@canb.auug.org.au: fix kernel/sched/psi.c]
    Link: http://lkml.kernel.org/r/20200122180545.36222f50@canb.auug.org.au
    Link: http://lkml.kernel.org/r/20191225172546.GB13378@avx2
    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

08 May, 2019

1 commit

  • As per MS-DFSC, when a DFS cache entry is expired and it is a DFS
    link, then a new DFS referral must be sent to root server in order to
    refresh the expired entry.

    This patch ensures that all new DFS referrals for refreshing the cache
    are sent to DFS root.

    Signed-off-by: Paulo Alcantara (SUSE)
    Signed-off-by: Steve French

    Paulo Alcantara (SUSE)
     

29 Dec, 2018

1 commit

  • * Add new dfs_cache.[ch] files

    * Add new /proc/fs/cifs/dfscache file
    - dump current cache when read
    - clear current cache when writing "0" to it

    * Add delayed_work to periodically refresh cache entries

    The new interface will be used for caching DFS referrals, as well as
    supporting client target failover.

    The DFS cache is a hashtable that maps UNC paths to cache entries.

    A cache entry contains:
    - the UNC path it is mapped on
    - how much the the UNC path the entry consumes
    - flags
    - a Time-To-Live after which the entry expires
    - a list of possible targets (linked lists of UNC paths)
    - a "hint target" pointing the last known working target or the first
    target if none were tried. This hint lets cifs.ko remember and try
    working targets first.

    * Looking for an entry in the cache is done with dfs_cache_find()
    - if no valid entries are found, a DFS query is made, stored in the
    cache and returned
    - the full target list can be copied and returned to avoid race
    conditions and looped on with the help with the
    dfs_cache_tgt_iterator

    * Updating the target hint to the next target is done with
    dfs_cache_update_tgthint()

    These functions have a dfs_cache_noreq_XXX() version that doesn't
    fetches referrals if no entries are found. These versions don't
    require the tcp/ses/tcon/cifs_sb parameters as a result.

    Expired entries cannot be used and since they have a pretty short TTL
    [1] in order for them to be useful for failover the DFS cache adds a
    delayed work called periodically to keep them fresh.

    Since we might not have available connections to issue the referral
    request when refreshing we need to store volume_info structs with
    credentials and other needed info to be able to connect to the right
    server.

    1: Windows defaults: 5mn for domain-based referrals, 30mn for regular
    links

    Signed-off-by: Paulo Alcantara
    Signed-off-by: Aurelien Aptel
    Signed-off-by: Steve French

    Paulo Alcantara