All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wade Cline <clinew@linux.vnet.ibm.com>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: "cmm@linux.vnet.ibm.com" <cmm@linux.vnet.ibm.com>,
	linux-btrfs@vger.kernel.org
Subject: Re: [e2fsprogs] ext2_dir_entry To ext2_dir_entry_2 Casting
Date: Wed, 03 Oct 2012 10:39:55 -0700	[thread overview]
Message-ID: <506C786B.4080704@linux.vnet.ibm.com> (raw)
In-Reply-To: <20121002210836.GA15277@thunk.org>

On 10/02/2012 02:08 PM, Theodore Ts'o wrote:

> On Tue, Oct 02, 2012 at 12:02:22PM -0700, Wade Cline wrote:
>> Hello Theodore Ts'o,
>>
>> Is there a function similar to ext2fs_dir_iterate2() that will call a hook
>> function on an ext2_dir_entry_2 structure and not an ext2_dir_entry
>> structure?
>>
>> The reason I ask is because btrfs-convert currently tries to do a cast
>> between the two structures as such:
>>
>> 	static int dir_iterate_proc(..., struct ext2_dir_entry *old, ...)
>> 	{
>> 	...
>> 		struct ext2_dir_entry_2 *dirent = (struct ext2_dir_entry_2 *)old;
>>
>> which works fine on little-endian machines, but breaks on big-endian machines.
> The reason why we don't have that function today is because what most
> programs (especially inside e2fsprogs) have done is to use the
> ext2_dir_entry structure and just simply used (name_len&  0xff) to get
> the actual name length, and in the case of e2fsck (which is the only
> program which in practice has cared about the file type) to get the
> file type by doing (name_len>>  8).
>
I see. That should work fine, too.

>> If there isn't, would you be interested in a patch that adds a
>> function, say, ext2_dir_entry_upgrade(struct ext2_dir_entry *old,
>> struct ext2_dir_entry_2 *new) that will convert one structure to the
>> other and take into account the endianness of the machine? This
>> would be better than just ad-hoc fixing the code in btrfs.
> We could do that, but that would mean needing to copy the data
> structure somewhere else, which means you would have to allocate
> memory for the new data structure, and then you'd have to release that
> memory later, etc.
>
> I would think that using (name_len&  0xFF) is a much simpler solution,
> and my suggestion is to not depend on the file type in the directory
> entry (since there might be some very old ext2 file systems that don't
> set the file type), and to use the inode's mode bits as authoratative
> for the file type of the inode.
>
> Regards,
>
> 							- Ted
Interesting compatibility issue. Will keep it in mind.

Thank you for the help.

Sincerely,
Wade


  reply	other threads:[~2012-10-03 17:41 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <506B31B7.40405@linux.vnet.ibm.com>
2012-10-02 19:02 ` [e2fsprogs] ext2_dir_entry To ext2_dir_entry_2 Casting Wade Cline
2012-10-02 21:08   ` Theodore Ts'o
2012-10-03 17:39     ` Wade Cline [this message]
2012-10-03 17:58       ` Theodore Ts'o
2012-10-03 18:29         ` Wade Cline
2012-10-03 18:54           ` Theodore Ts'o

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=506C786B.4080704@linux.vnet.ibm.com \
    --to=clinew@linux.vnet.ibm.com \
    --cc=cmm@linux.vnet.ibm.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.