15 Aug, 2016

1 commit

  • The manpage for quotactl says that the Q_XGETQSTAT command is
    "useful in finding out how much space is spent to store quota
    information," but the current implementation does not report this
    info if the inode is allocated, but its quota type is not enabled.

    This is a change from the earlier XFS implementation, which
    reported information about allocated quota inodes even if their
    quota type was not currently active.

    Change quota_getstate() and quota_getstatev() to copy out the inode
    information if the filesystem has provided it, even if the quota
    type for that inode is not currently active.

    Signed-off-by: Eric Sandeen
    Reviewed-by: Bill O'Donnell
    Signed-off-by: Jan Kara

    Eric Sandeen
     

30 Jul, 2016

1 commit

  • Pull userns vfs updates from Eric Biederman:
    "This tree contains some very long awaited work on generalizing the
    user namespace support for mounting filesystems to include filesystems
    with a backing store. The real world target is fuse but the goal is
    to update the vfs to allow any filesystem to be supported. This
    patchset is based on a lot of code review and testing to approach that
    goal.

    While looking at what is needed to support the fuse filesystem it
    became clear that there were things like xattrs for security modules
    that needed special treatment. That the resolution of those concerns
    would not be fuse specific. That sorting out these general issues
    made most sense at the generic level, where the right people could be
    drawn into the conversation, and the issues could be solved for
    everyone.

    At a high level what this patchset does a couple of simple things:

    - Add a user namespace owner (s_user_ns) to struct super_block.

    - Teach the vfs to handle filesystem uids and gids not mapping into
    to kuids and kgids and being reported as INVALID_UID and
    INVALID_GID in vfs data structures.

    By assigning a user namespace owner filesystems that are mounted with
    only user namespace privilege can be detected. This allows security
    modules and the like to know which mounts may not be trusted. This
    also allows the set of uids and gids that are communicated to the
    filesystem to be capped at the set of kuids and kgids that are in the
    owning user namespace of the filesystem.

    One of the crazier corner casees this handles is the case of inodes
    whose i_uid or i_gid are not mapped into the vfs. Most of the code
    simply doesn't care but it is easy to confuse the inode writeback path
    so no operation that could cause an inode write-back is permitted for
    such inodes (aka only reads are allowed).

    This set of changes starts out by cleaning up the code paths involved
    in user namespace permirted mounts. Then when things are clean enough
    adds code that cleanly sets s_user_ns. Then additional restrictions
    are added that are possible now that the filesystem superblock
    contains owner information.

    These changes should not affect anyone in practice, but there are some
    parts of these restrictions that are changes in behavior.

    - Andy's restriction on suid executables that does not honor the
    suid bit when the path is from another mount namespace (think
    /proc/[pid]/fd/) or when the filesystem was mounted by a less
    privileged user.

    - The replacement of the user namespace implicit setting of MNT_NODEV
    with implicitly setting SB_I_NODEV on the filesystem superblock
    instead.

    Using SB_I_NODEV is a stronger form that happens to make this state
    user invisible. The user visibility can be managed but it caused
    problems when it was introduced from applications reasonably
    expecting mount flags to be what they were set to.

    There is a little bit of work remaining before it is safe to support
    mounting filesystems with backing store in user namespaces, beyond
    what is in this set of changes.

    - Verifying the mounter has permission to read/write the block device
    during mount.

    - Teaching the integrity modules IMA and EVM to handle filesystems
    mounted with only user namespace root and to reduce trust in their
    security xattrs accordingly.

    - Capturing the mounters credentials and using that for permission
    checks in d_automount and the like. (Given that overlayfs already
    does this, and we need the work in d_automount it make sense to
    generalize this case).

    Furthermore there are a few changes that are on the wishlist:

    - Get all filesystems supporting posix acls using the generic posix
    acls so that posix_acl_fix_xattr_from_user and
    posix_acl_fix_xattr_to_user may be removed. [Maintainability]

    - Reducing the permission checks in places such as remount to allow
    the superblock owner to perform them.

    - Allowing the superblock owner to chown files with unmapped uids and
    gids to something that is mapped so the files may be treated
    normally.

    I am not considering even obvious relaxations of permission checks
    until it is clear there are no more corner cases that need to be
    locked down and handled generically.

    Many thanks to Seth Forshee who kept this code alive, and putting up
    with me rewriting substantial portions of what he did to handle more
    corner cases, and for his diligent testing and reviewing of my
    changes"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (30 commits)
    fs: Call d_automount with the filesystems creds
    fs: Update i_[ug]id_(read|write) to translate relative to s_user_ns
    evm: Translate user/group ids relative to s_user_ns when computing HMAC
    dquot: For now explicitly don't support filesystems outside of init_user_ns
    quota: Handle quota data stored in s_user_ns in quota_setxquota
    quota: Ensure qids map to the filesystem
    vfs: Don't create inodes with a uid or gid unknown to the vfs
    vfs: Don't modify inodes with a uid or gid unknown to the vfs
    cred: Reject inodes with invalid ids in set_create_file_as()
    fs: Check for invalid i_uid in may_follow_link()
    vfs: Verify acls are valid within superblock's s_user_ns.
    userns: Handle -1 in k[ug]id_has_mapping when !CONFIG_USER_NS
    fs: Refuse uid/gid changes which don't map into s_user_ns
    selinux: Add support for unprivileged mounts from user namespaces
    Smack: Handle labels consistently in untrusted mounts
    Smack: Add support for unprivileged mounts from user namespaces
    fs: Treat foreign mounts as nosuid
    fs: Limit file caps to the user namespace of the super block
    userns: Remove the now unnecessary FS_USERNS_DEV_MOUNT flag
    userns: Remove implicit MNT_NODEV fragility.
    ...

    Linus Torvalds
     

