mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-09-22 12:42:50 +00:00
exofs: Move exofs specific osd operations out of ios.c
ios.c will be moving to an external library, for use by the objects-layout-driver. Remove from it some exofs specific functions. Also g_attr_logical_length is used both by inode.c and ios.c move definition to the later, to keep it independent Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
This commit is contained in:
parent
e1042ba099
commit
85e44df474
4 changed files with 79 additions and 73 deletions
|
@ -205,6 +205,14 @@ static inline struct exofs_i_info *exofs_i(struct inode *inode)
|
||||||
*/
|
*/
|
||||||
unsigned exofs_layout_od_id(struct exofs_layout *layout,
|
unsigned exofs_layout_od_id(struct exofs_layout *layout,
|
||||||
osd_id obj_no, unsigned layout_index);
|
osd_id obj_no, unsigned layout_index);
|
||||||
|
|
||||||
|
static inline struct osd_dev *exofs_ios_od(struct exofs_io_state *ios,
|
||||||
|
unsigned layout_index)
|
||||||
|
{
|
||||||
|
return ios->layout->s_ods[
|
||||||
|
exofs_layout_od_id(ios->layout, ios->obj.id, layout_index)];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maximum count of links to a file
|
* Maximum count of links to a file
|
||||||
*/
|
*/
|
||||||
|
@ -215,11 +223,6 @@ unsigned exofs_layout_od_id(struct exofs_layout *layout,
|
||||||
*************************/
|
*************************/
|
||||||
|
|
||||||
/* ios.c */
|
/* ios.c */
|
||||||
void exofs_make_credential(u8 cred_a[OSD_CAP_LEN],
|
|
||||||
const struct osd_obj_id *obj);
|
|
||||||
int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj,
|
|
||||||
u64 offset, void *p, unsigned length);
|
|
||||||
|
|
||||||
int exofs_get_rw_state(struct exofs_layout *layout, bool is_reading,
|
int exofs_get_rw_state(struct exofs_layout *layout, bool is_reading,
|
||||||
u64 offset, u64 length, struct exofs_io_state **ios);
|
u64 offset, u64 length, struct exofs_io_state **ios);
|
||||||
int exofs_get_io_state(struct exofs_layout *layout,
|
int exofs_get_io_state(struct exofs_layout *layout,
|
||||||
|
@ -234,6 +237,7 @@ int exofs_sbi_write(struct exofs_io_state *ios);
|
||||||
int exofs_sbi_read(struct exofs_io_state *ios);
|
int exofs_sbi_read(struct exofs_io_state *ios);
|
||||||
|
|
||||||
int extract_attr_from_ios(struct exofs_io_state *ios, struct osd_attr *attr);
|
int extract_attr_from_ios(struct exofs_io_state *ios, struct osd_attr *attr);
|
||||||
|
extern const struct osd_attr g_attr_logical_length;
|
||||||
|
|
||||||
int exofs_oi_truncate(struct exofs_i_info *oi, u64 new_len);
|
int exofs_oi_truncate(struct exofs_i_info *oi, u64 new_len);
|
||||||
static inline int exofs_oi_write(struct exofs_i_info *oi,
|
static inline int exofs_oi_write(struct exofs_i_info *oi,
|
||||||
|
@ -278,6 +282,8 @@ int exofs_set_link(struct inode *, struct exofs_dir_entry *, struct page *,
|
||||||
struct inode *);
|
struct inode *);
|
||||||
|
|
||||||
/* super.c */
|
/* super.c */
|
||||||
|
void exofs_make_credential(u8 cred_a[OSD_CAP_LEN],
|
||||||
|
const struct osd_obj_id *obj);
|
||||||
int exofs_sbi_write_stats(struct exofs_sb_info *sbi);
|
int exofs_sbi_write_stats(struct exofs_sb_info *sbi);
|
||||||
|
|
||||||
/*********************
|
/*********************
|
||||||
|
@ -292,7 +298,6 @@ extern const struct file_operations exofs_file_operations;
|
||||||
|
|
||||||
/* inode.c */
|
/* inode.c */
|
||||||
extern const struct address_space_operations exofs_aops;
|
extern const struct address_space_operations exofs_aops;
|
||||||
extern const struct osd_attr g_attr_logical_length;
|
|
||||||
|
|
||||||
/* namei.c */
|
/* namei.c */
|
||||||
extern const struct inode_operations exofs_dir_inode_operations;
|
extern const struct inode_operations exofs_dir_inode_operations;
|
||||||
|
|
|
@ -852,9 +852,6 @@ static inline int exofs_inode_is_fast_symlink(struct inode *inode)
|
||||||
return S_ISLNK(inode->i_mode) && (oi->i_data[0] != 0);
|
return S_ISLNK(inode->i_mode) && (oi->i_data[0] != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct osd_attr g_attr_logical_length = ATTR_DEF(
|
|
||||||
OSD_APAGE_OBJECT_INFORMATION, OSD_ATTR_OI_LOGICAL_LENGTH, 8);
|
|
||||||
|
|
||||||
static int _do_truncate(struct inode *inode, loff_t newsize)
|
static int _do_truncate(struct inode *inode, loff_t newsize)
|
||||||
{
|
{
|
||||||
struct exofs_i_info *oi = exofs_i(inode);
|
struct exofs_i_info *oi = exofs_i(inode);
|
||||||
|
|
|
@ -31,44 +31,6 @@
|
||||||
#define EXOFS_DBGMSG2(M...) do {} while (0)
|
#define EXOFS_DBGMSG2(M...) do {} while (0)
|
||||||
/* #define EXOFS_DBGMSG2 EXOFS_DBGMSG */
|
/* #define EXOFS_DBGMSG2 EXOFS_DBGMSG */
|
||||||
|
|
||||||
void exofs_make_credential(u8 cred_a[OSD_CAP_LEN], const struct osd_obj_id *obj)
|
|
||||||
{
|
|
||||||
osd_sec_init_nosec_doall_caps(cred_a, obj, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj,
|
|
||||||
u64 offset, void *p, unsigned length)
|
|
||||||
{
|
|
||||||
struct osd_request *or = osd_start_request(od, GFP_KERNEL);
|
|
||||||
/* struct osd_sense_info osi = {.key = 0};*/
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (unlikely(!or)) {
|
|
||||||
EXOFS_DBGMSG("%s: osd_start_request failed.\n", __func__);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
ret = osd_req_read_kern(or, obj, offset, p, length);
|
|
||||||
if (unlikely(ret)) {
|
|
||||||
EXOFS_DBGMSG("%s: osd_req_read_kern failed.\n", __func__);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = osd_finalize_request(or, 0, cred, NULL);
|
|
||||||
if (unlikely(ret)) {
|
|
||||||
EXOFS_DBGMSG("Failed to osd_finalize_request() => %d\n", ret);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = osd_execute_request(or);
|
|
||||||
if (unlikely(ret))
|
|
||||||
EXOFS_DBGMSG("osd_execute_request() => %d\n", ret);
|
|
||||||
/* osd_req_decode_sense(or, ret); */
|
|
||||||
|
|
||||||
out:
|
|
||||||
osd_end_request(or);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int exofs_get_rw_state(struct exofs_layout *layout, bool is_reading,
|
int exofs_get_rw_state(struct exofs_layout *layout, bool is_reading,
|
||||||
u64 offset, u64 length, struct exofs_io_state **pios)
|
u64 offset, u64 length, struct exofs_io_state **pios)
|
||||||
{
|
{
|
||||||
|
@ -119,29 +81,6 @@ void exofs_put_io_state(struct exofs_io_state *ios)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned exofs_layout_od_id(struct exofs_layout *layout,
|
|
||||||
osd_id obj_no, unsigned layout_index)
|
|
||||||
{
|
|
||||||
/* switch (layout->lay_func) {
|
|
||||||
case LAYOUT_MOVING_WINDOW:
|
|
||||||
{*/
|
|
||||||
unsigned dev_mod = obj_no;
|
|
||||||
|
|
||||||
return (layout_index + dev_mod * layout->mirrors_p1) %
|
|
||||||
layout->s_numdevs;
|
|
||||||
/* }
|
|
||||||
case LAYOUT_FUNC_IMPLICT:
|
|
||||||
return layout->devs[layout_index];
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct osd_dev *exofs_ios_od(struct exofs_io_state *ios,
|
|
||||||
unsigned layout_index)
|
|
||||||
{
|
|
||||||
return ios->layout->s_ods[
|
|
||||||
exofs_layout_od_id(ios->layout, ios->obj.id, layout_index)];
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _sync_done(struct exofs_io_state *ios, void *p)
|
static void _sync_done(struct exofs_io_state *ios, void *p)
|
||||||
{
|
{
|
||||||
struct completion *waiting = p;
|
struct completion *waiting = p;
|
||||||
|
@ -844,3 +783,6 @@ out:
|
||||||
exofs_put_io_state(ios);
|
exofs_put_io_state(ios);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct osd_attr g_attr_logical_length = ATTR_DEF(
|
||||||
|
OSD_APAGE_OBJECT_INFORMATION, OSD_ATTR_OI_LOGICAL_LENGTH, 8);
|
||||||
|
|
|
@ -40,6 +40,8 @@
|
||||||
|
|
||||||
#include "exofs.h"
|
#include "exofs.h"
|
||||||
|
|
||||||
|
#define EXOFS_DBGMSG2(M...) do {} while (0)
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* MOUNT OPTIONS
|
* MOUNT OPTIONS
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
@ -208,10 +210,64 @@ static void destroy_inodecache(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* SUPERBLOCK FUNCTIONS
|
* Some osd helpers
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
static const struct super_operations exofs_sops;
|
void exofs_make_credential(u8 cred_a[OSD_CAP_LEN], const struct osd_obj_id *obj)
|
||||||
static const struct export_operations exofs_export_ops;
|
{
|
||||||
|
osd_sec_init_nosec_doall_caps(cred_a, obj, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int exofs_read_kern(struct osd_dev *od, u8 *cred, struct osd_obj_id *obj,
|
||||||
|
u64 offset, void *p, unsigned length)
|
||||||
|
{
|
||||||
|
struct osd_request *or = osd_start_request(od, GFP_KERNEL);
|
||||||
|
/* struct osd_sense_info osi = {.key = 0};*/
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (unlikely(!or)) {
|
||||||
|
EXOFS_DBGMSG("%s: osd_start_request failed.\n", __func__);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
ret = osd_req_read_kern(or, obj, offset, p, length);
|
||||||
|
if (unlikely(ret)) {
|
||||||
|
EXOFS_DBGMSG("%s: osd_req_read_kern failed.\n", __func__);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = osd_finalize_request(or, 0, cred, NULL);
|
||||||
|
if (unlikely(ret)) {
|
||||||
|
EXOFS_DBGMSG("Failed to osd_finalize_request() => %d\n", ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = osd_execute_request(or);
|
||||||
|
if (unlikely(ret))
|
||||||
|
EXOFS_DBGMSG("osd_execute_request() => %d\n", ret);
|
||||||
|
/* osd_req_decode_sense(or, ret); */
|
||||||
|
|
||||||
|
out:
|
||||||
|
osd_end_request(or);
|
||||||
|
EXOFS_DBGMSG2("read_kern(0x%llx) offset=0x%llx "
|
||||||
|
"length=0x%llx dev=%p ret=>%d\n",
|
||||||
|
_LLU(obj->id), _LLU(offset), _LLU(length), od, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned exofs_layout_od_id(struct exofs_layout *layout,
|
||||||
|
osd_id obj_no, unsigned layout_index)
|
||||||
|
{
|
||||||
|
/* switch (layout->lay_func) {
|
||||||
|
case LAYOUT_MOVING_WINDOW:
|
||||||
|
{*/
|
||||||
|
unsigned dev_mod = obj_no;
|
||||||
|
|
||||||
|
return (layout_index + dev_mod * layout->mirrors_p1) %
|
||||||
|
layout->s_numdevs;
|
||||||
|
/* }
|
||||||
|
case LAYOUT_FUNC_IMPLICT:
|
||||||
|
return layout->devs[layout_index];
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
static const struct osd_attr g_attr_sb_stats = ATTR_DEF(
|
static const struct osd_attr g_attr_sb_stats = ATTR_DEF(
|
||||||
EXOFS_APAGE_SB_DATA,
|
EXOFS_APAGE_SB_DATA,
|
||||||
|
@ -308,6 +364,12 @@ int exofs_sbi_write_stats(struct exofs_sb_info *sbi)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* SUPERBLOCK FUNCTIONS
|
||||||
|
*****************************************************************************/
|
||||||
|
static const struct super_operations exofs_sops;
|
||||||
|
static const struct export_operations exofs_export_ops;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write the superblock to the OSD
|
* Write the superblock to the OSD
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue