Dan Carpenter
2012-Jul-30 08:10 UTC
[patch] Btrfs: fix some endian bugs handling the root times
"trans->transid" is cpu endian but we want to store the data as little endian. "item->ctime.nsec" is only 32 bits, not 64. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> --- Applies to linux-next. diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 43f0012..a1fbca0 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -424,7 +424,7 @@ static noinline int create_subvol(struct btrfs_root *root, uuid_le_gen(&new_uuid); memcpy(root_item.uuid, new_uuid.b, BTRFS_UUID_SIZE); root_item.otime.sec = cpu_to_le64(cur_time.tv_sec); - root_item.otime.nsec = cpu_to_le64(cur_time.tv_nsec); + root_item.otime.nsec = cpu_to_le32(cur_time.tv_nsec); root_item.ctime = root_item.otime; btrfs_set_root_ctransid(&root_item, trans->transid); btrfs_set_root_otransid(&root_item, trans->transid); diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 7ac7cdc..7208ada 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1061,7 +1061,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, memcpy(new_root_item->parent_uuid, root->root_item.uuid, BTRFS_UUID_SIZE); new_root_item->otime.sec = cpu_to_le64(cur_time.tv_sec); - new_root_item->otime.nsec = cpu_to_le64(cur_time.tv_nsec); + new_root_item->otime.nsec = cpu_to_le32(cur_time.tv_nsec); btrfs_set_root_otransid(new_root_item, trans->transid); memset(&new_root_item->stime, 0, sizeof(new_root_item->stime)); memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime)); diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index 6bb465c..10d8e4d 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -544,8 +544,8 @@ void btrfs_update_root_times(struct btrfs_trans_handle *trans, struct timespec ct = CURRENT_TIME; spin_lock(&root->root_times_lock); - item->ctransid = trans->transid; + item->ctransid = cpu_to_le64(trans->transid); item->ctime.sec = cpu_to_le64(ct.tv_sec); - item->ctime.nsec = cpu_to_le64(ct.tv_nsec); + item->ctime.nsec = cpu_to_le32(ct.tv_nsec); spin_unlock(&root->root_times_lock); } -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Alexander Block
2012-Aug-01 12:17 UTC
Re: [patch] Btrfs: fix some endian bugs handling the root times
On Mon, Jul 30, 2012 at 10:10 AM, Dan Carpenter <dan.carpenter@oracle.com> wrote:> "trans->transid" is cpu endian but we want to store the data as little > endian. "item->ctime.nsec" is only 32 bits, not 64. > > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> > --- > Applies to linux-next. > > diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c > index 43f0012..a1fbca0 100644 > --- a/fs/btrfs/ioctl.c > +++ b/fs/btrfs/ioctl.c > @@ -424,7 +424,7 @@ static noinline int create_subvol(struct btrfs_root *root, > uuid_le_gen(&new_uuid); > memcpy(root_item.uuid, new_uuid.b, BTRFS_UUID_SIZE); > root_item.otime.sec = cpu_to_le64(cur_time.tv_sec); > - root_item.otime.nsec = cpu_to_le64(cur_time.tv_nsec); > + root_item.otime.nsec = cpu_to_le32(cur_time.tv_nsec); > root_item.ctime = root_item.otime; > btrfs_set_root_ctransid(&root_item, trans->transid); > btrfs_set_root_otransid(&root_item, trans->transid); > diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c > index 7ac7cdc..7208ada 100644 > --- a/fs/btrfs/transaction.c > +++ b/fs/btrfs/transaction.c > @@ -1061,7 +1061,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, > memcpy(new_root_item->parent_uuid, root->root_item.uuid, > BTRFS_UUID_SIZE); > new_root_item->otime.sec = cpu_to_le64(cur_time.tv_sec); > - new_root_item->otime.nsec = cpu_to_le64(cur_time.tv_nsec); > + new_root_item->otime.nsec = cpu_to_le32(cur_time.tv_nsec); > btrfs_set_root_otransid(new_root_item, trans->transid); > memset(&new_root_item->stime, 0, sizeof(new_root_item->stime)); > memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime)); > diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c > index 6bb465c..10d8e4d 100644 > --- a/fs/btrfs/root-tree.c > +++ b/fs/btrfs/root-tree.c > @@ -544,8 +544,8 @@ void btrfs_update_root_times(struct btrfs_trans_handle *trans, > struct timespec ct = CURRENT_TIME; > > spin_lock(&root->root_times_lock); > - item->ctransid = trans->transid; > + item->ctransid = cpu_to_le64(trans->transid); > item->ctime.sec = cpu_to_le64(ct.tv_sec); > - item->ctime.nsec = cpu_to_le64(ct.tv_nsec); > + item->ctime.nsec = cpu_to_le32(ct.tv_nsec); > spin_unlock(&root->root_times_lock); > }Thanks. I will include this patch in the next send/receive pull request. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html