06 Jul, 2016

3 commits

  • Mostly supporting filesystems outside of init_user_ns is
    s/&init_usre_ns/dquot->dq_sb->s_user_ns/. An actual need for
    supporting quotas on filesystems outside of s_user_ns is quite a ways
    away and to be done responsibily needs an audit on what can happen
    with hostile quota files. Until that audit is complete don't attempt
    to support quota files on filesystems outside of s_user_ns.

    Cc: Jan Kara
    Acked-by: Seth Forshee
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • In Q_XSETQLIMIT use sb->s_user_ns to detect when we are dealing with
    the filesystems notion of id 0.

    Cc: Jan Kara
    Acked-by: Seth Forshee
    Inspired-by: Seth Forshee
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • Introduce the helper qid_has_mapping and use it to ensure that the
    quota system only considers qids that map to the filesystems
    s_user_ns.

    In practice for quota supporting filesystems today this is the exact
    same check as qid_valid. As only 0xffffffff aka (qid_t)-1 does not
    map into init_user_ns.

    Replace the qid_valid calls with qid_has_mapping as values come in
    from userspace. This is harmless today and it prepares the quota
    system to work on filesystems with quotas but mounted by unprivileged
    users.

    Call qid_has_mapping from dqget. This ensures the passed in qid has a
    prepresentation on the underlying filesystem. Previously this was
    unnecessary as filesystesm never had qids that could not map. With
    the introduction of filesystems outside of s_user_ns this will not
    remain true.

    All of this ensures the quota code never has to deal with qids that
    don't map to the underlying filesystem.

    Cc: Jan Kara
    Acked-by: Seth Forshee
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

20 Jun, 2016

1 commit

  • The quota subsystem has two formats, the old v1 format using architecture
    specific time_t values on the on-disk format, while the v2 format
    (introduced in Linux 2.5.16 and 2.4.22) uses fixed 64-bit little-endian.

    While there is no future for the v1 format beyond y2038, the v2 format
    is almost there on 32-bit architectures, as both the user interface
    and the on-disk format use 64-bit timestamps, just not the time_t
    inbetween.

    This changes the internal representation to use time64_t, which will
    end up doing the right thing everywhere for v2 format.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Jan Kara

    Arnd Bergmann
     

27 Apr, 2016

1 commit


29 Mar, 2016

1 commit


22 Mar, 2016

