* [Ocfs2-devel] [PATCH 1/1] Ocfs2: Let ocfs2 support fiemap for symlink and fast symlink.
@ 2009-12-19 9:45 Tristan Ye
2009-12-22 0:47 ` Sunil Mushran
0 siblings, 1 reply; 4+ messages in thread
From: Tristan Ye @ 2009-12-19 9:45 UTC (permalink / raw)
To: ocfs2-devel
For fast symlink, it can be treated the same as inlined files since
the data extent we want to return of both case all were stored in
metadata block. For symlink, it can be simply treated the same as we
did for regular files.
Signed-off-by: Tristan Ye <tristan.ye@oracle.com>
---
fs/ocfs2/extent_map.c | 15 ++++++++++++---
fs/ocfs2/symlink.c | 2 ++
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c
index 843db64..3b5e435 100644
--- a/fs/ocfs2/extent_map.c
+++ b/fs/ocfs2/extent_map.c
@@ -37,6 +37,7 @@
#include "extent_map.h"
#include "inode.h"
#include "super.h"
+#include "symlink.h"
#include "buffer_head_io.h"
@@ -715,11 +716,18 @@ static int ocfs2_fiemap_inline(struct inode *inode, struct buffer_head *di_bh,
struct ocfs2_inode_info *oi = OCFS2_I(inode);
di = (struct ocfs2_dinode *)di_bh->b_data;
- id_count = le16_to_cpu(di->id2.i_data.id_count);
+ if (ocfs2_inode_is_fast_symlink(inode))
+ id_count = ocfs2_fast_symlink_chars(inode->i_sb);
+ else
+ id_count = le16_to_cpu(di->id2.i_data.id_count);
if (map_start < id_count) {
phys = oi->ip_blkno << inode->i_sb->s_blocksize_bits;
- phys += offsetof(struct ocfs2_dinode, id2.i_data.id_data);
+ if (ocfs2_inode_is_fast_symlink(inode))
+ phys += offsetof(struct ocfs2_dinode, id2.i_symlink);
+ else
+ phys += offsetof(struct ocfs2_dinode,
+ id2.i_data.id_data);
ret = fiemap_fill_next_extent(fieinfo, 0, phys, id_count,
flags);
@@ -758,7 +766,8 @@ int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
/*
* Handle inline-data separately.
*/
- if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
+ if ((OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) ||
+ ocfs2_inode_is_fast_symlink(inode)) {
ret = ocfs2_fiemap_inline(inode, di_bh, fieinfo, map_start);
goto out_unlock;
}
diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c
index e342103..49b133c 100644
--- a/fs/ocfs2/symlink.c
+++ b/fs/ocfs2/symlink.c
@@ -163,6 +163,7 @@ const struct inode_operations ocfs2_symlink_inode_operations = {
.getxattr = generic_getxattr,
.listxattr = ocfs2_listxattr,
.removexattr = generic_removexattr,
+ .fiemap = ocfs2_fiemap,
};
const struct inode_operations ocfs2_fast_symlink_inode_operations = {
.readlink = ocfs2_readlink,
@@ -174,4 +175,5 @@ const struct inode_operations ocfs2_fast_symlink_inode_operations = {
.getxattr = generic_getxattr,
.listxattr = ocfs2_listxattr,
.removexattr = generic_removexattr,
+ .fiemap = ocfs2_fiemap,
};
--
1.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Ocfs2-devel] [PATCH 1/1] Ocfs2: Let ocfs2 support fiemap for symlink and fast symlink.
2009-12-19 9:45 [Ocfs2-devel] [PATCH 1/1] Ocfs2: Let ocfs2 support fiemap for symlink and fast symlink Tristan Ye
@ 2009-12-22 0:47 ` Sunil Mushran
2009-12-22 1:18 ` tristan
0 siblings, 1 reply; 4+ messages in thread
From: Sunil Mushran @ 2009-12-22 0:47 UTC (permalink / raw)
To: ocfs2-devel
Can you add a comment atop ocfs2_fiemap_inline() saying that
this function handles fiemap for both inline data and fast symlink.
Just want to be clear about this considering the function name
suggests it is inline-data only.
Also, change the comment in ocfs2_fiemap()... "Handle inline-data and
fast symlink separately".
You can add my ack to your next post with the changes.
Acked-by: Sunil Mushran <sunil.mushran@oracle.com>
Tristan Ye wrote:
> For fast symlink, it can be treated the same as inlined files since
> the data extent we want to return of both case all were stored in
> metadata block. For symlink, it can be simply treated the same as we
> did for regular files.
>
> Signed-off-by: Tristan Ye <tristan.ye@oracle.com>
> ---
> fs/ocfs2/extent_map.c | 15 ++++++++++++---
> fs/ocfs2/symlink.c | 2 ++
> 2 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c
> index 843db64..3b5e435 100644
> --- a/fs/ocfs2/extent_map.c
> +++ b/fs/ocfs2/extent_map.c
> @@ -37,6 +37,7 @@
> #include "extent_map.h"
> #include "inode.h"
> #include "super.h"
> +#include "symlink.h"
>
> #include "buffer_head_io.h"
>
> @@ -715,11 +716,18 @@ static int ocfs2_fiemap_inline(struct inode *inode, struct buffer_head *di_bh,
> struct ocfs2_inode_info *oi = OCFS2_I(inode);
>
> di = (struct ocfs2_dinode *)di_bh->b_data;
> - id_count = le16_to_cpu(di->id2.i_data.id_count);
> + if (ocfs2_inode_is_fast_symlink(inode))
> + id_count = ocfs2_fast_symlink_chars(inode->i_sb);
> + else
> + id_count = le16_to_cpu(di->id2.i_data.id_count);
>
> if (map_start < id_count) {
> phys = oi->ip_blkno << inode->i_sb->s_blocksize_bits;
> - phys += offsetof(struct ocfs2_dinode, id2.i_data.id_data);
> + if (ocfs2_inode_is_fast_symlink(inode))
> + phys += offsetof(struct ocfs2_dinode, id2.i_symlink);
> + else
> + phys += offsetof(struct ocfs2_dinode,
> + id2.i_data.id_data);
>
> ret = fiemap_fill_next_extent(fieinfo, 0, phys, id_count,
> flags);
> @@ -758,7 +766,8 @@ int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
> /*
> * Handle inline-data separately.
> */
> - if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
> + if ((OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) ||
> + ocfs2_inode_is_fast_symlink(inode)) {
> ret = ocfs2_fiemap_inline(inode, di_bh, fieinfo, map_start);
> goto out_unlock;
> }
> diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c
> index e342103..49b133c 100644
> --- a/fs/ocfs2/symlink.c
> +++ b/fs/ocfs2/symlink.c
> @@ -163,6 +163,7 @@ const struct inode_operations ocfs2_symlink_inode_operations = {
> .getxattr = generic_getxattr,
> .listxattr = ocfs2_listxattr,
> .removexattr = generic_removexattr,
> + .fiemap = ocfs2_fiemap,
> };
> const struct inode_operations ocfs2_fast_symlink_inode_operations = {
> .readlink = ocfs2_readlink,
> @@ -174,4 +175,5 @@ const struct inode_operations ocfs2_fast_symlink_inode_operations = {
> .getxattr = generic_getxattr,
> .listxattr = ocfs2_listxattr,
> .removexattr = generic_removexattr,
> + .fiemap = ocfs2_fiemap,
> };
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Ocfs2-devel] [PATCH 1/1] Ocfs2: Let ocfs2 support fiemap for symlink and fast symlink.
@ 2009-12-22 1:11 Tristan Ye
0 siblings, 0 replies; 4+ messages in thread
From: Tristan Ye @ 2009-12-22 1:11 UTC (permalink / raw)
To: ocfs2-devel
For fast symlink, it can be treated the same as inlined files since
the data extent we want to return of both case all were stored in
metadata block. For symlink, it can be simply treated the same as we
did for regular files.
Signed-off-by: Tristan Ye <tristan.ye@oracle.com>
Acked-by: Sunil Mushran <sunil.mushran@oracle.com>
---
fs/ocfs2/extent_map.c | 23 +++++++++++++++++++----
fs/ocfs2/symlink.c | 2 ++
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c
index 843db64..b925783 100644
--- a/fs/ocfs2/extent_map.c
+++ b/fs/ocfs2/extent_map.c
@@ -37,6 +37,7 @@
#include "extent_map.h"
#include "inode.h"
#include "super.h"
+#include "symlink.h"
#include "buffer_head_io.h"
@@ -703,6 +704,12 @@ out:
return ret;
}
+/*
+ * The ocfs2_fiemap_inline() may be a little bit misleading, since
+ * it not only handles the fiemap for inlined files, but also deals
+ * with the fast symlink, cause they have no difference for extent
+ * mapping per se.
+ */
static int ocfs2_fiemap_inline(struct inode *inode, struct buffer_head *di_bh,
struct fiemap_extent_info *fieinfo,
u64 map_start)
@@ -715,11 +722,18 @@ static int ocfs2_fiemap_inline(struct inode *inode, struct buffer_head *di_bh,
struct ocfs2_inode_info *oi = OCFS2_I(inode);
di = (struct ocfs2_dinode *)di_bh->b_data;
- id_count = le16_to_cpu(di->id2.i_data.id_count);
+ if (ocfs2_inode_is_fast_symlink(inode))
+ id_count = ocfs2_fast_symlink_chars(inode->i_sb);
+ else
+ id_count = le16_to_cpu(di->id2.i_data.id_count);
if (map_start < id_count) {
phys = oi->ip_blkno << inode->i_sb->s_blocksize_bits;
- phys += offsetof(struct ocfs2_dinode, id2.i_data.id_data);
+ if (ocfs2_inode_is_fast_symlink(inode))
+ phys += offsetof(struct ocfs2_dinode, id2.i_symlink);
+ else
+ phys += offsetof(struct ocfs2_dinode,
+ id2.i_data.id_data);
ret = fiemap_fill_next_extent(fieinfo, 0, phys, id_count,
flags);
@@ -756,9 +770,10 @@ int ocfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
down_read(&OCFS2_I(inode)->ip_alloc_sem);
/*
- * Handle inline-data separately.
+ * Handle inline-data and fast symlink separately.
*/
- if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
+ if ((OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) ||
+ ocfs2_inode_is_fast_symlink(inode)) {
ret = ocfs2_fiemap_inline(inode, di_bh, fieinfo, map_start);
goto out_unlock;
}
diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c
index e342103..49b133c 100644
--- a/fs/ocfs2/symlink.c
+++ b/fs/ocfs2/symlink.c
@@ -163,6 +163,7 @@ const struct inode_operations ocfs2_symlink_inode_operations = {
.getxattr = generic_getxattr,
.listxattr = ocfs2_listxattr,
.removexattr = generic_removexattr,
+ .fiemap = ocfs2_fiemap,
};
const struct inode_operations ocfs2_fast_symlink_inode_operations = {
.readlink = ocfs2_readlink,
@@ -174,4 +175,5 @@ const struct inode_operations ocfs2_fast_symlink_inode_operations = {
.getxattr = generic_getxattr,
.listxattr = ocfs2_listxattr,
.removexattr = generic_removexattr,
+ .fiemap = ocfs2_fiemap,
};
--
1.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Ocfs2-devel] [PATCH 1/1] Ocfs2: Let ocfs2 support fiemap for symlink and fast symlink.
2009-12-22 0:47 ` Sunil Mushran
@ 2009-12-22 1:18 ` tristan
0 siblings, 0 replies; 4+ messages in thread
From: tristan @ 2009-12-22 1:18 UTC (permalink / raw)
To: ocfs2-devel
Sunil Mushran wrote:
> Can you add a comment atop ocfs2_fiemap_inline() saying that
> this function handles fiemap for both inline data and fast symlink.
>
> Just want to be clear about this considering the function name
> suggests it is inline-data only.
>
> Also, change the comment in ocfs2_fiemap()... "Handle inline-data and
> fast symlink separately".
It makes sense:)
>
> You can add my ack to your next post with the changes.
>
> Acked-by: Sunil Mushran <sunil.mushran@oracle.com>
>
> Tristan Ye wrote:
>> For fast symlink, it can be treated the same as inlined files since
>> the data extent we want to return of both case all were stored in
>> metadata block. For symlink, it can be simply treated the same as we
>> did for regular files.
>>
>> Signed-off-by: Tristan Ye <tristan.ye@oracle.com>
>> ---
>> fs/ocfs2/extent_map.c | 15 ++++++++++++---
>> fs/ocfs2/symlink.c | 2 ++
>> 2 files changed, 14 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/ocfs2/extent_map.c b/fs/ocfs2/extent_map.c
>> index 843db64..3b5e435 100644
>> --- a/fs/ocfs2/extent_map.c
>> +++ b/fs/ocfs2/extent_map.c
>> @@ -37,6 +37,7 @@
>> #include "extent_map.h"
>> #include "inode.h"
>> #include "super.h"
>> +#include "symlink.h"
>>
>> #include "buffer_head_io.h"
>>
>> @@ -715,11 +716,18 @@ static int ocfs2_fiemap_inline(struct inode
>> *inode, struct buffer_head *di_bh,
>> struct ocfs2_inode_info *oi = OCFS2_I(inode);
>>
>> di = (struct ocfs2_dinode *)di_bh->b_data;
>> - id_count = le16_to_cpu(di->id2.i_data.id_count);
>> + if (ocfs2_inode_is_fast_symlink(inode))
>> + id_count = ocfs2_fast_symlink_chars(inode->i_sb);
>> + else
>> + id_count = le16_to_cpu(di->id2.i_data.id_count);
>>
>> if (map_start < id_count) {
>> phys = oi->ip_blkno << inode->i_sb->s_blocksize_bits;
>> - phys += offsetof(struct ocfs2_dinode, id2.i_data.id_data);
>> + if (ocfs2_inode_is_fast_symlink(inode))
>> + phys += offsetof(struct ocfs2_dinode, id2.i_symlink);
>> + else
>> + phys += offsetof(struct ocfs2_dinode,
>> + id2.i_data.id_data);
>>
>> ret = fiemap_fill_next_extent(fieinfo, 0, phys, id_count,
>> flags);
>> @@ -758,7 +766,8 @@ int ocfs2_fiemap(struct inode *inode, struct
>> fiemap_extent_info *fieinfo,
>> /*
>> * Handle inline-data separately.
>> */
>> - if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
>> + if ((OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) ||
>> + ocfs2_inode_is_fast_symlink(inode)) {
>> ret = ocfs2_fiemap_inline(inode, di_bh, fieinfo, map_start);
>> goto out_unlock;
>> }
>> diff --git a/fs/ocfs2/symlink.c b/fs/ocfs2/symlink.c
>> index e342103..49b133c 100644
>> --- a/fs/ocfs2/symlink.c
>> +++ b/fs/ocfs2/symlink.c
>> @@ -163,6 +163,7 @@ const struct inode_operations
>> ocfs2_symlink_inode_operations = {
>> .getxattr = generic_getxattr,
>> .listxattr = ocfs2_listxattr,
>> .removexattr = generic_removexattr,
>> + .fiemap = ocfs2_fiemap,
>> };
>> const struct inode_operations ocfs2_fast_symlink_inode_operations = {
>> .readlink = ocfs2_readlink,
>> @@ -174,4 +175,5 @@ const struct inode_operations
>> ocfs2_fast_symlink_inode_operations = {
>> .getxattr = generic_getxattr,
>> .listxattr = ocfs2_listxattr,
>> .removexattr = generic_removexattr,
>> + .fiemap = ocfs2_fiemap,
>> };
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-12-22 1:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-19 9:45 [Ocfs2-devel] [PATCH 1/1] Ocfs2: Let ocfs2 support fiemap for symlink and fast symlink Tristan Ye
2009-12-22 0:47 ` Sunil Mushran
2009-12-22 1:18 ` tristan
-- strict thread matches above, loose matches on Subject: below --
2009-12-22 1:11 Tristan Ye
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.