20 Dec, 2017

1 commit


02 Nov, 2017

1 commit

  • commit 6c2838fbdedb9b72a81c931d49e56b229b6cdbca upstream.

    sparse warns:

    fs/ceph/caps.c:2042:9: warning: context imbalance in 'try_flush_caps' - wrong count at exit

    We need to exit this function with the lock unlocked, but a couple of
    cases leave it locked.

    Signed-off-by: Jeff Layton
    Reviewed-by: "Yan, Zheng"
    Reviewed-by: Ilya Dryomov
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     

21 Oct, 2017

3 commits

  • [ Upstream commit c6b0b656ca24ede6657abb4a2cd910fa9c1879ba ]

    While we hold a reference to the dentry when build_dentry_path is
    called, we could end up racing with a rename that changes d_parent.
    Handle that situation correctly, by using the rcu_read_lock to
    ensure that the parent dentry and inode stick around long enough
    to safely check ceph_snap and ceph_ino.

    Link: http://tracker.ceph.com/issues/18148
    Signed-off-by: Jeff Layton
    Reviewed-by: Yan, Zheng
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     
  • [ Upstream commit 24c149ad6914d349d8b64749f20f3f8ea5031fe0 ]

    sparse says:

    fs/ceph/ioctl.c:100:28: warning: cast to restricted __le64

    preferred_osd is a __s64 so we don't need to do any conversion. Also,
    just remove the cast in ceph_ioctl_get_layout as it's not needed.

    Signed-off-by: Jeff Layton
    Reviewed-by: Sage Weil
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     
  • [ Upstream commit 80d025ffede88969f6adf7266fbdedfd5641148a ]

    This if block updates the dentry lease even in the case where
    the MDS didn't grant one.

    Signed-off-by: Jeff Layton
    Reviewed-by: Yan, Zheng
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     

07 Sep, 2017

1 commit

  • commit dd2bc473482eedc60c29cf00ad12568ce40ce511 upstream.

    ceph_readpage() unlocks page prematurely prematurely in the case
    that page is reading from fscache. Caller of readpage expects that
    page is uptodate when it get unlocked. So page shoule get locked
    by completion callback of fscache_read_or_alloc_pages()

    Signed-off-by: "Yan, Zheng"
    Reviewed-by: Jeff Layton
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Yan, Zheng
     

28 Jul, 2017

1 commit

  • commit 84583cfb973c4313955c6231cc9cb3772d280b15 upstream.

    For a large directory, program needs to issue multiple readdir
    syscalls to get all dentries. When there are multiple programs
    read the directory concurrently. Following sequence of events
    can happen.

    - program calls readdir with pos = 2. ceph sends readdir request
    to mds. The reply contains N1 entries. ceph adds these N1 entries
    to readdir cache.
    - program calls readdir with pos = N1+2. The readdir is satisfied
    by the readdir cache, N2 entries are returned. (Other program
    calls readdir in the middle, which fills the cache)
    - program calls readdir with pos = N1+N2+2. ceph sends readdir
    request to mds. The reply contains N3 entries and it reaches
    directory end. ceph adds these N3 entries to the readdir cache
    and marks directory complete.

    The second readdir call does not update fi->readdir_cache_idx.
    ceph add the last N3 entries to wrong places.

    Signed-off-by: "Yan, Zheng"
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Yan, Zheng
     

12 Jul, 2017

1 commit

  • commit b50c2de51e611da90cf3cf04c058f7e9bbe79e93 upstream.

    The dirfragtree is lazily updated, it's not always accurate. Infinite
    loops happens in following circumstance.

    - client send request to read frag A
    - frag A has been fragmented into frag B and C. So mds fills the reply
    with contents of frag B
    - client wants to read next frag C. ceph_choose_frag(frag value of C)
    return frag A.

    The fix is using previous readdir reply to calculate next readdir frag
    when possible.

    Signed-off-by: "Yan, Zheng"
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Yan, Zheng
     

14 Jun, 2017