2 commits

  • Pull UDF and quota updates from Jan Kara:
    "This contains a rewrite of UDF handling of filename encoding to fix
    remaining overflow issues from Andrew Gabbasov and quota changes to
    support new Q_[X]GETNEXTQUOTA quotactl for VFS quota formats"

    * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
    quota: Fix possible GPF due to uninitialised pointers
    ext4: Make Q_GETNEXTQUOTA work for quota in hidden inodes
    quota: Forbid Q_GETQUOTA and Q_GETNEXTQUOTA for frozen filesystem
    quota: Fix possible races during quota loading
    ocfs2: Implement get_next_id()
    quota_v2: Implement get_next_id() for V2 quota format
    quota: Add support for ->get_nextdqblk() for VFS quota
    udf: Merge linux specific translation into CS0 conversion function
    udf: Remove struct ustr as non-needed intermediate storage
    udf: Use separate buffer for copying split names
    udf: Adjust UDF_NAME_LEN to better reflect actual restrictions
    udf: Join functions for UTF8 and NLS conversions
    udf: Parameterize output length in udf_put_filename
    quota: Allow Q_GETQUOTA for frozen filesystem
    quota: Fixup comments about return value of Q_[X]GETNEXTQUOTA

    Linus Torvalds
     
  • Pull xfs updates from Dave Chinner:
    "There's quite a lot in this request, and there's some cross-over with
    ext4, dax and quota code due to the nature of the changes being made.

    As for the rest of the XFS changes, there are lots of little things
    all over the place, which add up to a lot of changes in the end.

    The major changes are that we've reduced the size of the struct
    xfs_inode by ~100 bytes (gives an inode cache footprint reduction of
    >10%), the writepage code now only does a single set of mapping tree
    lockups so uses less CPU, delayed allocation reservations won't
    overrun under random write loads anymore, and we added compile time
    verification for on-disk structure sizes so we find out when a commit
    or platform/compiler change breaks the on disk structure as early as
    possible.

    Change summary:

    - error propagation for direct IO failures fixes for both XFS and
    ext4
    - new quota interfaces and XFS implementation for iterating all the
    quota IDs in the filesystem
    - locking fixes for real-time device extent allocation
    - reduction of duplicate information in the xfs and vfs inode, saving
    roughly 100 bytes of memory per cached inode.
    - buffer flag cleanup
    - rework of the writepage code to use the generic write clustering
    mechanisms
    - several fixes for inode flag based DAX enablement
    - rework of remount option parsing
    - compile time verification of on-disk format structure sizes
    - delayed allocation reservation overrun fixes
    - lots of little error handling fixes
    - small memory leak fixes
    - enable xfsaild freezing again"

    * tag 'xfs-for-linus-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs: (66 commits)
    xfs: always set rvalp in xfs_dir2_node_trim_free
    xfs: ensure committed is initialized in xfs_trans_roll
    xfs: borrow indirect blocks from freed extent when available
    xfs: refactor delalloc indlen reservation split into helper
    xfs: update freeblocks counter after extent deletion
    xfs: debug mode forced buffered write failure
    xfs: remove impossible condition
    xfs: check sizes of XFS on-disk structures at compile time
    xfs: ioends require logically contiguous file offsets
    xfs: use named array initializers for log item dumping
    xfs: fix computation of inode btree maxlevels
    xfs: reinitialise per-AG structures if geometry changes during recovery
    xfs: remove xfs_trans_get_block_res
    xfs: fix up inode32/64 (re)mount handling
    xfs: fix format specifier , should be %llx and not %llu
    xfs: sanitize remount options
    xfs: convert mount option parsing to tokens
    xfs: fix two memory leaks in xfs_attr_list.c error paths
    xfs: XFS_DIFLAG2_DAX limited by PAGE_SIZE
    xfs: dynamically switch modes when XFS_DIFLAG2_DAX is set/cleared
    ...

    Linus Torvalds
     

14 Mar, 2016

1 commit


03 Mar, 2016

1 commit

  • When dqget() in __dquot_initialize() fails e.g. due to IO error,
    __dquot_initialize() will pass an array of uninitialized pointers to
    dqput_all() and thus can lead to deference of random data. Fix the
    problem by properly initializing the array.

    CC: stable@vger.kernel.org
    Signed-off-by: Nikolay Borisov
    Signed-off-by: Jan Kara

    Nikolay Borisov
     

18 Feb, 2016

