Merge branch 'xfs-misc-fixes-for-4.4-1' into for-next
This commit is contained in:
Коммит
1e2103cbf4
|
@ -55,8 +55,9 @@ kmem_alloc(size_t size, xfs_km_flags_t flags)
|
|||
return ptr;
|
||||
if (!(++retries % 100))
|
||||
xfs_err(NULL,
|
||||
"possible memory allocation deadlock in %s (mode:0x%x)",
|
||||
__func__, lflags);
|
||||
"%s(%u) possible memory allocation deadlock size %u in %s (mode:0x%x)",
|
||||
current->comm, current->pid,
|
||||
(unsigned int)size, __func__, lflags);
|
||||
congestion_wait(BLK_RW_ASYNC, HZ/50);
|
||||
} while (1);
|
||||
}
|
||||
|
@ -120,8 +121,9 @@ kmem_zone_alloc(kmem_zone_t *zone, xfs_km_flags_t flags)
|
|||
return ptr;
|
||||
if (!(++retries % 100))
|
||||
xfs_err(NULL,
|
||||
"possible memory allocation deadlock in %s (mode:0x%x)",
|
||||
__func__, lflags);
|
||||
"%s(%u) possible memory allocation deadlock in %s (mode:0x%x)",
|
||||
current->comm, current->pid,
|
||||
__func__, lflags);
|
||||
congestion_wait(BLK_RW_ASYNC, HZ/50);
|
||||
} while (1);
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ xfs_attr3_rmt_verify(
|
|||
if (be32_to_cpu(rmt->rm_bytes) > fsbsize - sizeof(*rmt))
|
||||
return false;
|
||||
if (be32_to_cpu(rmt->rm_offset) +
|
||||
be32_to_cpu(rmt->rm_bytes) > XATTR_SIZE_MAX)
|
||||
be32_to_cpu(rmt->rm_bytes) > XFS_XATTR_SIZE_MAX)
|
||||
return false;
|
||||
if (rmt->rm_owner == 0)
|
||||
return false;
|
||||
|
|
|
@ -223,7 +223,7 @@ xfs_btree_check_ptr(
|
|||
* long-form btree header.
|
||||
*
|
||||
* Prior to calculting the CRC, pull the LSN out of the buffer log item and put
|
||||
* it into the buffer so recovery knows what the last modifcation was that made
|
||||
* it into the buffer so recovery knows what the last modification was that made
|
||||
* it to disk.
|
||||
*/
|
||||
void
|
||||
|
@ -261,7 +261,7 @@ xfs_btree_lblock_verify_crc(
|
|||
* short-form btree header.
|
||||
*
|
||||
* Prior to calculting the CRC, pull the LSN out of the buffer log item and put
|
||||
* it into the buffer so recovery knows what the last modifcation was that made
|
||||
* it into the buffer so recovery knows what the last modification was that made
|
||||
* it to disk.
|
||||
*/
|
||||
void
|
||||
|
|
|
@ -59,6 +59,14 @@ struct xfs_ifork;
|
|||
#define XFS_SB_VERSION_BORGBIT 0x4000 /* ASCII only case-insens. */
|
||||
#define XFS_SB_VERSION_MOREBITSBIT 0x8000
|
||||
|
||||
/*
|
||||
* The size of a single extended attribute on disk is limited by
|
||||
* the size of index values within the attribute entries themselves.
|
||||
* These are be16 fields, so we can only support attribute data
|
||||
* sizes up to 2^16 bytes in length.
|
||||
*/
|
||||
#define XFS_XATTR_SIZE_MAX (1 << 16)
|
||||
|
||||
/*
|
||||
* Supported feature bit list is just all bits in the versionnum field because
|
||||
* we've used them all up and understand them all. Except, of course, for the
|
||||
|
@ -1483,7 +1491,7 @@ struct xfs_acl {
|
|||
*/
|
||||
#define XFS_ACL_MAX_ENTRIES(mp) \
|
||||
(xfs_sb_version_hascrc(&mp->m_sb) \
|
||||
? (XATTR_SIZE_MAX - sizeof(struct xfs_acl)) / \
|
||||
? (XFS_XATTR_SIZE_MAX - sizeof(struct xfs_acl)) / \
|
||||
sizeof(struct xfs_acl_entry) \
|
||||
: 25)
|
||||
|
||||
|
|
|
@ -489,6 +489,16 @@ typedef struct xfs_swapext
|
|||
#define XFS_FSOP_GOING_FLAGS_LOGFLUSH 0x1 /* flush log but not data */
|
||||
#define XFS_FSOP_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */
|
||||
|
||||
/*
|
||||
* ioctl limits
|
||||
*/
|
||||
#ifdef XATTR_LIST_MAX
|
||||
# define XFS_XATTR_LIST_MAX XATTR_LIST_MAX
|
||||
#else
|
||||
# define XFS_XATTR_LIST_MAX 65536
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* ioctl commands that are used by Linux filesystems
|
||||
*/
|
||||
|
|
|
@ -354,7 +354,8 @@ retry:
|
|||
*/
|
||||
if (!(++retries % 100))
|
||||
xfs_err(NULL,
|
||||
"possible memory allocation deadlock in %s (mode:0x%x)",
|
||||
"%s(%u) possible memory allocation deadlock in %s (mode:0x%x)",
|
||||
current->comm, current->pid,
|
||||
__func__, gfp_mask);
|
||||
|
||||
XFS_STATS_INC(bp->b_target->bt_mount, xb_page_retries);
|
||||
|
|
|
@ -411,7 +411,7 @@ xfs_attrlist_by_handle(
|
|||
if (copy_from_user(&al_hreq, arg, sizeof(xfs_fsop_attrlist_handlereq_t)))
|
||||
return -EFAULT;
|
||||
if (al_hreq.buflen < sizeof(struct attrlist) ||
|
||||
al_hreq.buflen > XATTR_LIST_MAX)
|
||||
al_hreq.buflen > XFS_XATTR_LIST_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
|
@ -455,7 +455,7 @@ xfs_attrmulti_attr_get(
|
|||
unsigned char *kbuf;
|
||||
int error = -EFAULT;
|
||||
|
||||
if (*len > XATTR_SIZE_MAX)
|
||||
if (*len > XFS_XATTR_SIZE_MAX)
|
||||
return -EINVAL;
|
||||
kbuf = kmem_zalloc_large(*len, KM_SLEEP);
|
||||
if (!kbuf)
|
||||
|
@ -485,7 +485,7 @@ xfs_attrmulti_attr_set(
|
|||
|
||||
if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
|
||||
return -EPERM;
|
||||
if (len > XATTR_SIZE_MAX)
|
||||
if (len > XFS_XATTR_SIZE_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
kbuf = memdup_user(ubuf, len);
|
||||
|
|
|
@ -356,7 +356,7 @@ xfs_compat_attrlist_by_handle(
|
|||
sizeof(compat_xfs_fsop_attrlist_handlereq_t)))
|
||||
return -EFAULT;
|
||||
if (al_hreq.buflen < sizeof(struct attrlist) ||
|
||||
al_hreq.buflen > XATTR_LIST_MAX)
|
||||
al_hreq.buflen > XFS_XATTR_LIST_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include "xfs.h"
|
||||
#include "xfs_fs.h"
|
||||
#include "xfs_error.h"
|
||||
#include "xfs_format.h"
|
||||
#include "xfs_log_format.h"
|
||||
#include "xfs_trans_resv.h"
|
||||
|
@ -43,6 +44,7 @@ void func(const struct xfs_mount *mp, const char *fmt, ...) \
|
|||
{ \
|
||||
struct va_format vaf; \
|
||||
va_list args; \
|
||||
int level; \
|
||||
\
|
||||
va_start(args, fmt); \
|
||||
\
|
||||
|
@ -51,6 +53,11 @@ void func(const struct xfs_mount *mp, const char *fmt, ...) \
|
|||
\
|
||||
__xfs_printk(kern_level, mp, &vaf); \
|
||||
va_end(args); \
|
||||
\
|
||||
if (!kstrtoint(kern_level, 0, &level) && \
|
||||
level <= LOGLEVEL_ERR && \
|
||||
xfs_error_level >= XFS_ERRLEVEL_HIGH) \
|
||||
xfs_stack_trace(); \
|
||||
} \
|
||||
|
||||
define_xfs_printk_level(xfs_emerg, KERN_EMERG);
|
||||
|
|
Загрузка…
Ссылка в новой задаче