Skip to content

Commit

Permalink
exofs: Move exofs specific osd operations out of ios.c
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Boaz Harrosh committed Aug 7, 2011
1 parent e1042ba commit 85e44df
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 73 deletions.
17 changes: 11 additions & 6 deletions fs/exofs/exofs.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,14 @@ static inline struct exofs_i_info *exofs_i(struct inode *inode)
*/
unsigned exofs_layout_od_id(struct exofs_layout *layout,
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
*/
Expand All @@ -215,11 +223,6 @@ unsigned exofs_layout_od_id(struct exofs_layout *layout,
*************************/

/* 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,
u64 offset, u64 length, struct exofs_io_state **ios);
int exofs_get_io_state(struct exofs_layout *layout,
Expand All @@ -234,6 +237,7 @@ int exofs_sbi_write(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);
extern const struct osd_attr g_attr_logical_length;

int exofs_oi_truncate(struct exofs_i_info *oi, u64 new_len);
static inline int exofs_oi_write(struct exofs_i_info *oi,
Expand Down Expand Up @@ -278,6 +282,8 @@ int exofs_set_link(struct inode *, struct exofs_dir_entry *, struct page *,
struct inode *);

/* 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);

/*********************
Expand All @@ -292,7 +298,6 @@ extern const struct file_operations exofs_file_operations;

/* inode.c */
extern const struct address_space_operations exofs_aops;
extern const struct osd_attr g_attr_logical_length;

/* namei.c */
extern const struct inode_operations exofs_dir_inode_operations;
Expand Down
3 changes: 0 additions & 3 deletions fs/exofs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

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)
{
struct exofs_i_info *oi = exofs_i(inode);
Expand Down
64 changes: 3 additions & 61 deletions fs/exofs/ios.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,44 +31,6 @@
#define EXOFS_DBGMSG2(M...) do {} while (0)
/* #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,
u64 offset, u64 length, struct exofs_io_state **pios)
{
Expand Down Expand Up @@ -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)
{
struct completion *waiting = p;
Expand Down Expand Up @@ -844,3 +783,6 @@ int exofs_oi_truncate(struct exofs_i_info *oi, u64 size)
exofs_put_io_state(ios);
return ret;
}

const struct osd_attr g_attr_logical_length = ATTR_DEF(
OSD_APAGE_OBJECT_INFORMATION, OSD_ATTR_OI_LOGICAL_LENGTH, 8);
68 changes: 65 additions & 3 deletions fs/exofs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@

#include "exofs.h"

#define EXOFS_DBGMSG2(M...) do {} while (0)

/******************************************************************************
* MOUNT OPTIONS
*****************************************************************************/
Expand Down Expand Up @@ -208,10 +210,64 @@ static void destroy_inodecache(void)
}

/******************************************************************************
* SUPERBLOCK FUNCTIONS
* Some osd helpers
*****************************************************************************/
static const struct super_operations exofs_sops;
static const struct export_operations exofs_export_ops;
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);
}

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(
EXOFS_APAGE_SB_DATA,
Expand Down Expand Up @@ -308,6 +364,12 @@ int exofs_sbi_write_stats(struct exofs_sb_info *sbi)
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
*/
Expand Down

0 comments on commit 85e44df

Please sign in to comment.