2 commits

  • Commit 7955118eafc4 (quota: Allow Q_GETQUOTA for frozen filesystem)
    allowed Q_GETQUOTA call for frozen filesystem. It makes sense on the
    first look but zero-day testing has shown that with this change ext4
    warns about starting a transaction for frozen filesystem. This happens
    because ext4_acquire_dquot() prepares for allocating space for new quota
    structure. Although it would be possible to implement Q_GETQUOTA for
    ext4 without allocating space for non-existent structures, the matter
    further complicates because OCFS2 needs to update on-disk structure use
    count when a new cluster node loads quota information from disk. So just
    revert the change and forbid Q_GETQUOTA together with Q_GETNEXTQUOTA for
    frozen filesystem. Add comment to quotactl_cmd_write() to save us from
    repeating this excercise in a few years when I forget again.

    Signed-off-by: Jan Kara

    Jan Kara
     
  • When loading new quota structure from disk, there is a possibility caller
    of dqget() will see uninitialized data due to CPU reordering loads or
    stores - loads from dquot can be reordered before test of DQ_ACTIVE_B
    bit or setting of this bit could be reordered before filling of the
    structure. Fix the issue by adding proper memory barriers.

    Signed-off-by: Jan Kara

    Jan Kara
     

09 Feb, 2016

4 commits


08 Feb, 2016

3 commits

  • Q_GETNEXTQUOTA is exactly like Q_GETQUOTA, except that it
    will return quota information for the id equal to or greater
    than the id requested. In other words, if the requested id has
    no quota, the command will return quota information for the
    next higher id which does have a quota set. If no higher id
    has an active quota, -ESRCH is returned.

    This allows filesystems to do efficient iteration in kernelspace,
    much like extN filesystems do in userspace when asked to report
    all active quotas.

    This does require a new data structure for userspace, as the
    current structure does not include an ID for the returned quota
    information.

    Today, Ext4 with a hidden quota inode requires getpwent-style
    iterations, and for systems which have i.e. LDAP backends,
    this can be very slow, or even impossible if iteration is not
    allowed in the configuration.

    Signed-off-by: Eric Sandeen
    Reviewed-by: Jan Kara
    Signed-off-by: Dave Chinner

    Eric Sandeen
     
  • Q_XGETNEXTQUOTA is exactly like Q_XGETQUOTA, except that it
    will return quota information for the id equal to or greater
    than the id requested. In other words, if the requested id has
    no quota, the command will return quota information for the
    next higher id which does have a quota set. If no higher id
    has an active quota, -ESRCH is returned.

    This allows filesystems to do efficient iteration in kernelspace,
    much like extN filesystems do in userspace when asked to report
    all active quotas.

    The patch adds a d_id field to struct qc_dqblk so that we can
    pass back the id of the quota which was found, and return it
    to userspace.

    Today, filesystems such as XFS require getpwent-style iterations,
    and for systems which have i.e. LDAP backends, this can be very
    slow, or even impossible if iteration is not allowed in the
    configuration.

    Signed-off-by: Eric Sandeen
    Reviewed-by: Jan Kara
    Signed-off-by: Dave Chinner

    Eric Sandeen
     
  • The cmd argument to quota_quotaon() via Q_QUOTAON quotactl
    is not used, so remove it.

    Signed-off-by: Eric Sandeen
    Reviewed-by: Jan Kara
    Signed-off-by: Dave Chinner

    Eric Sandeen
     

23 Jan, 2016

1 commit

  • parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested},
    inode_foo(inode) being mutex_foo(&inode->i_mutex).

    Please, use those for access to ->i_mutex; over the coming cycle
    ->i_mutex will become rwsem, with ->lookup() done with it held
    only shared.

    Signed-off-by: Al Viro

    Al Viro
     

04 Jan, 2016

1 commit


14 Dec, 2015