1 commit

  • commit 93407472a21b82f39c955ea7787e5bc7da100642 upstream.

    Replace all 1 << inode->i_blkbits and (1 << inode->i_blkbits) in fs
    branch.

    This patch also fixes multiple checkpatch warnings: WARNING: Prefer
    'unsigned int' to bare use of 'unsigned'

    Thanks to Andrew Morton for suggesting more appropriate function instead
    of macro.

    [geliangtang@gmail.com: truncate: use i_blocksize()]
    Link: http://lkml.kernel.org/r/9c8b2cd83c8f5653805d43debde9fa8817e02fc4.1484895804.git.geliangtang@gmail.com
    Link: http://lkml.kernel.org/r/1481319905-10126-1-git-send-email-fabf@skynet.be
    Signed-off-by: Fabian Frederick
    Signed-off-by: Geliang Tang
    Cc: Alexander Viro
    Cc: Ross Zwisler
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Fabian Frederick
     

20 May, 2017

1 commit

  • commit eeca958dce0a9231d1969f86196653eb50fcc9b3 upstream.

    The ceph_inode_xattr needs to be released when removing an xattr. Easily
    reproducible running the 'generic/020' test from xfstests or simply by
    doing:

    attr -s attr0 -V 0 /mnt/test && attr -r attr0 /mnt/test

    While there, also fix the error path.

    Here's the kmemleak splat:

    unreferenced object 0xffff88001f86fbc0 (size 64):
    comm "attr", pid 244, jiffies 4294904246 (age 98.464s)
    hex dump (first 32 bytes):
    40 fa 86 1f 00 88 ff ff 80 32 38 1f 00 88 ff ff @........28.....
    00 01 00 00 00 00 ad de 00 02 00 00 00 00 ad de ................
    backtrace:
    [] kmemleak_alloc+0x49/0xa0
    [] kmem_cache_alloc+0x9b/0xf0
    [] __ceph_setxattr+0x17e/0x820
    [] ceph_set_xattr_handler+0x37/0x40
    [] __vfs_removexattr+0x4b/0x60
    [] vfs_removexattr+0x77/0xd0
    [] removexattr+0x41/0x60
    [] path_removexattr+0x75/0xa0
    [] SyS_lremovexattr+0xb/0x10
    [] entry_SYSCALL_64_fastpath+0x13/0x94
    [] 0xffffffffffffffff

    Signed-off-by: Luis Henriques
    Reviewed-by: "Yan, Zheng"
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Luis Henriques
     

08 May, 2017

1 commit

  • commit 2b1ac852eb67a6e95595e576371d23519105559f upstream.

    For readahead/fadvise cases, caller of ceph_readpages does not
    hold buffer capability. Pages can be added to page cache while
    there is no buffer capability. This can cause data integrity
    issue.

    Signed-off-by: Yan, Zheng
    Signed-off-by: Greg Kroah-Hartman

    Yan, Zheng
     

03 May, 2017

1 commit

  • commit 8179a101eb5f4ef0ac9a915fcea9a9d3109efa90 upstream.

    ceph_set_acl() calls __ceph_setattr() if the setacl operation needs
    to modify inode's i_mode. __ceph_setattr() updates inode's i_mode,
    then calls posix_acl_chmod().

    The problem is that __ceph_setattr() calls posix_acl_chmod() before
    sending the setattr request. The get_acl() call in posix_acl_chmod()
    can trigger a getxattr request. The reply of the getxattr request
    can restore inode's i_mode to its old value. The set_acl() call in
    posix_acl_chmod() sees old value of inode's i_mode, so it calls
    __ceph_setattr() again.

    Link: http://tracker.ceph.com/issues/19688
    Reported-by: Jerry Lee
    Signed-off-by: "Yan, Zheng"
    Reviewed-by: Jeff Layton
    Tested-by: Luis Henriques
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Yan, Zheng
     

15 Mar, 2017

1 commit

  • commit df963ea8a082d31521a120e8e31a29ad8a1dc215 upstream.

    There's no reason a request should ever be on a s_unsafe list but not
    in the request tree.

    Link: http://tracker.ceph.com/issues/18474
    Signed-off-by: Jeff Layton
    Reviewed-by: Yan, Zheng
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     

