linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Patch 1/4] Support for checking and reading block grade information in kernel
@ 2018-04-06 11:41 Sayan Ghosh
  2018-04-06 17:09 ` Randy Dunlap
  2018-04-19 15:40 ` Jan Kara
  0 siblings, 2 replies; 7+ messages in thread
From: Sayan Ghosh @ 2018-04-06 11:41 UTC (permalink / raw)
  To: linux-ext4
  Cc: linux-fsdevel, niloy ganguly, Bhattacharya, Suparna,
	Madhumita Mallick, Bharde, Madhumita

This introduces the different functions in order to get the grades as
the extended attributes while pre-allocating a new file. The grades
are stored as extended attributes while the file gets created. The
grades can be used by different user space applications as necessary.
The functions introduced are read_grade_xattr(), is_file_graded(),
read_count_xattr() which aim to read the extended attribute for grade
array and also to know whether the file is graded. The detailed
descriptions of the functions are provided as comments in the patch.
The patch is on top of Linux Kernel 4.7.2.

Signed-off-by: Sayan Ghosh <sgdgp.2014@gmail.com>
---
 fs/ext4/ext4.h    | 15 +++++++++++++++
 fs/ext4/extents.c | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index b84aa1c..b9ec0ca 100755
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -136,6 +136,18 @@ enum SHIFT_DIRECTION {
 /* Use blocks from reserved pool */
 #define EXT4_MB_USE_RESERVED        0x2000

+/* Structure of a grade - starting block number
+ * and length of contiguous blocks with same higher
+ * grade (inclusive of starting block)
+ * example : if blocks 2,3,4 are higher graded,
+ * then block_num = 2 and len = 3
+ * Only high grade information is stored by this struct.
+ */
+struct grade_struct {
+    ext4_lblk_t block_num;
+    unsigned long long len;
+};
+
 struct ext4_allocation_request {
     /* target inode for block we're allocating */
     struct inode *inode;
@@ -3186,6 +3198,9 @@ extern int ext4_check_blockref(const char *, unsigned int,
 /* extents.c */
 struct ext4_ext_path;
 struct ext4_extent;
+extern unsigned long long read_count_xattr(struct inode *inode);
+extern void read_grade_xattr(struct inode *inode,struct grade_struct
*grade_array);
+extern int is_file_graded(struct inode *inode);

 /*
  * Maximum number of logical blocks in a file; ext4_extent's ee_block is
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index d7ccb7f..de9194f 100755
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -57,6 +57,41 @@
 #define EXT4_EXT_DATA_VALID1    0x8  /* first half contains valid data */
 #define EXT4_EXT_DATA_VALID2    0x10 /* second half contains valid data */

+/*
+ * read_grade_xattr() is used to read the grade array from the
extended attribute.
+ */
+void read_grade_xattr(struct inode *inode,struct grade_struct *grade_array)
+{
+    const char *xattr_name = "grade_array";
+    int xattr_size = ext4_xattr_get(inode,
EXT4_XATTR_INDEX_USER,xattr_name, NULL,0);
+    xattr_size = ext4_xattr_get(inode,
EXT4_XATTR_INDEX_USER,xattr_name, (void *)grade_array,xattr_size);
+    return;
+}
+
+/*
+ * is_file_graded() returns whether the file has a grade information or not.
+ * It takes the inode number as a parameter.
+ */
+int is_file_graded(struct inode *inode)
+{
+    const char *xattr_name = "is_graded";
+    int is_graded = 0;
+    int xattr_size = sizeof(int);
+    xattr_size = ext4_xattr_get(inode,
EXT4_XATTR_INDEX_USER,xattr_name, (void *)&is_graded,xattr_size);
+    return is_graded;
+}
+
+/*
+ * read_count_xattr() used to get the number of the elements in the
grade array.
+ */
+unsigned long long read_count_xattr(struct inode *inode)
+{
+    const char *xattr_name = "grade_array";
+    unsigned long long xattr_size = ext4_xattr_get(inode,
EXT4_XATTR_INDEX_USER,xattr_name, NULL,0);
+    unsigned long long total = xattr_size/sizeof(struct grade_struct);
+    return total;
+}
+
 static __le32 ext4_extent_block_csum(struct inode *inode,
                      struct ext4_extent_header *eh)
 {
‌

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-05-03 12:27 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-06 11:41 [Patch 1/4] Support for checking and reading block grade information in kernel Sayan Ghosh
2018-04-06 17:09 ` Randy Dunlap
2018-04-09 17:27   ` Sayan Ghosh
2018-04-19 15:40 ` Jan Kara
2018-04-29  9:52   ` Sayan Ghosh
2018-04-29 11:02     ` Matthew Wilcox
2018-05-03 12:27     ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).