2 commits

  • The Kconfig currently controlling compilation of this code is:

    config QUOTA
    bool "Quota support"

    ...meaning that it currently is not being built as a module by anyone.

    Lets remove the couple traces of modularity so that when reading the
    driver there is no doubt it is builtin-only.

    Since module_init translates to device_initcall in the non-modular
    case, the init ordering gets bumped to one level earlier when we
    use the more appropriate fs_initcall here. However we've made similar
    changes before without any fallout and none is expected here either.

    We don't delete module.h because the code in turn tries to load other
    modules as appropriate and so it still needs that header.

    Cc: Jan Kara
    Cc: Alexander Viro
    Cc: linux-fsdevel@vger.kernel.org
    Signed-off-by: Paul Gortmaker
    Signed-off-by: Jan Kara

    Paul Gortmaker
     
  • The Kconfig currently controlling compilation of this code is:

    config QUOTA_NETLINK_INTERFACE
    bool "Report quota messages through netlink interface"

    ...meaning that it currently is not being built as a module by anyone.

    Lets remove the couple traces of modularity so that when reading the
    driver there is no doubt it is builtin-only.

    Since module_init translates to device_initcall in the non-modular
    case, the init ordering gets bumped to one level earlier when we
    use the more appropriate fs_initcall here. However we've made similar
    changes before without any fallout and none is expected here either.

    Cc: Jan Kara
    Signed-off-by: Paul Gortmaker
    Signed-off-by: Jan Kara

    Paul Gortmaker
     

06 Sep, 2015

1 commit

  • Pull vfs updates from Al Viro:
    "In this one:

    - d_move fixes (Eric Biederman)

    - UFS fixes (me; locking is mostly sane now, a bunch of bugs in error
    handling ought to be fixed)

    - switch of sb_writers to percpu rwsem (Oleg Nesterov)

    - superblock scalability (Josef Bacik and Dave Chinner)

    - swapon(2) race fix (Hugh Dickins)"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (65 commits)
    vfs: Test for and handle paths that are unreachable from their mnt_root
    dcache: Reduce the scope of i_lock in d_splice_alias
    dcache: Handle escaped paths in prepend_path
    mm: fix potential data race in SyS_swapon
    inode: don't softlockup when evicting inodes
    inode: rename i_wb_list to i_io_list
    sync: serialise per-superblock sync operations
    inode: convert inode_sb_list_lock to per-sb
    inode: add hlist_fake to avoid the inode hash lock in evict
    writeback: plug writeback at a high level
    change sb_writers to use percpu_rw_semaphore
    shift percpu_counter_destroy() into destroy_super_work()
    percpu-rwsem: kill CONFIG_PERCPU_RWSEM
    percpu-rwsem: introduce percpu_rwsem_release() and percpu_rwsem_acquire()
    percpu-rwsem: introduce percpu_down_read_trylock()
    document rwsem_release() in sb_wait_write()
    fix the broken lockdep logic in __sb_start_write()
    introduce __sb_writers_{acquired,release}() helpers
    ufs_inode_get{frag,block}(): get rid of 'phys' argument
    ufs_getfrag_block(): tidy up a bit
    ...

    Linus Torvalds
     

18 Aug, 2015

1 commit

  • The process of reducing contention on per-superblock inode lists
    starts with moving the locking to match the per-superblock inode
    list. This takes the global lock out of the picture and reduces the
    contention problems to within a single filesystem. This doesn't get
    rid of contention as the locks still have global CPU scope, but it
    does isolate operations on different superblocks form each other.

    Signed-off-by: Dave Chinner
    Signed-off-by: Josef Bacik
    Reviewed-by: Jan Kara
    Reviewed-by: Christoph Hellwig
    Tested-by: Dave Chinner

    Dave Chinner
     

11 Aug, 2015

1 commit


24 Jul, 2015

1 commit

  • Currently when some error happened in ->acquire_dquot(), dqget() just
    returned NULL. That was indistinguishable from a case when e.g. someone
    run quotaoff and so was generally silently ignored. However
    ->acquire_dquot() can fail because of ENOSPC or EIO in which case user
    should better know. So propagate error up from ->acquire_dquot properly.

    Signed-off-by: Jan Kara

    Jan Kara
     

27 Apr, 2015