12 Mar, 2017

1 commit


26 Jan, 2017

5 commits

  • commit fe2ed42517533068ac03eed5630fffafff27eacf upstream.

    sparse says:

    fs/ceph/inode.c:308:36: warning: incorrect type in argument 1 (different base types)
    fs/ceph/inode.c:308:36: expected unsigned int [unsigned] [usertype] a
    fs/ceph/inode.c:308:36: got restricted __le32 [usertype] frag
    fs/ceph/inode.c:308:46: warning: incorrect type in argument 2 (different base types)
    fs/ceph/inode.c:308:46: expected unsigned int [unsigned] [usertype] b
    fs/ceph/inode.c:308:46: got restricted __le32 [usertype] frag

    We need to convert these values to host-endian before calling the
    comparator.

    Fixes: a407846ef7c6 ("ceph: don't assume frag tree splits in mds reply are sorted")
    Signed-off-by: Jeff Layton
    Reviewed-by: Sage Weil
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     
  • commit 1097680d759918ce4a8705381c0ab2ed7bd60cf1 upstream.

    sparse says:

    fs/ceph/dir.c:1248:50: warning: incorrect type in assignment (different base types)
    fs/ceph/dir.c:1248:50: expected restricted __le32 [usertype] mask
    fs/ceph/dir.c:1248:50: got int [signed] [assigned] mask

    Fixes: 200fd27c8fa2 ("ceph: use lookup request to revalidate dentry")
    Signed-off-by: Jeff Layton
    Reviewed-by: Sage Weil
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     
  • commit 6e09d0fb64402cec579f029ca4c7f39f5c48fc60 upstream.

    Commit 5c341ee32881 ("ceph: fix scheduler warning due to nested
    blocking") causes infinite loop when process is interrupted. Fix it.

    Signed-off-by: Yan, Zheng
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Yan, Zheng
     
  • commit 5c341ee32881c554727ec14b71ec3e8832f01989 upstream.

    try_get_cap_refs can be used as a condition in a wait_event* calls.
    This is all fine until it has to call __ceph_do_pending_vmtruncate,
    which in turn acquires the i_truncate_mutex. This leads to a situation
    in which a task's state is !TASK_RUNNING and at the same time it's
    trying to acquire a sleeping primitive. In essence a nested sleeping
    primitives are being used. This causes the following warning:

    WARNING: CPU: 22 PID: 11064 at kernel/sched/core.c:7631 __might_sleep+0x9f/0xb0()
    do not call blocking ops when !TASK_RUNNING; state=1 set at [] prepare_to_wait_event+0x5d/0x110
    ipmi_msghandler tcp_scalable ib_qib dca ib_mad ib_core ib_addr ipv6
    CPU: 22 PID: 11064 Comm: fs_checker.pl Tainted: G O 4.4.20-clouder2 #6
    Hardware name: Supermicro X10DRi/X10DRi, BIOS 1.1a 10/16/2015
    0000000000000000 ffff8838b416fa88 ffffffff812f4409 ffff8838b416fad0
    ffffffff81a034f2 ffff8838b416fac0 ffffffff81052b46 ffffffff81a0432c
    0000000000000061 0000000000000000 0000000000000000 ffff88167bda54a0
    Call Trace:
    [] dump_stack+0x67/0x9e
    [] warn_slowpath_common+0x86/0xc0
    [] warn_slowpath_fmt+0x4c/0x50
    [] ? prepare_to_wait_event+0x5d/0x110
    [] ? prepare_to_wait_event+0x5d/0x110
    [] __might_sleep+0x9f/0xb0
    [] mutex_lock+0x20/0x40
    [] __ceph_do_pending_vmtruncate+0x44/0x1a0 [ceph]
    [] try_get_cap_refs+0xa2/0x320 [ceph]
    [] ceph_get_caps+0x255/0x2b0 [ceph]
    [] ? wait_woken+0xb0/0xb0
    [] ceph_write_iter+0x2b1/0xde0 [ceph]
    [] ? schedule_timeout+0x202/0x260
    [] ? kmem_cache_free+0x1ea/0x200
    [] ? iput+0x9e/0x230
    [] ? __might_sleep+0x52/0xb0
    [] ? __might_fault+0x37/0x40
    [] ? cp_new_stat+0x153/0x170
    [] __vfs_write+0xaa/0xe0
    [] vfs_write+0xa9/0x190
    [] ? set_close_on_exec+0x31/0x70
    [] SyS_write+0x46/0xa0

    This happens since wait_event_interruptible can interfere with the
    mutex locking code, since they both fiddle with the task state.

    Fix the issue by using the newly-added nested blocking infrastructure
    in 61ada528dea0 ("sched/wait: Provide infrastructure to deal with
    nested blocking")

    Link: https://lwn.net/Articles/628628/
    Signed-off-by: Nikolay Borisov
    Signed-off-by: Yan, Zheng
    Signed-off-by: Greg Kroah-Hartman

    Nikolay Borisov
     
  • commit 6df8c9d80a27cb587f61b4f06b57e248d8bc3f86 upstream.

    sparse says:

    fs/ceph/mds_client.c:291:23: warning: restricted __le32 degrades to integer
    fs/ceph/mds_client.c:293:28: warning: restricted __le32 degrades to integer
    fs/ceph/mds_client.c:294:28: warning: restricted __le32 degrades to integer
    fs/ceph/mds_client.c:296:28: warning: restricted __le32 degrades to integer

    The op value is __le32, so we need to convert it before comparing it.

    Signed-off-by: Jeff Layton
    Reviewed-by: Sage Weil
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Greg Kroah-Hartman

    Jeff Layton
     

08 Dec, 2016

1 commit

  • This function sets req->r_locked_dir which is supposed to indicate to
    ceph_fill_trace that the parent's i_rwsem is locked for write.
    Unfortunately, there is no guarantee that the dir will be locked when
    d_revalidate is called, so we really don't want ceph_fill_trace to do
    any dcache manipulation from this context. Clear req->r_locked_dir since
    it's clearly not safe to do that.

    What we really want to know with d_revalidate is whether the dentry
    still points to the same inode. ceph_fill_trace installs a pointer to
    the inode in req->r_target_inode, so we can just compare that to
    d_inode(dentry) to see if it's the same one after the lookup.

    Also, since we aren't generally interested in the parent here, we can
    switch to using a GETATTR to hint that to the MDS, which also means that
    we only need to reserve one cap.

    Finally, just remove the d_unhashed check. That's really outside the
    purview of a filesystem's d_revalidate. If the thing became unhashed
    while we're checking it, then that's up to the VFS to handle anyway.

    Fixes: 200fd27c8fa2 ("ceph: use lookup request to revalidate dentry")
    Link: http://tracker.ceph.com/issues/18041
    Reported-by: Donatas Abraitis
    Signed-off-by: Jeff Layton
    Reviewed-by: "Yan, Zheng"
    Signed-off-by: Ilya Dryomov

    Jeff Layton
     

11 Nov, 2016

1 commit

  • Splice read/write implementation changed recently. When using
    generic_file_splice_read(), iov_iter with type == ITER_PIPE is
    passed to filesystem's read_iter callback. But ceph_sync_read()
    can't serve ITER_PIPE iov_iter correctly (ITER_PIPE iov_iter
    expects pages from page cache).

    Fixing ceph_sync_read() requires a big patch. So use default
    splice read callback for now.

    Signed-off-by: Yan, Zheng
    Signed-off-by: Ilya Dryomov

    Yan, Zheng
     

18 Oct, 2016

3 commits

  • Fixes the following sparse warning:

    fs/ceph/xattr.c:19:28: warning:
    symbol 'ceph_other_xattr_handler' was not declared. Should it be static?

    Signed-off-by: Wei Yongjun
    Signed-off-by: Ilya Dryomov

    Wei Yongjun
     
  • fs/ceph/super.c: In function ‘ceph_real_mount’:
    fs/ceph/super.c:818: warning: ‘root’ may be used uninitialized in this function

    If s_root is already valid, dentry pointer root is never initialized,
    and returned by ceph_real_mount(). This will cause a crash later when
    the caller dereferences the pointer.

    Fixes: ce2728aaa82bbeba ("ceph: avoid accessing / when mounting a subpath")
    Signed-off-by: Geert Uytterhoeven
    Signed-off-by: Yan, Zheng

    Geert Uytterhoeven
     
  • following sequence of events tigger the race

    - client readdir frag 0* -> got item 'A'
    - MDS merges frag 0* and frag 1*
    - client send readdir request (frag 1*, offset 2, readdir_start 'A')
    - MDS reply items (that are after item 'A') in frag *

    Link: http://tracker.ceph.com/issues/17286
    Signed-off-by: Yan, Zheng

    Yan, Zheng
     

16 Oct, 2016

1 commit

  • In case __ceph_do_getattr returns an error and the retry_op in
    ceph_read_iter is not READ_INLINE, then it's possible to invoke
    __free_page on a page which is NULL, this naturally leads to a crash.
    This can happen when, for example, a process waiting on a MDS reply
    receives sigterm.

    Fix this by explicitly checking whether the page is set or not.

    Cc: stable@vger.kernel.org # 3.19+
    Signed-off-by: Nikolay Borisov
    Reviewed-by: Yan, Zheng
    Signed-off-by: Ilya Dryomov

    Nikolay Borisov
     

11 Oct, 2016

4 commits

  • Pull more vfs updates from Al Viro:
    ">rename2() work from Miklos + current_time() from Deepa"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    fs: Replace current_fs_time() with current_time()
    fs: Replace CURRENT_TIME_SEC with current_time() for inode timestamps
    fs: Replace CURRENT_TIME with current_time() for inode timestamps
    fs: proc: Delete inode time initializations in proc_alloc_inode()
    vfs: Add current_time() api
    vfs: add note about i_op->rename changes to porting
    fs: rename "rename2" i_op to "rename"
    vfs: remove unused i_op->rename
    fs: make remaining filesystems use .rename2
    libfs: support RENAME_NOREPLACE in simple_rename()
    fs: support RENAME_NOREPLACE for local filesystems
    ncpfs: fix unused variable warning

    Linus Torvalds
     
  • Al Viro
     
  • Pull vfs xattr updates from Al Viro:
    "xattr stuff from Andreas

    This completes the switch to xattr_handler ->get()/->set() from
    ->getxattr/->setxattr/->removexattr"

    * 'work.xattr' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    vfs: Remove {get,set,remove}xattr inode operations
    xattr: Stop calling {get,set,remove}xattr inode operations
    vfs: Check for the IOP_XATTR flag in listxattr
    xattr: Add __vfs_{get,set,remove}xattr helpers
    libfs: Use IOP_XATTR flag for empty directory handling
    vfs: Use IOP_XATTR flag for bad-inode handling
    vfs: Add IOP_XATTR inode operations flag
    vfs: Move xattr_resolve_name to the front of fs/xattr.c
    ecryptfs: Switch to generic xattr handlers
    sockfs: Get rid of getxattr iop
    sockfs: getxattr: Fail with -EOPNOTSUPP for invalid attribute names
    kernfs: Switch to generic xattr handlers
    hfs: Switch to generic xattr handlers
    jffs2: Remove jffs2_{get,set,remove}xattr macros
    xattr: Remove unnecessary NULL attribute name check

    Linus Torvalds
     
  • Pull Ceph updates from Ilya Dryomov:
    "The big ticket item here is support for rbd exclusive-lock feature,
    with maintenance operations offloaded to userspace (Douglas Fuller,
    Mike Christie and myself). Another block device bullet is a series
    fixing up layering error paths (myself).

    On the filesystem side, we've got patches that improve our handling of
    buffered vs dio write races (Neil Brown) and a few assorted fixes from
    Zheng. Also included a couple of random cleanups and a minor CRUSH
    update"

    * tag 'ceph-for-4.9-rc1' of git://github.com/ceph/ceph-client: (39 commits)
    crush: remove redundant local variable
    crush: don't normalize input of crush_ln iteratively
    libceph: ceph_build_auth() doesn't need ceph_auth_build_hello()
    libceph: use CEPH_AUTH_UNKNOWN in ceph_auth_build_hello()
    ceph: fix description for rsize and rasize mount options
    rbd: use kmalloc_array() in rbd_header_from_disk()
    ceph: use list_move instead of list_del/list_add
    ceph: handle CEPH_SESSION_REJECT message
    ceph: avoid accessing / when mounting a subpath
    ceph: fix mandatory flock check
    ceph: remove warning when ceph_releasepage() is called on dirty page
    ceph: ignore error from invalidate_inode_pages2_range() in direct write
    ceph: fix error handling of start_read()
    rbd: add rbd_obj_request_error() helper
    rbd: img_data requests don't own their page array
    rbd: don't call rbd_osd_req_format_read() for !img_data requests
    rbd: rework rbd_img_obj_exists_submit() error paths
    rbd: don't crash or leak on errors in rbd_img_obj_parent_read_full_callback()
    rbd: move bumping img_request refcount into rbd_obj_request_submit()
    rbd: mark the original request as done if stat request fails
    ...

    Linus Torvalds
     

08 Oct, 2016

2 commits


03 Oct, 2016

7 commits

  • Using list_move() instead of list_del() + list_add().

    Signed-off-by: Wei Yongjun
    Signed-off-by: Ilya Dryomov

    Wei Yongjun
     
  • Signed-off-by: Yan, Zheng

    Yan, Zheng
     
  • Accessing / causes failuire if the client has caps that restrict path

    Signed-off-by: Yan, Zheng

    Yan, Zheng
     
  • Signed-off-by: Yan, Zheng

    Yan, Zheng
     
  • If O_DIRECT writes are racing with buffered writes, then
    the call to invalidate_inode_pages2_range() can call ceph_releasepage()
    on dirty pages.

    Most filesystems hold inode_lock() across O_DIRECT writes so they do not
    suffer this race, but cephfs deliberately drops the lock, and opens a window
    for the race.

    This race can be triggered with the generic/036 test from the xfstests
    test suite. It doesn't happen every time, but it does happen often.

    As the possibilty is expected, remove the warning, and instead include
    the PageDirty() status in the debug message.

    Signed-off-by: NeilBrown
    Reviewed-by: Jeff Layton
    Reviewed-by: Yan, Zheng

    NeilBrown
     
  • This call can fail if there are dirty pages. The preceding call to
    filemap_write_and_wait_range() will normally remove dirty pages, but
    as inode_lock() is not held over calls to ceph_direct_read_write(), it
    could race with non-direct writes and pages could be dirtied
    immediately after filemap_write_and_wait_range() returns

    If there are dirty pages, they will be removed by the subsequent call
    to truncate_inode_pages_range(), so having them here is not a problem.

    If the 'ret' value is left holding an error, then in the async IO case
    (aio_req is not NULL) the loop that would normally call
    ceph_osdc_start_request() will see the error in 'ret' and abort all
    requests. This doesn't seem like correct behaviour.

    So use separate 'ret2' instead of overloading 'ret'.

    Signed-off-by: NeilBrown
    Reviewed-by: Jeff Layton
    Reviewed-by: Yan, Zheng

    NeilBrown
     
  • If start_page() fails to add a page to page cache or fails to send
    OSD request. It should cal put_page() (instead of free_page()) for
    relevant pages.

    Besides, start_page() need to cancel fscache readpage if it fails
    to send OSD request.

    Signed-off-by: Yan, Zheng
    Reported-by: Zhi Zhang

    Yan, Zheng
     

28 Sep, 2016

1 commit

  • current_fs_time() uses struct super_block* as an argument.
    As per Linus's suggestion, this is changed to take struct
    inode* as a parameter instead. This is because the function
    is primarily meant for vfs inode timestamps.
    Also the function was renamed as per Arnd's suggestion.

    Change all calls to current_fs_time() to use the new
    current_time() function instead. current_fs_time() will be
    deleted.

    Signed-off-by: Deepa Dinamani
    Signed-off-by: Al Viro

    Deepa Dinamani
     

27 Sep, 2016

1 commit