]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2013 20:25:52 +0000 (12:25 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2013 20:25:52 +0000 (12:25 -0800)
added patches:
cxd2820r_core-fix-sparse-warnings.patch
exportfs-fix-32-bit-nfsd-handling-of-64-bit-inode-numbers.patch
hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch
hid-kye-fix-missing-break-in-kye_report_fixup.patch
nfs-fix-do_div-warning-by-instead-using-sector_div.patch
sched-avoid-throttle_cfs_rq-racing-with-period_timer-stopping.patch
vfs-split-out-vfs_getattr_nosec.patch

queue-3.12/cxd2820r_core-fix-sparse-warnings.patch [new file with mode: 0644]
queue-3.12/exportfs-fix-32-bit-nfsd-handling-of-64-bit-inode-numbers.patch [new file with mode: 0644]
queue-3.12/hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch [new file with mode: 0644]
queue-3.12/hid-kye-fix-missing-break-in-kye_report_fixup.patch [new file with mode: 0644]
queue-3.12/nfs-fix-do_div-warning-by-instead-using-sector_div.patch [new file with mode: 0644]
queue-3.12/sched-avoid-throttle_cfs_rq-racing-with-period_timer-stopping.patch [new file with mode: 0644]
queue-3.12/series
queue-3.12/vfs-split-out-vfs_getattr_nosec.patch [new file with mode: 0644]

diff --git a/queue-3.12/cxd2820r_core-fix-sparse-warnings.patch b/queue-3.12/cxd2820r_core-fix-sparse-warnings.patch
new file mode 100644 (file)
index 0000000..a8371fd
--- /dev/null
@@ -0,0 +1,44 @@
+From 0db3fa2741ad8371c21b3a6785416a4afc0cc1d4 Mon Sep 17 00:00:00 2001
+From: Hans Verkuil <hans.verkuil@cisco.com>
+Date: Fri, 4 Oct 2013 11:01:43 -0300
+Subject: [media] cxd2820r_core: fix sparse warnings
+
+From: Hans Verkuil <hans.verkuil@cisco.com>
+
+commit 0db3fa2741ad8371c21b3a6785416a4afc0cc1d4 upstream.
+
+drivers/media/dvb-frontends/cxd2820r_core.c:34:32: error: cannot size expression
+drivers/media/dvb-frontends/cxd2820r_core.c:68:32: error: cannot size expression
+
+Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
+Acked-by: Antti Palosaari <crope@iki.fi>
+Reviewed-by: Antti Palosaari <crope@iki.fi>
+Reviewed-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
+Cc: Frederik Himpe <fhimpe@telenet.be>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/dvb-frontends/cxd2820r_core.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/dvb-frontends/cxd2820r_core.c
++++ b/drivers/media/dvb-frontends/cxd2820r_core.c
+@@ -34,7 +34,7 @@ static int cxd2820r_wr_regs_i2c(struct c
+               {
+                       .addr = i2c,
+                       .flags = 0,
+-                      .len = sizeof(buf),
++                      .len = len + 1,
+                       .buf = buf,
+               }
+       };
+@@ -75,7 +75,7 @@ static int cxd2820r_rd_regs_i2c(struct c
+               }, {
+                       .addr = i2c,
+                       .flags = I2C_M_RD,
+-                      .len = sizeof(buf),
++                      .len = len,
+                       .buf = buf,
+               }
+       };
diff --git a/queue-3.12/exportfs-fix-32-bit-nfsd-handling-of-64-bit-inode-numbers.patch b/queue-3.12/exportfs-fix-32-bit-nfsd-handling-of-64-bit-inode-numbers.patch
new file mode 100644 (file)
index 0000000..ca7fb68
--- /dev/null
@@ -0,0 +1,67 @@
+From 950ee9566a5b6cc45d15f5fe044bab4f1e8b62cb Mon Sep 17 00:00:00 2001
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Tue, 10 Sep 2013 11:41:12 -0400
+Subject: exportfs: fix 32-bit nfsd handling of 64-bit inode numbers
+
+From: "J. Bruce Fields" <bfields@redhat.com>
+
+commit 950ee9566a5b6cc45d15f5fe044bab4f1e8b62cb upstream.
+
+Symptoms were spurious -ENOENTs on stat of an NFS filesystem from a
+32-bit NFS server exporting a very large XFS filesystem, when the
+server's cache is cold (so the inodes in question are not in cache).
+
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Reported-by: Trevor Cordes <trevor@tecnopolis.ca>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/exportfs/expfs.c |   18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+--- a/fs/exportfs/expfs.c
++++ b/fs/exportfs/expfs.c
+@@ -215,7 +215,7 @@ struct getdents_callback {
+       struct dir_context ctx;
+       char *name;             /* name that was found. It already points to a
+                                  buffer NAME_MAX+1 is size */
+-      unsigned long ino;      /* the inum we are looking for */
++      u64 ino;                /* the inum we are looking for */
+       int found;              /* inode matched? */
+       int sequence;           /* sequence counter */
+ };
+@@ -255,10 +255,14 @@ static int get_name(const struct path *p
+       struct inode *dir = path->dentry->d_inode;
+       int error;
+       struct file *file;
++      struct kstat stat;
++      struct path child_path = {
++              .mnt = path->mnt,
++              .dentry = child,
++      };
+       struct getdents_callback buffer = {
+               .ctx.actor = filldir_one,
+               .name = name,
+-              .ino = child->d_inode->i_ino
+       };
+       error = -ENOTDIR;
+@@ -268,6 +272,16 @@ static int get_name(const struct path *p
+       if (!dir->i_fop)
+               goto out;
+       /*
++       * inode->i_ino is unsigned long, kstat->ino is u64, so the
++       * former would be insufficient on 32-bit hosts when the
++       * filesystem supports 64-bit inode numbers.  So we need to
++       * actually call ->getattr, not just read i_ino:
++       */
++      error = vfs_getattr_nosec(&child_path, &stat);
++      if (error)
++              return error;
++      buffer.ino = stat.ino;
++      /*
+        * Open the directory ...
+        */
+       file = dentry_open(path, O_RDONLY, cred);
diff --git a/queue-3.12/hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch b/queue-3.12/hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch
new file mode 100644 (file)
index 0000000..a1c03c2
--- /dev/null
@@ -0,0 +1,65 @@
+From 4a2c94c9b6c03af61b04993340bd9559e2277de4 Mon Sep 17 00:00:00 2001
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Wed, 20 Nov 2013 09:49:41 -0500
+Subject: HID: kye: Add report fixup for Genius Manticore Keyboard
+
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+
+commit 4a2c94c9b6c03af61b04993340bd9559e2277de4 upstream.
+
+Genius Manticore Keyboard presents the same problem in its report
+descriptors than Genius Gila Gaming Mouse and Genius Imperator Keyboard.
+Use the same fixup.
+
+Reported-and-tested-by: Adam Kulagowski <fidor@fidor.org>
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-core.c |    1 +
+ drivers/hid/hid-ids.h  |    1 +
+ drivers/hid/hid-kye.c  |    5 +++++
+ 3 files changed, 7 insertions(+)
+
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1725,6 +1725,7 @@ static const struct hid_device_id hid_ha
+       { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
++      { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) },
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -489,6 +489,7 @@
+ #define USB_VENDOR_ID_KYE             0x0458
+ #define USB_DEVICE_ID_KYE_ERGO_525V   0x0087
+ #define USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE        0x0138
++#define USB_DEVICE_ID_GENIUS_MANTICORE        0x0153
+ #define USB_DEVICE_ID_GENIUS_GX_IMPERATOR     0x4018
+ #define USB_DEVICE_ID_KYE_GPEN_560    0x5003
+ #define USB_DEVICE_ID_KYE_EASYPEN_I405X       0x5010
+--- a/drivers/hid/hid-kye.c
++++ b/drivers/hid/hid-kye.c
+@@ -341,6 +341,9 @@ static __u8 *kye_report_fixup(struct hid
+       case USB_DEVICE_ID_GENIUS_GX_IMPERATOR:
+               rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 83,
+                                       "Genius Gx Imperator Keyboard");
++      case USB_DEVICE_ID_GENIUS_MANTICORE:
++              rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 104,
++                                      "Genius Manticore Keyboard");
+               break;
+       }
+       return rdesc;
+@@ -439,6 +442,8 @@ static const struct hid_device_id kye_de
+                               USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
+                               USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
++      { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
++                              USB_DEVICE_ID_GENIUS_MANTICORE) },
+       { }
+ };
+ MODULE_DEVICE_TABLE(hid, kye_devices);
diff --git a/queue-3.12/hid-kye-fix-missing-break-in-kye_report_fixup.patch b/queue-3.12/hid-kye-fix-missing-break-in-kye_report_fixup.patch
new file mode 100644 (file)
index 0000000..47551b1
--- /dev/null
@@ -0,0 +1,34 @@
+From 0a5f99cfff2297f6c350b7f54878cbbf1b1253d5 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 30 Nov 2013 19:12:27 +0000
+Subject: HID: kye: Fix missing break in kye_report_fixup()
+
+From: Ben Hutchings <ben@decadent.org.uk>
+
+commit 0a5f99cfff2297f6c350b7f54878cbbf1b1253d5 upstream.
+
+The change to support Genius Manticore Keyboard also changed behaviour
+for Genius Gx Imperator Keyboard, as there is no break between the
+cases.  This is presumably a mistake.
+
+Reported by Coverity as CID 1134029.
+
+Fixes: 4a2c94c9b6c0 ('HID: kye: Add report fixup for Genius Manticore Keyboard')
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-kye.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/hid/hid-kye.c
++++ b/drivers/hid/hid-kye.c
+@@ -341,6 +341,7 @@ static __u8 *kye_report_fixup(struct hid
+       case USB_DEVICE_ID_GENIUS_GX_IMPERATOR:
+               rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 83,
+                                       "Genius Gx Imperator Keyboard");
++              break;
+       case USB_DEVICE_ID_GENIUS_MANTICORE:
+               rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 104,
+                                       "Genius Manticore Keyboard");
diff --git a/queue-3.12/nfs-fix-do_div-warning-by-instead-using-sector_div.patch b/queue-3.12/nfs-fix-do_div-warning-by-instead-using-sector_div.patch
new file mode 100644 (file)
index 0000000..6886a3e
--- /dev/null
@@ -0,0 +1,40 @@
+From 3873d064b8538686bbbd4b858dc8a07db1f7f43a Mon Sep 17 00:00:00 2001
+From: Helge Deller <deller@gmx.de>
+Date: Mon, 2 Dec 2013 19:59:31 +0100
+Subject: nfs: fix do_div() warning by instead using sector_div()
+
+From: Helge Deller <deller@gmx.de>
+
+commit 3873d064b8538686bbbd4b858dc8a07db1f7f43a upstream.
+
+When compiling a 32bit kernel with CONFIG_LBDAF=n the compiler complains like
+shown below.  Fix this warning by instead using sector_div() which is provided
+by the kernel.h header file.
+
+fs/nfs/blocklayout/extents.c: In function ‘normalize’:
+include/asm-generic/div64.h:43:28: warning: comparison of distinct pointer types lacks a cast [enabled by default]
+fs/nfs/blocklayout/extents.c:47:13: note: in expansion of macro ‘do_div’
+nfs/blocklayout/extents.c:47:2: warning: right shift count >= width of type [enabled by default]
+fs/nfs/blocklayout/extents.c:47:2: warning: passing argument 1 of ‘__div64_32’ from incompatible pointer type [enabled by default]
+include/asm-generic/div64.h:35:17: note: expected ‘uint64_t *’ but argument is of type ‘sector_t *’
+ extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
+
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/nfs/blocklayout/extents.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/nfs/blocklayout/extents.c
++++ b/fs/nfs/blocklayout/extents.c
+@@ -44,7 +44,7 @@
+ static inline sector_t normalize(sector_t s, int base)
+ {
+       sector_t tmp = s; /* Since do_div modifies its argument */
+-      return s - do_div(tmp, base);
++      return s - sector_div(tmp, base);
+ }
+ static inline sector_t normalize_up(sector_t s, int base)
diff --git a/queue-3.12/sched-avoid-throttle_cfs_rq-racing-with-period_timer-stopping.patch b/queue-3.12/sched-avoid-throttle_cfs_rq-racing-with-period_timer-stopping.patch
new file mode 100644 (file)
index 0000000..5f23e73
--- /dev/null
@@ -0,0 +1,67 @@
+From f9f9ffc237dd924f048204e8799da74f9ecf40cf Mon Sep 17 00:00:00 2001
+From: Ben Segall <bsegall@google.com>
+Date: Wed, 16 Oct 2013 11:16:32 -0700
+Subject: sched: Avoid throttle_cfs_rq() racing with period_timer stopping
+
+From: Ben Segall <bsegall@google.com>
+
+commit f9f9ffc237dd924f048204e8799da74f9ecf40cf upstream.
+
+throttle_cfs_rq() doesn't check to make sure that period_timer is running,
+and while update_curr/assign_cfs_runtime does, a concurrently running
+period_timer on another cpu could cancel itself between this cpu's
+update_curr and throttle_cfs_rq(). If there are no other cfs_rqs running
+in the tg to restart the timer, this causes the cfs_rq to be stranded
+forever.
+
+Fix this by calling __start_cfs_bandwidth() in throttle if the timer is
+inactive.
+
+(Also add some sched_debug lines for cfs_bandwidth.)
+
+Tested: make a run/sleep task in a cgroup, loop switching the cgroup
+between 1ms/100ms quota and unlimited, checking for timer_active=0 and
+throttled=1 as a failure. With the throttle_cfs_rq() change commented out
+this fails, with the full patch it passes.
+
+Signed-off-by: Ben Segall <bsegall@google.com>
+Signed-off-by: Peter Zijlstra <peterz@infradead.org>
+Cc: pjt@google.com
+Link: http://lkml.kernel.org/r/20131016181632.22647.84174.stgit@sword-of-the-dawn.mtv.corp.google.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Cc: Chris J Arges <chris.j.arges@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/sched/debug.c |    8 ++++++++
+ kernel/sched/fair.c  |    2 ++
+ 2 files changed, 10 insertions(+)
+
+--- a/kernel/sched/debug.c
++++ b/kernel/sched/debug.c
+@@ -225,6 +225,14 @@ void print_cfs_rq(struct seq_file *m, in
+                       atomic_read(&cfs_rq->tg->runnable_avg));
+ #endif
+ #endif
++#ifdef CONFIG_CFS_BANDWIDTH
++      SEQ_printf(m, "  .%-30s: %d\n", "tg->cfs_bandwidth.timer_active",
++                      cfs_rq->tg->cfs_bandwidth.timer_active);
++      SEQ_printf(m, "  .%-30s: %d\n", "throttled",
++                      cfs_rq->throttled);
++      SEQ_printf(m, "  .%-30s: %d\n", "throttle_count",
++                      cfs_rq->throttle_count);
++#endif
+ #ifdef CONFIG_FAIR_GROUP_SCHED
+       print_cfs_group_stats(m, cpu, cfs_rq->tg);
+--- a/kernel/sched/fair.c
++++ b/kernel/sched/fair.c
+@@ -2335,6 +2335,8 @@ static void throttle_cfs_rq(struct cfs_r
+       cfs_rq->throttled_clock = rq_clock(rq);
+       raw_spin_lock(&cfs_b->lock);
+       list_add_tail_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq);
++      if (!cfs_b->timer_active)
++              __start_cfs_bandwidth(cfs_b);
+       raw_spin_unlock(&cfs_b->lock);
+ }
index 76804203a0df462eb9a668edab2bbb0a199e7509..90ce802d5050b58b3f8263c76bd3a3e64a93316e 100644 (file)
@@ -90,3 +90,10 @@ dm-thin-switch-to-read-only-mode-if-metadata-space-is-exhausted.patch
 dm-thin-always-fallback-the-pool-mode-if-commit-fails.patch
 dm-thin-re-establish-read-only-state-when-switching-to-fail-mode.patch
 dm-thin-allow-pool-in-read-only-mode-to-transition-to-read-write-mode.patch
