From: Greg Kroah-Hartman Date: Wed, 4 Mar 2015 18:27:05 +0000 (-0800) Subject: 3.19-stable patches X-Git-Tag: v3.10.71~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=caa59d1cae52698b3f57040fdfd1610a2e06ce75;p=thirdparty%2Fkernel%2Fstable-queue.git 3.19-stable patches added patches: quota-store-maximum-space-limit-in-bytes.patch --- diff --git a/queue-3.19/quota-store-maximum-space-limit-in-bytes.patch b/queue-3.19/quota-store-maximum-space-limit-in-bytes.patch new file mode 100644 index 00000000000..f2d22e91cc0 --- /dev/null +++ b/queue-3.19/quota-store-maximum-space-limit-in-bytes.patch @@ -0,0 +1,122 @@ +From b10a08194c2b615955dfab2300331a90ae9344c7 Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Thu, 9 Oct 2014 16:54:13 +0200 +Subject: quota: Store maximum space limit in bytes + +From: Jan Kara + +commit b10a08194c2b615955dfab2300331a90ae9344c7 upstream. + +Currently maximum space limit quota format supports is in blocks however +since we store space limits in bytes, this is somewhat confusing. So +store the maximum limit in bytes as well. Also rename the field to match +the new unit and related inode field to match the new naming scheme. + +Reviewed-by: Christoph Hellwig +Signed-off-by: Jan Kara +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ocfs2/quota_local.c | 4 ++-- + fs/quota/dquot.c | 18 ++++-------------- + fs/quota/quota_v1.c | 4 ++-- + fs/quota/quota_v2.c | 10 +++++----- + include/linux/quota.h | 4 ++-- + 5 files changed, 15 insertions(+), 25 deletions(-) + +--- a/fs/ocfs2/quota_local.c ++++ b/fs/ocfs2/quota_local.c +@@ -701,8 +701,8 @@ static int ocfs2_local_read_info(struct + /* We don't need the lock and we have to acquire quota file locks + * which will later depend on this lock */ + mutex_unlock(&sb_dqopt(sb)->dqio_mutex); +- info->dqi_maxblimit = 0x7fffffffffffffffLL; +- info->dqi_maxilimit = 0x7fffffffffffffffLL; ++ info->dqi_max_spc_limit = 0x7fffffffffffffffLL; ++ info->dqi_max_ino_limit = 0x7fffffffffffffffLL; + oinfo = kmalloc(sizeof(struct ocfs2_mem_dqinfo), GFP_NOFS); + if (!oinfo) { + mlog(ML_ERROR, "failed to allocate memory for ocfs2 quota" +--- a/fs/quota/dquot.c ++++ b/fs/quota/dquot.c +@@ -2385,16 +2385,6 @@ out: + } + EXPORT_SYMBOL(dquot_quota_on_mount); + +-static inline qsize_t qbtos(qsize_t blocks) +-{ +- return blocks << QIF_DQBLKSIZE_BITS; +-} +- +-static inline qsize_t stoqb(qsize_t space) +-{ +- return (space + QIF_DQBLKSIZE - 1) >> QIF_DQBLKSIZE_BITS; +-} +- + /* Generic routine for getting common part of quota structure */ + static void do_get_dqblk(struct dquot *dquot, struct qc_dqblk *di) + { +@@ -2444,13 +2434,13 @@ static int do_set_dqblk(struct dquot *dq + return -EINVAL; + + if (((di->d_fieldmask & QC_SPC_SOFT) && +- stoqb(di->d_spc_softlimit) > dqi->dqi_maxblimit) || ++ di->d_spc_softlimit > dqi->dqi_max_spc_limit) || + ((di->d_fieldmask & QC_SPC_HARD) && +- stoqb(di->d_spc_hardlimit) > dqi->dqi_maxblimit) || ++ di->d_spc_hardlimit > dqi->dqi_max_spc_limit) || + ((di->d_fieldmask & QC_INO_SOFT) && +- (di->d_ino_softlimit > dqi->dqi_maxilimit)) || ++ (di->d_ino_softlimit > dqi->dqi_max_ino_limit)) || + ((di->d_fieldmask & QC_INO_HARD) && +- (di->d_ino_hardlimit > dqi->dqi_maxilimit))) ++ (di->d_ino_hardlimit > dqi->dqi_max_ino_limit))) + return -ERANGE; + + spin_lock(&dq_data_lock); +--- a/fs/quota/quota_v1.c ++++ b/fs/quota/quota_v1.c +@@ -169,8 +169,8 @@ static int v1_read_file_info(struct supe + } + ret = 0; + /* limits are stored as unsigned 32-bit data */ +- dqopt->info[type].dqi_maxblimit = 0xffffffff; +- dqopt->info[type].dqi_maxilimit = 0xffffffff; ++ dqopt->info[type].dqi_max_spc_limit = 0xffffffffULL << QUOTABLOCK_BITS; ++ dqopt->info[type].dqi_max_ino_limit = 0xffffffff; + dqopt->info[type].dqi_igrace = + dqblk.dqb_itime ? dqblk.dqb_itime : MAX_IQ_TIME; + dqopt->info[type].dqi_bgrace = +--- a/fs/quota/quota_v2.c ++++ b/fs/quota/quota_v2.c +@@ -117,12 +117,12 @@ static int v2_read_file_info(struct supe + qinfo = info->dqi_priv; + if (version == 0) { + /* limits are stored as unsigned 32-bit data */ +- info->dqi_maxblimit = 0xffffffff; +- info->dqi_maxilimit = 0xffffffff; ++ info->dqi_max_spc_limit = 0xffffffffULL << QUOTABLOCK_BITS; ++ info->dqi_max_ino_limit = 0xffffffff; + } else { +- /* used space is stored as unsigned 64-bit value */ +- info->dqi_maxblimit = 0xffffffffffffffffULL; /* 2^64-1 */ +- info->dqi_maxilimit = 0xffffffffffffffffULL; ++ /* used space is stored as unsigned 64-bit value in bytes */ ++ info->dqi_max_spc_limit = 0xffffffffffffffffULL; /* 2^64-1 */ ++ info->dqi_max_ino_limit = 0xffffffffffffffffULL; + } + info->dqi_bgrace = le32_to_cpu(dinfo.dqi_bgrace); + info->dqi_igrace = le32_to_cpu(dinfo.dqi_igrace); +--- a/include/linux/quota.h ++++ b/include/linux/quota.h +@@ -216,8 +216,8 @@ struct mem_dqinfo { + unsigned long dqi_flags; + unsigned int dqi_bgrace; + unsigned int dqi_igrace; +- qsize_t dqi_maxblimit; +- qsize_t dqi_maxilimit; ++ qsize_t dqi_max_spc_limit; ++ qsize_t dqi_max_ino_limit; + void *dqi_priv; + }; + diff --git a/queue-3.19/series b/queue-3.19/series index 58226a5a53d..d6b5119647d 100644 --- a/queue-3.19/series +++ b/queue-3.19/series @@ -173,3 +173,4 @@ kernel-fix-sparse-warning-for-access_once.patch kernel-make-read_once-valid-on-const-arguments.patch x86-spinlocks-paravirt-fix-memory-corruption-on-unlock.patch x86-xen-p2m-replace-access_once-with-read_once.patch +quota-store-maximum-space-limit-in-bytes.patch