]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Mar 2015 18:27:05 +0000 (10:27 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Mar 2015 18:27:05 +0000 (10:27 -0800)
added patches:
quota-store-maximum-space-limit-in-bytes.patch

queue-3.19/quota-store-maximum-space-limit-in-bytes.patch [new file with mode: 0644]
queue-3.19/series

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 (file)
index 0000000..f2d22e9
--- /dev/null
@@ -0,0 +1,122 @@
+From b10a08194c2b615955dfab2300331a90ae9344c7 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Thu, 9 Oct 2014 16:54:13 +0200
+Subject: quota: Store maximum space limit in bytes
+
+From: Jan Kara <jack@suse.cz>
+
+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 <hch@lst.de>
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
+ };
index 58226a5a53d9ff88def49e10dc4cb50d85b97b6e..d6b5119647d692ec37cf1a436bc320de8372f9f9 100644 (file)
@@ -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