info for other nodes in the
cluster.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 8 +++
fs/gfs2/ops_fstype.c | 133 +++
fs/gfs2/super.c | 31 +-
fs/gfs2/super.h | 3 +
4 files changed, 139 insertions(+), 36 deletions(-)
diff
with the local statfs inodes altogether and keep the
statfs changes solely in the journal.
Signed-off-by: Abhi Das
---
fs/gfs2/lops.c | 2 +-
fs/gfs2/lops.h | 1 +
fs/gfs2/recovery.c | 104 +
3 files changed, 106 insertions(+), 1 deletion(-)
found with xfstests:generic/034.
Turns out we weren't looking up the statfs inodes early enough in the
mount process. I also added some comments in the code.
Abhi Das (3):
gfs2: Add fields for statfs info in struct gfs2_log_header_host
gfs2: lookup local statfs inodes prior to journal rec
And read these in __get_log_header() from the log header.
Also make gfs2_statfs_change_out() non-static so it can be used
outside of super.c
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 4
fs/gfs2/recovery.c | 4
fs/gfs2/super.c| 2 +-
fs/gfs2/super.h| 2 ++
4 files
And read these in __get_log_header() from the log header.
Also make gfs2_statfs_change_out() non-static so it can be used
outside of super.c
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 4
fs/gfs2/recovery.c | 4
fs/gfs2/super.c| 2 +-
fs/gfs2/super.h| 2 ++
4 files
We require these inodes during journal recovery when we attempt
to recover the statfs file. We are not able to lookup inodes at
that time due to locks being blocked so we pre-lookup these inodes
and save them in a linked list.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 7 +++
fs
This patchset allows gfs2 to sync statfs info from the journal to the
master statfs file during a log flush or during recovery. We still
write to the local statfs file to allow older versions to recover the
statfs info of newer kernels with this patchset.
Abhi Das (3):
gfs2: Add fields for
Apply the outstanding statfs changes in the journal head to the
master statfs file. Zero out the local statfs file for good measure.
Signed-off-by: Abhi Das
---
fs/gfs2/lops.c | 2 +-
fs/gfs2/lops.h | 1 +
fs/gfs2/recovery.c | 71 ++
3 files
We store the local statfs info in the journal header now so
there's no need to write to the local statfs file anymore.
Signed-off-by: Abhi Das
---
fs/gfs2/lops.c | 10 +-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
index cb2a11b
And read these in __get_log_header() from the log header.
Also make gfs2_statfs_change_out() non-static so it can be used
outside of super.c
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 4
fs/gfs2/recovery.c | 4
fs/gfs2/super.c| 2 +-
fs/gfs2/super.h| 2 ++
4 files
With this patchset, we don't write to the local statfs file
anymore. The local statfs data is written into the journal
and synced to the master statfs file during a log flush or
during recovery.
Abhi Das (3):
gfs2: Don't write updates to local statfs file
gfs2: Add fields for stat
Apply the outstanding statfs changes in the journal head to the
master statfs file. Zero out the local statfs file for good measure.
Signed-off-by: Abhi Das
---
fs/gfs2/lops.c | 2 +-
fs/gfs2/lops.h | 1 +
fs/gfs2/recovery.c | 121 +
3
in the caller. For instance, a mount fails in one test case.
The correct behavior is for it to continue searching through the journal
to find the correct journal head with the highest sequence number.
Signed-off-by: Abhi Das
---
fs/gfs2/lops.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion
When the first log header in a journal happens to have a
sequence number of 0, a bug in gfs2_find_jhead() returns this
to be the jhead, instead of seeking forward and looking further
into the journal for a jhead with a higher sequence number.
Signed-off-by: Abhi Das
---
fs/gfs2/lops.c | 2 +-
1
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
Signed-off-by: Abhi Das
Signed-off-by: Andreas Gruenbacher
---
fs/gfs2/glops.c | 3 +-
fs/gfs2/log.c| 4 +-
fs/gfs2/lops.c | 212
for a more detailed explanation of how
freeze/unfreeze work.
This patch causes gfs2_unfreeze() to wait for gfs2_freeze_func() to
complete before returning to the user.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/super.c | 8 +---
2 files changed, 6 insertions(+), 3 deletions(-)
o
complete before returning to the user.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/super.c | 8 +---
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index 78c8e761b321..b15755068593 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs
This reverts commit 2a5f14f279f59143139bcd1606903f2f80a34241.
This patch causes xfstests generic/311 to fail. Reverting this for
now until we have a proper fix.
Signed-off-by: Abhi Das
---
fs/gfs2/glops.c | 1 -
fs/gfs2/log.c| 4 +-
fs/gfs2/lops.c | 190
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
This version addresses the issues Christoph pointed out w.r.t error handling
and using deprecated API.
Signed-off-by: Abhi Das
Signed-off-by: Andreas Gruenbacher
Cc: Christoph Hellwig
---
fs
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
Signed-off-by: Abhi Das
Signed-off-by: Andreas Gruenbacher
---
fs/gfs2/glops.c | 1 +
fs/gfs2/lops.c | 167 ++-
fs/gfs2/lops.h
Move and re-order the error checks and hash/crc computations into another
function __get_log_header() so it can be used in scenarios where buffer_heads
are not being used for the log header.
Signed-off-by: Abhi Das
---
fs/gfs2/recovery.c | 53
Change gfs2_log_XXX_bio family of functions so they can be used
with different bios, not just sdp->sd_log_bio.
This patch also contains some clean up suggested by Andreas.
Signed-off-by: Abhi Das
Signed-off-by: Andreas Gruenbacher
---
fs/gfs2/log.c | 4 ++--
fs/gfs2/lops.c |
Tells you how many milliseconds map_journal_extents and find_jhead
take.
Signed-off-by: Abhi Das
---
fs/gfs2/bmap.c | 8 ++--
fs/gfs2/recovery.c | 2 ++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 5f3ea07..aaf3682 100644
--- a/fs
xfstests ran to completion with this.
Abhi Das (4):
gfs2: add more timing info to journal recovery process
gfs2: changes to gfs2_log_XXX_bio
gfs2: add a helper function to get_log_header that can be used
elsewhere
gfs2: read journal in large chunks to locate the head
fs/gfs2/bmap.c
of order. This strict
ordering allows us to determine the journal head without having
to do extra reads.
A tunable allows us to configure the size of the bio_pool.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 3 +
fs/gfs2/lops.c | 359
e a little bit of testing and it seems to be holding up so far.
I plan to do more testing.
I haven't done a performance analysis vs the old method yet, so I don't
know how well this does. There might be some optimizations we can do w.r.t
repeated allocations and such.
Abhi Das (3):
gfs2:
Time the gfs2_map_journal_extents() function and the journal head
lookup and report.
Signed-off-by: Abhi Das
---
fs/gfs2/bmap.c | 8 ++--
fs/gfs2/recovery.c | 2 ++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 03128ed..dddb5a4
Move and re-order the error checks and hash/crc computations into another
function __get_log_header() so it can be used in scenarios where buffer_heads
are not being used for the log header.
Signed-off-by: Abhi Das
---
fs/gfs2/recovery.c | 53
code being different due to the updated log header structure.
Cheers!
--Abhi
Abhi Das (4):
gfs2: add timing info to map_journal_extents
gfs2: changes to gfs2_log_XXX_bio
gfs2: add a helper function to get_log_header that can be used
elsewhere
gfs2: read journal in large chunks to locat
Change gfs2_log_XXX_bio family of functions so they can be used
with read operations also.
This patch also contains some clean up and coalescing of the
above functions suggested by Andreas.
Signed-off-by: Abhi Das
Signed-off-by: Andreas Gruenbacher
---
fs/gfs2/log.c | 4 +--
fs/gfs2/lops.c
Move and re-order the error checks and hash/crc computations into another
function __get_log_header() so it can be used in scenarios where buffer_heads
are not being used for the log header.
Signed-off-by: Abhi Das
---
fs/gfs2/recovery.c | 53
Tells you how many milliseconds map_journal_extents takes.
Signed-off-by: Abhi Das
---
fs/gfs2/bmap.c | 8 ++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 03128ed..dddb5a4 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -14,6
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
This is faster in most cases when compared to the existing bisect
method which operates one block at a time.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 8 +++-
fs/gfs2/lops.c | 96
Move and re-order the error checks and hash/crc computations into another
function __get_log_header() so it can be used in scenarios where buffer_heads
are not being used for the log header.
Signed-off-by: Abhi Das
---
fs/gfs2/recovery.c | 53
Change gfs2_log_flush_bio to accept a pointer to the struct bio*
to be flushed. Change gfs2_log_alloc_bio and gfs2_log_get_bio to
take a struct gfs2_jdesc* instead of gfs2_sbd.
Signed-off-by: Abhi Das
---
fs/gfs2/log.c | 4 ++--
fs/gfs2/lops.c | 34 +++---
fs/gfs2
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
This is faster in most cases when compared to the existing bisect
method which operates one block at a time.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 8 +++-
fs/gfs2/lops.c | 122
Tells you how many milliseconds map_journal_extents takes.
Signed-off-by: Abhi Das
---
fs/gfs2/bmap.c | 8 ++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 03128ed..dddb5a4 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -14,6
This is the upstream version of the rhel7 patchset I'd
posted earlier for review.
It is slightly different in parts owing to some bits
already being present and the hash/crc computation code
being different due to the updated log header structure.
Cheers!
--Abhi
*** BLURB HERE ***
Abhi D
Add support for the GETFSLABEL ioctl in gfs2.
I tested this patch and it works as expected.
Signed-off-by: Steve Whitehouse
Tested-by: Abhi Das
---
fs/gfs2/file.c | 14 ++
1 file changed, 14 insertions(+)
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index 08369c6..6510f4e 100644
This function now maps the extents for the journal whose descriptor
is passed in as argument.
Signed-off-by: Abhi Das
---
fs/gfs2/log.h| 1 +
fs/gfs2/ops_fstype.c | 5 ++---
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/gfs2/log.h b/fs/gfs2/log.h
index 92dcbe7
Tells you how many milliseconds each stage of journal recovery
takes.
Signed-off-by: Abhi Das
---
fs/gfs2/ops_fstype.c | 5 +
fs/gfs2/recovery.c | 20 ++--
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index
Change gfs2_log_flush_bio to accept a pointer to the struct bio
to be flushed. Change gfs2_log_alloc_bio and gfs2_log_get_bio to
take a struct gfs2_jdesc instead of gfs2_sbd.
Signed-off-by: Abhi Das
---
fs/gfs2/log.c | 4 ++--
fs/gfs2/lops.c | 32 ++--
fs/gfs2
is based on the latest RHEL7 codebase as it is
easier for me to test. Upstream version shouldn't be very dissimilar and
I'll post the upstream port if it looks good.
I'll do a bit more testing and report some performance numbers shortly.
Cheers!
--Abhi
Abhi Das (5):
gfs2: allow m
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
This is faster in most cases when compared to the existing bisect
method which operates one block at a time.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 8 +++-
fs/gfs2/lops.c | 121
Use a tracepoint and a counter in gfs2_jdesc to count the number of
outstanding reads (in pages) as we read through a journal to aid
debugging.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/lops.c | 3 +++
fs/gfs2/ops_fstype.c | 1 +
fs/gfs2/trace_gfs2.h | 25
Pass the offset of the write to gfs2_write_calc_reserv so that we can
then compute a better upper bound of the number of indirect blocks
required.
Fixed comments in quota.c:do_sync() to better explain block reservation
calculation for quotas.
Signed-off-by: Andreas Gruenbacher
Acked-by: Abhi
Tells you how many milliseconds each stage of journal recovery
takes.
Signed-off-by: Abhi Das
---
fs/gfs2/ops_fstype.c | 5 +
fs/gfs2/recovery.c | 20 ++--
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index
Use bio(s) to read in the journal sequentially in large chunks and
locate the head of the journal.
This is faster in most cases when compared to the existing bisect
method which operates one block at a time.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 7 +++-
fs/gfs2/log.c | 2
This function now maps the extents for the journal whose descriptor
is passed in as argument.
Signed-off-by: Abhi Das
---
fs/gfs2/log.h| 1 +
fs/gfs2/ops_fstype.c | 5 ++---
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/gfs2/log.h b/fs/gfs2/log.h
index 92dcbe7
621233 | 554 524
Abhi Das (3):
gfs2: allow map_journal_extents() to take a journal descriptor as
argument
gfs2: add timing info for various stages of journal recovery
gfs2: read journal in large chunks to locate the head
fs/gfs2/incore.h | 7 ++-
fs/gfs2/log.c
This patch spits out the time taken by the various steps in the
journal recover process. Previously, the journal recovery time
didn't account for finding the journal head in the log which takes
up a significant portion of time.
Signed-off-by: Abhi Das
---
fs/gfs2/recovery.c
The vfs clears the I_DIRTY inode flag before calling gfs2_write_inode()
having queued any data that needed to be written to disk.
This is a good time to remove such inodes from our ordered write list
so they don't hang around for long periods of time.
Signed-off-by: Abhi Das
---
fs/gfs2/su
We iterate through the entire ordered writes list in
gfs2_ordered_write() to write out inodes. It's a good
place to try and shrink the list by throwing out inodes
that don't have any pages.
Signed-off-by: Abhi Das
---
fs/gfs2/log.c | 7 +--
1 file changed, 5 insertions(+), 2
Add a new function gfs2_ordered_shrink() that is called when
syncfs is run. This function runs through the ordered list of
inodes and removes the ones that don't have any pages in need
of writing.
Signed-off-by: Abhi Das
---
fs/gfs2/log.c | 16
fs/gfs2/log.h | 1 +
fs
Trim the list in gfs2_ordered_write() as we run through it
to write out inodes.
Also attempt to remove an inode from the list after it is
fsync'ed.
Finally, call gfs2_ordered_write() in case we were not able
to shrink the list in gfs2_ordered_shrink() in the hopes that
it will eventually cause the
Keep stats on the size of the ordered list and keep track of
where it's added to and removed from
---
fs/gfs2/bmap.c | 2 +-
fs/gfs2/file.c | 2 +-
fs/gfs2/incore.h | 12
fs/gfs2/log.c| 7 +--
fs/gfs2/log.h| 35 +--
on a subset of the
ordered list. That way, we can call it to write a percentage (or N
inodes), wait for the writes to complete and then remove those inodes
from the list.
Abhi Das (3):
gfs2: ordered list instrumentation
gfs2: try to free empty mapping inodes from ordered list
gfs2: ord
write
anything. This is a good indication that the ail might be holding
some dirty pages.
Resolves: rhbz#1389079
Signed-off-by: Abhi Das
---
fs/gfs2/aops.c | 14 +-
fs/gfs2/incore.h | 1 +
fs/gfs2/log.c| 4
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/fs
y
the buffer or return error in this case.
Signed-off-by: Abhi Das
CC: Miklos Szeredi
CC: Jens Axboe
CC: Al Viro
---
fs/splice.c | 9 -
1 file changed, 9 deletions(-)
diff --git a/fs/splice.c b/fs/splice.c
index dd9bf7e..b9899b99 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -106,15 +
i_mutex has been replaced by i_rwsem and directly accessing the
non-existent i_mutex breaks the kernel build.
Signed-off-by: Abhi Das
CC: Stephen Rothwell
CC: Al Viro
---
fs/gfs2/file.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
gfs2_file_splice_read() f_op grabs and releases the cluster-wide
inode glock to sync the inode size to the latest.
Without this, generic_file_splice_read() uses an older i_size value
and can return EOF for valid offsets in the inode.
Resolves: rhbz#1300756
Signed-off-by: Abhi Das
---
fs/gfs2
in
the metafs whose GFS2_DIF_SYSTEM flag has already been set (most likely
by a previous mkfs.gfs2)
Resolves: rhbz#1272086
Signed-off-by: Abhi Das
---
fs/gfs2/file.c | 4 ++--
fs/gfs2/inode.c | 5 +
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/file.c b/fs/gfs2
Repurpose the existing VFS FS_RESERVED_FL flag to set GFS2_DIF_SYSTEM
using the FS_IOC_SETFLAGS ioctl.
Resolves: rhbz#1272086
Signed-off-by: Abhi Das
---
fs/gfs2/file.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index 71cd138..ead0d0a 100644
--- a/fs
: Abhi Das
---
gfs2/mkfs/main_jadd.c | 6 --
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/gfs2/mkfs/main_jadd.c b/gfs2/mkfs/main_jadd.c
index de5d9c5..538d820 100644
--- a/gfs2/mkfs/main_jadd.c
+++ b/gfs2/mkfs/main_jadd.c
@@ -274,7 +274,7 @@ static void add_ir(struct jadd_opts
One-line fix to cast quota value to s64 before comparison.
By default the quantity is treated as u64.
Signed-off-by: Abhi Das
---
fs/gfs2/quota.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index dcd598a..c2607a2 100644
--- a/fs/gfs2
We cannot provide an efficient implementation due to the headers
on the data blocks, so there doesn't seem much point in having it.
Resolves: rhbz#1221331
Signed-off-by: Abhi Das
---
fs/gfs2/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/gfs2/file.c b/fs
.
This patch also adds a (s64) cast that was missing in a call to
gfs2_quota_change() in inode.c
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/inode.c | 2 +-
fs/gfs2/quota.c | 197 +---
2 files changed, 119 insertions(+), 80
. In theory,
this could get out of hand and flood the log and the filesystem
hosting the log files.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/quota.c | 15 +++
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/fs/gfs2/incore.h b
This is a follow-up set of patches to fix the issues discovered during
testing of my previous set that reworked significant portions of the
quota code. Also addresses some of the fixes Bob suggested earlier.
Abhi Das (2):
gfs2: fix quota updates on block boundaries
gfs2: limit quota log
.
This patch also adds a (s64) cast that was missing in a call to
gfs2_quota_change() in inode.c
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/inode.c | 2 +-
fs/gfs2/quota.c | 197 +---
2 files changed, 119 insertions(+), 80
. In theory,
this could get out of hand and flood the log and the filesystem
hosting the log files.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/quota.c | 13 +
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/fs/gfs2/incore.h b/fs
This is a follow-up set of patches to fix the issues discovered during
testing of my previous set that reworked significant portions of the
quota code.
Abhi Das (2):
gfs2: fix quota updates on block boundaries
gfs2: limit quota log messages
fs/gfs2/incore.h | 1 +
fs/gfs2/inode.c | 2
rgrp)... that would cause unintended consequences
and infinite loops.)
Resolves: rhbz#1211663
Signed-off-by: Abhi Das
---
fs/gfs2/rgrp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index cb27065..900e515 100644
--- a/fs/gfs2/rgrp.c
+++
approach. It checks if the i_goal of a
given inode is out of bounds of the fs. If so, we can be certain
that it is wrong and we set it to the inode metadata block. This
is a safe starting point for gfs2 to determine where to allocate
from next.
Resolves: rhbz#1186515
Signed-off-by: Abhi Das
result in miscalculations.
This patch fixes this race by moving the check for the QDF_REFRESH
flag check further out into the gfs2_quota_lock() process, i.e, in
do_glock(), under the protection of the quota glock.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/quota.c | 8
1 fi
The correct goal was only being set on files that are >= meta
height 2. This patch fixes this and sets correct goal values for
stuffed, height 1 and jdata files as well
Resolves: rhbz#1186847
Signed-off-by: Abhi Das
---
gfs2/convert/gfs2_convert.c | 18 --
1 file changed,
leave directories alone.
This patch simply skips over directories whose goal blocks fall
within the boundaries of the fs, assuming they are valid.
Resolves: rhbz#1186515
Signed-off-by: Abhi Das
---
gfs2/fsck/metawalk.c | 8
1 file changed, 8 insertions(+)
diff --git a/gfs2/fsck/metawalk.c b/gfs2
cks available to us, we can
compute how many bytes of data can be written using those blocks
instead of guessing inefficiently.
Signed-off-by: Abhi Das
---
fs/gfs2/file.c | 70 +++---
1 file changed, 47 insertions(+), 23 deletions(-)
diff --git a
nch of blocks
at once) the quota excess is non-trivial and is addressed by this
patch.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/aops.c | 6 +++---
fs/gfs2/bmap.c | 2 +-
fs/gfs2/file.c | 15 ---
fs/gfs2/incore.h | 2 +-
fs/gfs2/inode.c |
min_target' blocks allowable/available. The
assumption is that the caller is ok with just 'min_target' blocks
and will likely proceed with allocating them.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 2 ++
fs/gfs2/quota.c | 52 +++
hset. I'll do test build and pass it on
to Nate to test with.
Abhi Das (3):
gfs2: perform quota checks against allocation parameters
gfs2: allow quota_check and inplace_reserve to return available blocks
gfs2: allow fallocate to max out quotas/fs efficiently
fs/gfs2/aops.c | 6 ++---
nch of blocks
at once) the quota excess is non-trivial and is addressed by this
patch.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/aops.c | 6 +++---
fs/gfs2/bmap.c | 2 +-
fs/gfs2/file.c | 15 ---
fs/gfs2/incore.h | 2 +-
fs/gfs2/inode.c |
cks available to us, we can
compute how many bytes of data can be written using those blocks
instead of guessing inefficiently.
Signed-off-by: Abhi Das
---
fs/gfs2/file.c | 64 +-
1 file changed, 45 insertions(+), 19 deletions(-)
diff --git a
I've run some basic tests and things seem to be holding up. The failing case
in bz1174295 is fixed using this patchset. I'll do test build and pass it on
to Nate to test with.
Abhi Das (3):
gfs2: perform quota checks against allocation parameters
gfs2: allow quota_check and inpla
ed number of free blocks, 'allowed' is set
to the total number of free blocks in that rgrp. If not, -ENOSPC
is returned and 'allowed' is set to the maximum number of free
blocks that were found in any rgrp.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/quota.
lue set
as ap->target is less likely to fail.
Signed-off-by: Abhi Das
---
fs/gfs2/incore.h | 1 +
fs/gfs2/quota.c | 15 +++
fs/gfs2/rgrp.c | 8 +++-
fs/gfs2/rgrp.h | 2 +-
4 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
in
-EDQUOT/-ENOSPC and leaving some
available blocks unallocated.
Abhi Das (3):
gfs2: perform quota checks against allocation parameters
gfs2: allow quota_check and inplace_reserve to return available blocks
gfs2: allow fallocate to max out quotas/fs efficiently
fs/gfs2/aops.c | 6
t's available instead of guessing, we
can max out quotas or the filesystem efficiently.
Bear in mind that this applies only when the requested fallocate
operation would otherwise error out with -EDQUOT or -ENOSPC without
utilizing all the blocks that might still be available.
Signed-off-by:
nch of blocks
at once) the quota excess is non-trivial and is addressed by this
patch.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/aops.c | 6 +++---
fs/gfs2/bmap.c | 2 +-
fs/gfs2/file.c | 9 +
fs/gfs2/incore.h | 2 +-
fs/gfs2/inode.c | 18 ++
fs/g
parameter 'allow'
If acceptable to the caller logic, any of the quota_check functions
may be called again with the 'allow'ed blocks to try and avoid a
quota violation.
Signed-off-by: Abhi Das
---
fs/gfs2/quota.c | 24
fs/gfs2/quota.h | 20 +
uotas or the filesystem efficiently.
Bear in mind that this applies only when the requested fallocate
operation would otherwise error out with -EDQUOT or -ENOSPC without
utilizing all the blocks that might still be available.
Signed-off-by: Abhi Das
---
fs/gfs2/file.c | 24 +++---
number to the current usage and
check the sum against the quota warns and limits and fail the
operation if necessary.
Resolves: rhbz#1174295
Signed-off-by: Abhi Das
---
fs/gfs2/aops.c | 6 +++---
fs/gfs2/bmap.c | 2 +-
fs/gfs2/file.c | 8
fs/gfs2/inode.c | 14 --
fs/gf
'max_avail'.
If acceptable to the caller logic, either of these inplace resreve
functions may be called again requesting 'max_avail' blocks to
avoid the -ENOSPC error.
Signed-off-by: Abhi Das
---
fs/gfs2/rgrp.c | 13 +++--
fs/gfs2/rgrp.h | 10 +-
2 files changed,
DQUOT/-ENOSPC and leaving some
available blocks unallocated.
Abhi Das (4):
gfs2: check quota for blocks we're about to allocate
gfs2: add new quota check functions
gfs2: add new function gfs2_inpl_rsrv_ret_max_avl
gfs2: allow fallocate to max out quotas/fs efficiently
fs/gfs2/ao
This patch moves some code around and fixes some corner cases that
the previous patches did not address.
This patch also fixes some trailing whitespace and removes a test
that is no longer valid from test/fsck.at
Resolves: rhbz#1149516
Signed-off-by: Abhi Das
---
gfs2/fsck/metawalk.c | 70
dr
field is invalid and so, the fix in gfs2_inplace_reserve() as per
1) won't work in this scenario. We need to catch and fix it sooner
in the parent dir itself (gfs2_create_inode()), before it is
copied to the new inode.
Signed-off-by: Abhi Das
---
fs/gfs2/inode.c | 1 +
fs/gfs2/rgrp.c | 8
onable starting point for the
allocation logic to find the next available block.
Resolves: rhbz#1130684
Signed-off-by: Abhi Das
---
fs/gfs2/glops.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index 2ffc67d..799427b 100644
--- a/fs/gfs2/glops.c
+++ b/f
This patch adds a new buffer called 'vbuf' that is backed by a
vector of pages. It is dynamic and can be expanded as needed with
low overhead.
Signed-off-by: Abhi Das
---
fs/gfs2/util.c | 299 +
fs/gfs2/util.h | 43
and xattr information for each entry as requested and return
all the data back to the user in a container structure
(linux_xdirent) as part of the supplied user buffer.
Abhi Das (5):
fs: xstat system call VFS bits
fs: Add xgetdents system call and xreaddir file operation
gfs2: Add a dynamic
Also add linux_xdirent structure that will be the container for
dirent, stat and xattr info.
Signed-off-by: Abhi Das
---
arch/x86/syscalls/syscall_32.tbl | 1 +
arch/x86/syscalls/syscall_64.tbl | 1 +
fs/readdir.c | 42
fs/stat.c
1 - 100 of 113 matches
Mail list logo