+vfs-split-out-vfs_getattr_nosec.patch
+exportfs-fix-32-bit-nfsd-handling-of-64-bit-inode-numbers.patch
+hid-kye-add-report-fixup-for-genius-manticore-keyboard.patch
+hid-kye-fix-missing-break-in-kye_report_fixup.patch
+nfs-fix-do_div-warning-by-instead-using-sector_div.patch
+cxd2820r_core-fix-sparse-warnings.patch
+sched-avoid-throttle_cfs_rq-racing-with-period_timer-stopping.patch
diff --git a/queue-3.12/vfs-split-out-vfs_getattr_nosec.patch b/queue-3.12/vfs-split-out-vfs_getattr_nosec.patch
new file mode 100644 (file)
index 0000000..7ccdd16
--- /dev/null
@@ -0,0 +1,80 @@
+From b7a6ec52dd4eced4a9bcda9ca85b3c8af84d3c90 Mon Sep 17 00:00:00 2001
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Wed, 2 Oct 2013 17:01:18 -0400
+Subject: vfs: split out vfs_getattr_nosec
+
+From: "J. Bruce Fields" <bfields@redhat.com>
+
+commit b7a6ec52dd4eced4a9bcda9ca85b3c8af84d3c90 upstream.
+
+The filehandle lookup code wants this version of getattr.
+
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/stat.c          |   31 +++++++++++++++++++++++++------
+ include/linux/fs.h |    1 +
+ 2 files changed, 26 insertions(+), 6 deletions(-)
+
+--- a/fs/stat.c
++++ b/fs/stat.c
+@@ -37,14 +37,21 @@ void generic_fillattr(struct inode *inod
+ EXPORT_SYMBOL(generic_fillattr);
+-int vfs_getattr(struct path *path, struct kstat *stat)
++/**
++ * vfs_getattr_nosec - getattr without security checks
++ * @path: file to get attributes from
++ * @stat: structure to return attributes in
++ *
++ * Get attributes without calling security_inode_getattr.
++ *
++ * Currently the only caller other than vfs_getattr is internal to the
++ * filehandle lookup code, which uses only the inode number and returns
++ * no attributes to any user.  Any other code probably wants
++ * vfs_getattr.
++ */
++int vfs_getattr_nosec(struct path *path, struct kstat *stat)
+ {
+       struct inode *inode = path->dentry->d_inode;
+-      int retval;
+-
+-      retval = security_inode_getattr(path->mnt, path->dentry);
+-      if (retval)
+-              return retval;
+       if (inode->i_op->getattr)
+               return inode->i_op->getattr(path->mnt, path->dentry, stat);
+@@ -53,6 +60,18 @@ int vfs_getattr(struct path *path, struc
+       return 0;
+ }
++EXPORT_SYMBOL(vfs_getattr_nosec);
++
++int vfs_getattr(struct path *path, struct kstat *stat)
++{
++      int retval;
++
++      retval = security_inode_getattr(path->mnt, path->dentry);
++      if (retval)
++              return retval;
++      return vfs_getattr_nosec(path, stat);
++}
++
+ EXPORT_SYMBOL(vfs_getattr);
+ int vfs_fstat(unsigned int fd, struct kstat *stat)
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -2504,6 +2504,7 @@ extern int page_symlink(struct inode *in
+ extern const struct inode_operations page_symlink_inode_operations;
+ extern int generic_readlink(struct dentry *, char __user *, int);
+ extern void generic_fillattr(struct inode *, struct kstat *);
++int vfs_getattr_nosec(struct path *path, struct kstat *stat);
+ extern int vfs_getattr(struct path *, struct kstat *);
+ void __inode_add_bytes(struct inode *inode, loff_t bytes);
+ void inode_add_bytes(struct inode *inode, loff_t bytes);