1 commit

  • Pull fourth vfs update from Al Viro:
    "d_inode() annotations from David Howells (sat in for-next since before
    the beginning of merge window) + four assorted fixes"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    RCU pathwalk breakage when running into a symlink overmounting something
    fix I_DIO_WAKEUP definition
    direct-io: only inc/dec inode->i_dio_count for file systems
    fs/9p: fix readdir()
    VFS: assorted d_backing_inode() annotations
    VFS: fs/inode.c helpers: d_inode() annotations
    VFS: fs/cachefiles: d_backing_inode() annotations
    VFS: fs library helpers: d_inode() annotations
    VFS: assorted weird filesystems: d_inode() annotations
    VFS: normal filesystems (and lustre): d_inode() annotations
    VFS: security/: d_inode() annotations
    VFS: security/: d_backing_inode() annotations
    VFS: net/: d_inode() annotations
    VFS: net/unix: d_backing_inode() annotations
    VFS: kernel/: d_inode() annotations
    VFS: audit: d_backing_inode() annotations
    VFS: Fix up some ->d_inode accesses in the chelsio driver
    VFS: Cachefiles should perform fs modifications on the top layer only
    VFS: AF_UNIX sockets should call mknod on the top layer only

    Linus Torvalds
     

16 Apr, 2015

1 commit


19 Mar, 2015

1 commit


16 Mar, 2015

1 commit


04 Mar, 2015

7 commits

  • Currently quota format that supports 64-bit usage sets maximum quota
    limit as 2^64-1. However quota core code uses signed numbers to track
    usage and even limits themselves are stored in long long. Checking of
    maximum allowable limits worked by luck until commit 14bf61ffe6ac
    (quota: Switch ->get_dqblk() and ->set_dqblk() to use bytes as space
    units) because variable we compared with was unsigned. After that commit
    the type we compared against changed to signed and thus checks for
    maximum limits with the newest VFS quota format started to refuse any
    non-negative value. Later the problem was inadvertedly fixed by commit
    b10a08194c2b (quota: Store maximum space limit in bytes) because we
    started to compare against unsigned type as well.

    Fix possible future problems of this kind by setting maximum limits to
    2^63-1 to avoid overflow issues.

    Reported-by: Carlos Carvalho
    Signed-off-by: Jan Kara

    Jan Kara
     
  • Root level in quota tree must be already allocated otherwise this block
    could be used for something else.

    Signed-off-by: Konstantin Khlebnikov
    Signed-off-by: Jan Kara

    Konstantin Khlebnikov
     
  • Remove redundant calls of i_dquot(), keep pointer in local variable.

    add/remove: 0/0 grow/shrink: 3/7 up/down: 40/-278 (-238)
    function old new delta
    __dquot_free_space 734 750 +16
    __dquot_alloc_space 484 500 +16
    dquot_free_inode 324 332 +8
    dquot_drop 82 69 -13
    vfs_load_quota_inode 1357 1341 -16
    dquot_reclaim_space_nodirty 348 316 -32
    dquot_disable 1980 1944 -36
    dquot_claim_space_nodirty 354 314 -40
    __dquot_drop 125 83 -42
    __dquot_initialize 522 423 -99

    Signed-off-by: Konstantin Khlebnikov
    Signed-off-by: Jan Kara

    Konstantin Khlebnikov
     
  • Setting timers or warning counts for id 0 via Q_XSETQLIM is used to
    actually set time limits and warning limits for all users. Hook up
    ->set_info to this so that VFS quota time limits get set the same
    way as XFS ones.

    When doing this Q_XSETQLIM for XFS is effectively split into two
    independent transactions - one for setting timers and warning limits and
    one for setting space and inode limits. Although this is inefficient, it
    is rare enough that it does not matter.

    Reviewed-by: Christoph Hellwig
    Signed-off-by: Jan Kara

    Jan Kara
     
  • Change ->set_info to take new qc_info structure which contains all the
    necessary information both for XFS and VFS. Convert Q_SETINFO handler
    to use this structure.

    Signed-off-by: Jan Kara

    Jan Kara
     
  • These callbacks are now unused. Remove them.

    Reviewed-by: Christoph Hellwig
    Signed-off-by: Jan Kara

    Jan Kara
     
  • Add appropriate conversion functions so that filesystems supporting
    ->get_state() method can be queried using Q_GETXSTATE and Q_GETXSTATV
    calls.

    Reviewed-by: Christoph Hellwig
    Signed-off-by: Jan Kara

    Jan Kara